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 -屁話一籮筐,想聽的人就過來

屁話一籮筐,想聽的人就過來

  • 828