服務彈力設計總結
一、服務冗餘
1、負載均衡器+健康檢查 Nginx或HAProxy
2、RPC框架 實現服務自動發現和註冊 zookeeper
3、自動化實現服務伸縮
二、服務解耦
1、分層(應用層、服務層、數據服務層)
2、服務拆分(縱向拆分,將大應用拆成多個小應用 橫向拆分:將應用層公共邏輯業務抽象出一個公共的服務獨立部署向外提供服務)
3、數據分片,每個服務獨立用一個數據庫,如果單表的數據量很多時,需要拆分成多個表,當一個庫不能存放下數據時還需要拆成多個數據庫
三、服務容錯和保護設計
1、錯誤方面: 重試策略+熔斷(當錯誤達到一定次數時進行服務降級處理,例如返回一個固定值)+ 冪等性設計
2、流控方面: 服務限流+服務降級(緩存(直接查緩存)、裁剪數據(返回部分簡單數據)、裁剪流程(產品邏輯上做優化,訪問數據次數減少))
3、一致性: 強一致性(兩階段提交 但是影響效率)、 最終一致性(消息隊列異步通訊) 、事務補償機制
4、自動化運維:網關流量調度和服務監控
四、服務監控
1、服務狀態監控 根據監控的系統和業務數據,當服務性能負載很大時就會自動擴容或者進行服務限流、服務降級處理
2、服務內部鏈路的追蹤,以便於後面排查問題
3、異常日誌報警