我們聽過無數的道理,卻仍舊過不好這一生。額,我說的是技術!
《分布式服務框架原理與實踐》這本書,一直在講一些大道理,和具體的業務和我本身的工作已經沒多大關系了。但是,不管怎么樣,還得總結下吧。別人的道理,並不是自己的道理!自己的的道理才是硬道理,哪怕是爛道理!
個人覺得這本書講得太寬泛,或者說講得不夠深入,或者文學范不夠,總之,感覺不夠吸引人,如果趕時間,還是算了吧。
他列舉了許多需要注意的方面,而且就每個方面以單獨的章節進行前因,后果的展示,應該說有比較好的或者統一的數據結構結構吧。下面稍微寫寫每個大道理。
第1章 應用架構的演進
這單其實比較扯淡,但是呢,又不得不說。因為並不一定所有人都明白以前是什么什么樣的。
從傳統垂直架構(單機巨無霸應用),缺點: 應用大,業務復雜,代碼無從復用,擴展差。
到RPC架構(遠程方法調用,簡單多機部署,框架如 apache thrift, avro-rpc, hessian, grpc),缺點:簡單rpc調用,會存在復雜的路由管理,依賴復雜無法厘清,服務治理問題。
到SOA服務架構,缺點:鏈路復雜,應用龐大,成本高,具體缺點未列舉,其着重點是解決異構應用的服務化。
到微服務架構,缺點:鏈路復雜,應用龐大,成本高,具體缺點未列舉,其着重點是盡可能的服務拆分。
第2章 分布式服務框架入門
服務的拆分,縱向拆分(按業務領域),橫向拆分(將公共部分抽離出來)
服務的治理,生命周期管理,服務容量規划,運行期治理,服務安全。
DUBBO,HSF,Coral Service。
架構原理: RPC層,Filter Chain層,Service層。
功能特性: 服務訂閱發布,服務路由,集群容錯,服務調用,多協議,序列化方式,統一配置。
可靠性: 服務注冊中心,清除單點故障,鏈路健壯性。
服務治理: 服務運行狀態管控,服務監控,服務生命周期管理,故障快速定界定位,服務安全。
第3章 通信框架
長連接還是知連接。長連接更省資源,遠程通信是常態,鏈路重建更耗時。
BIO還是NIO。BIO同步阻塞,簡單,與線程一一對應,伸縮能力差。NIO,多路復用,並發性能超出機器最大連接句柄限制。Netty。
服務端設計原則,只提供上層API,屏蔽通信細節,具有可擴展性。
可靠性設計,主要應對網絡閃斷、網絡超時、通信對端宕機等情況下,仍能提供正常服務。
鏈路有效性檢測分三個層面,TCP層面心跳檢測(Kepp-Alive);協議層心跳檢測,主要存在於長連接協議中;應用層心跳檢測,發送心跳消息;(ping-pong, ping-ping)
斷連重連機制,鏈路中斷后,等等INTERVAL時間,再次發起連接。消息緩存重發,資源優雅釋放。
性能差三宗罪:網絡傳輸方式問題,BIO還是NIO;序列化性能差;純種模型問題。
netty使用誤:不指定線程池線程大小;i/o線程池使用不當,導致通信線程膨脹。
第4章 序列化與反序列化
Serializable, xml, json, MessagePack, fastjson, Protocol Buffer, Thrift, Avro.
第5章 協議棧
對接異構第三方服務時,通常會選擇HTTP/RESTFUL等公有協議;對於內部不模塊的服務調用,往往會選擇性能較高的二進制私有協議。
鏈路創建,由調用方發起創建,雙方握手后創建。鏈路關閉,發生異常后或者接收到關閉信號后關閉鏈路。
第6章 服務路由
基於服務注冊中心的訂閱發布;消費者緩存提供者地址;
負載均衡(隨機、輪循、調用時延、一致性哈希、粘滯連接(會話保持));
路由策略,本地路由優先,條件規則路由,腳本路由規則。
第7章 集群容錯
容錯策略:失敗切換(failover),失敗通知(failback),失敗緩存(failcache), 快速失敗(failfast),擴展。
第8章 服務調用
第9章 服務注冊中心
支持對等集群,提供CRUD接口,安全加固,訂閱發布機制,可靠性。zookeeper。
第10章 服務發布和引用
服務提供者需要支持通過配置、注釋、API調用等方式,把接口發布成遠程服務;消費者可能通過對等方式引用遠程服務提供者,實現服務的發布和引用。
服務框架支持亂序啟動,即提供者、消費者誰先啟動都可以。
第11章 服務灰度發布
灰度是指在黑白之間的顏色,能夠平滑過渡的一種發布方式。即機器一部分一部分地發布,將一部分用戶引到新功能上,另一部分仍在老功能上,測試完成后,再全量發布。
灰度應能支持失敗回滾。
第12章 參數傳遞
業務參數,框架參數。
第13單 服務多版本
服務端版本升級不影響客戶端。熱部署。
第14章 流量控制
動態配額分配制,動態配額申請制。
動態流控,分級流控。
並發控制,服務端全局控制,消費者流控。
連接控制,服務端、客戶端連接數流控。
第15章 服務降級
為保證核心服務的服務質量等級(SLA),停掉不太重要的業務(降級)。
屏蔽降級,容錯降級(業務放通),業務降級。
第16章 服務優先級調度
當系統資源非常有限時,為保證高優先級服務正常運行,需要降低非核心服務的調用頻次。
線程調度器方案,生成不同優先級的線程池,根據服務決定使用哪個線程池進行運行從而保證優先級。java優先隊列。加權優先隊列。服務遷入遷出控制。
第17章 服務治理
多團隊問題,服務安全問題,線下服務管控問題,線上保障服務SLA,故障快速定界定位。
flume日志采集。
第18章 分布式消息跟蹤
埋點日志,采集和存儲埋點日志,計算和展示,TraceID,調用上下文。
第19章 可靠性設計
基於注冊中心狀態檢測,鏈路有效狀態檢測,服務健康檢測。
故障隔離:進程級故障隔離,VM級故障隔離,物理機級故障隔離,機房故障隔離。
第20章 微服務架構
應用解耦,分而治之。
docker。
總體來說,本書對本人沒多大意義,就當消遣消遣吧。