JSDC 2017
屁話一籮筐,想聽的人就過來
Simon Sun
其實這只是一個人性的實驗
標題殺人法XD
因為前一陣子在媒體業工作
發現台灣讀者又愛看又愛罵XD
所以還是要幫這個 slides 正名一下
而且一定要霸氣外露
高端大氣上檔次
狂霸酷炫屌炸天
( 這份 slides 的核心價值 )
網路新媒體轉型後端架構實作經驗分享
JSDC 2017
Simon Sun
好拉...看起來題目也沒有很酷炫也沒有屌炸天XD
自我介紹
Simon Sun
寫 code 是工作也是興趣
喜歡 JS 高彈性就如我的個性
JSDC 成員
email: blackghost0118@gmail.com
1. 了解舊架構與規劃新架構
2. 雲端服務選擇
3. 實作 Backend 的經驗分享
4. 雲端上遇到實作問題與解決方案
5. 結論
6. Q&A
+
ADMIN
DB converter
+
WEB
其實這個架構認真來說沒什麼問題
但是就是常常出問題
所以我真心覺得
應該是人的問題......
1. MySQL 移轉資料到 Mongo 有夠暴力
3. 交接者不了解系統架構就硬幹
2. 系統並沒有持續更新
4. 無法重現開發環境
了解完整個架構之後
新媒體的元素??
1. 地區化
2. 個人化
3. 影音圖片
4. 直播
5. AR, VR 應用
最後有空再來吐槽....
思考新架構方向
1. 後台上稿
2. 前台顯示
3. RSS
4. Mobile
5. APP
6. 公司其他網站
7. 合作公司資料授權
做一套,可以給任何平台串接
All Services Around API
1. 我們只需要專心處理 api 效能問題
2. 擴展容易
3. 輸出格式統一,文件統一
4. 抽換功能與模組容易
WHY?
API 主要架構
CHANGELOG.md
CHANGELOG.md
1. 確認功能發布時間
2. 秋後算賬
3. 了解夥伴改了什麼
ADMIN/
ADMIN/
app.js - 主要啟動程式
controllers/ - routers
middlewares/ - 中介處理
errorHandlers/ - 錯誤處理
validators/ - 驗證資料
WEB/
WEB/
app.js - 主要啟動程式
controllers/ - api routers
middlewares/ - 中介處理
errorHandlers/ - 錯誤處理
event/ - 活動使用的 api
Config/
CRON/
CRON/
rss.js - 匯入外部RSS新聞
hot.js - 更新熱門新聞
keywords.js - 更新熱門關鍵字
CRON/
Documents/
Libs/
Libs/
download.js - 下載檔案
hash.js - 密碼加密處理
htmlToString.js - 將所有 html 轉換成純文字
Database 的選擇
1. Read >> Write
2. JSON Format
Mongo/
Redis/
好處
1. 共用 Mongo 與 Redis 的 schema 與 method
2. 共用 libs
3. 易於統一管理
壞處
1. node_modules 太肥大
2. 架構會很肥大,巢狀層數太多
1. 了解舊架構與規劃新架構
2. 雲端服務選擇
3. 實作 Backend 的經驗分享
4. 雲端上遇到實作問題與解決方案
5. 結論
6. Q&A
大家還記得 8/15 那天嗎 ?
事件回憶錄
為何要上雲端?
1. 開設機器的時間
2. 自動擴展能力
3. 維運人員隱形成本
UI (個人認為)
Azure >> GCP >> AWS
功能
AWS >> GCP >> Azure
費用 (各代理商報價)
AWS >> Azure >> GCP
Other
1. 機房
2. 社群支援度 (GCPUG)
3. 未來公司需要整合的功能
4. 300 鎂的試用
就決定是你了..... GCP
1. 了解舊架構與規劃新架構
2. 雲端服務選擇
3. 實作 Backend 經驗分享
4. 雲端上遇到實作問題與解決方案
5. 結論
6. Q&A
async / await
async / await (優點)
1. 遠離 callback, Promise 地獄
2. 增加程式碼易讀性
3. 非同步操作更為簡便
async / await (缺點)
1. babel 好大包 QAQ
2. 其他缺點暫時沒想到 XD
模組化
一個檔案就是一個模組,都盡量處理單一功能
一個大的功能,都是由小模組組成
模組化 (優點)
1. 每個小模組都有獨立功能,程式碼單純
2. 看大功能就像看一篇文章
3. 抽換功能容易
模組化 (缺點)
1. 有些不常使用的程式碼也會被包成小模組
2. 架構上會非常龐大,檔案也非常多
3. 如果要做些許改變,就要獨立做另外一個模組
大量使用 middlewares
大量使用 middlewares (優點)
1. 資料驗證與邏輯區分離
2. code 會更簡潔,controllers 更單純
大量使用 middlewares (缺點)
1. 多了一層驗證的架構
2. 檔案變更多了 Orz
Redis Cache (優點)
1. 新聞平台讀比寫多,所以很適合使用 Cache
2. 搭配 mongo 的 JSON 格式更容易處理
3. 效能好速度快
4. 搭配 cronjob 可以處理較慢的資料
Redis Cache (缺點)
1. 更新時間有落差
2. 資料變更會比較麻煩
Mongodb
1. 盡量少於兩層的巢狀結構
2. 定義 schema 避免前端處理過多的事情
3. index, index, index
4. db.system.profile.find({ millis : {$gt : 300} })
5. db.xxx.find({}).explain()
Api Response Time
Api 系統效能
Mongodb 系統效能
Redis 系統效能
1. 了解舊架構與規劃新架構
2. 雲端服務選擇
3. 實作 Backend 的經驗分享
4. 雲端上遇到實作問題與解決方案
5. 結論
6. Q&A
Load Balancing
無法自己分配比重
所以自己開一台 VM + nginx
QAQ
mail server
自己做一台 api server 做介接
QAQ
CDN
自己做一個 image thumbnail server
QAQ
流量費好貴,又不想在上傳的時候縮圖
1. 了解舊架構與規劃新架構
2. 雲端服務選擇
3. 實作 Backend 的實做經驗
4. 雲端上遇到實作問題與解決方案
5. 結論
6. Q&A
1. 在評估成本後,上雲端方便很多
2. 需要 SEO 還是乖乖做 SSR
3. 系統再快還是抵不過過多的廣告
4. 如果可以我會選用一個完整的 CMS 當後台
5. 神一般的夥伴很重要
Q & A
Copy of JSDC 2017 -屁話一籮筐,想聽的人就過來
By simonsun2001
Copy of JSDC 2017 -屁話一籮筐,想聽的人就過來
屁話一籮筐,想聽的人就過來
- 864