技術棧數據庫
微服務選型api
2.5.1 HTTP API架構
採用Koa.js 2.x做爲http api層框架,主要封裝和組裝rpc服務。框架
Koa的優勢:運維
簡單,可定製性強;異步
高性能,即便一樣不優化,性能也比較好;函數
「同步」流程控制,支持Promise、Generator、Async函數。微服務
當前作法:性能
目前使用Generator和yield + Promise來作異步流程控制;優化
等Node原生支持Async函數,全面切換到Async + Promise(預計10月份) 。
2.5.2 使用RPC拆分服務
比較好的作法是http api調用rpc,提供最終API
單一調用,簡單接口;
多個調用,能夠封裝成上層服務,也能夠組合用。
RPC框架,如Dubbo、dubbo-x、Motan、gRPC等,咱們選的是gRPC。
Node.js還有senecajs.org專門作微服務的,惟一的缺點是多語言支持,其餘都很是好。
2.5.3 RPC拆分後,拆分DB
通常拆分RPC都會按照某些業務主體劃分,因此數據庫是能夠拆分出去。
好比
庫存
訂單
評論
彈幕
其實,只要保證用戶一致,其餘數據庫保存各自的數據就好。在數據分析的時候,彙總到一塊兒便可,不管etl仍是stream均可以。
服務和db拆分的好處是便於橫向擴展,這樣就能夠作到動態伸縮,哪裏有瓶頸治哪裏,在架構調優上是有明顯優點的。
2.5.4 服務多,就要服務治理、發現
採用Consul做爲服務發現軟件(etcd也不錯)。
2.5.5 API多了,怎麼辦呢?
都是重複的,如日誌、權限等,這時,咱們須要API Gateway。
https://getkong.org/
經過Nginx + lua實現,提供插件機制,很是好用。
2.5.6 容器化
剩下的就是你們熟悉的Docker了。
2.5.7 總結
架構是相同的,其實語言是無所謂的。使用Node.js能夠最小成本的快速構建服務,不管從技術難度,運維,仍是將來趨勢上都是比較好的技術選型。