天天看點

《分布式服務架構原理與實踐》閱讀筆記

前言

  轉眼間工作已經有了一年半,工作之後所做的事情與預想中的還是有較大的差距的。回想一年多以來,大多數的時間都在處理業務邏輯或是重構已有的代碼,在前人的基礎上修修改改,真正的技術進步并不是很大。

  做程式員這一行,還是要經常檢討,時常學習的。在工作時間之外盡可能去了解一些工作接觸不到的知識面。在工作的第一年,讀了一些C++程式員的基礎書籍,今年準備讀一些更高層次的東西,比如架構,設計等,擴充一下視野。

  本篇博文記錄一些筆者在閱讀《分布式服務架構原理與實踐》過程中一些比較經典的圖示或語句。

正文

1.應用架構的演進

《分布式服務架構原理與實踐》閱讀筆記
  • MVC架構:讀書時候做的大多數項目都是MVC架構,适用于業務規模小的場景。所有功能部署在同一個程序中,通過雙機或者前置硬體負載均衡器來實作負載均衡。用于分離前背景邏輯是MVC架構的關鍵
  • RPC架構 :将核心業務和公共服務抽離供上層使用。用于提高業務複用和拆分是RPC架構的關鍵
  • SOA架構 :面向服務的架構,多用于企業内部,重用已有的不同的異構元件。
  • 微服務架構 :便于靈活開發、持續傳遞。将服務原子化,各個微服務獨自打包部署和更新,降低開發和運維成本

2.通信架構

1、關鍵技術點

  • 長連接配接和短連接配接:長連接配接更節省資源
  • 同步IO和異步IO:同步IO調用簡單,異步IO性能高

2、可靠性設計

  • 鍊路有效性檢測:保持心跳,單向心跳雙向心跳都行
  • 斷線重連:斷線之後過段時間再重連
  • 消息緩存
  • 資源優雅釋放

3.序列化

  序列化就是将對象序列化為位元組流用于不同程序之間的通信。常見的序列化技術有谷歌的protobuf和facebook的thift,谷歌的性能更優。分布式架構應該支援擴充性,可擴充多種序列化方式。

4.協定棧

  1. 可靠性設計
  • 用戶端連接配接逾時
  • 用戶端斷線重連
  • 用戶端重複握手保護
  • 消息緩存重發,對方當機恢複之後将當機期間發送失敗的消息重新發送
  • 心跳機制
  1. 協定的相容性和可擴充性
    《分布式服務架構原理與實踐》閱讀筆記

5.服務路由

1.透明化路由

  • 基于服務注冊中心的訂閱釋出
  • 消費者緩存服務提供者位址:即使服務注冊中心當機也不會影響消費者與生産者之間的通信

    2.負載均衡

  • 随機
  • 輪詢
  • 服務調用時延
  • 一緻性哈希
  • 粘紙連接配接

2.路由規則

總的來說路由規則配置要足夠靈活,支援多種配置方式,實時生效,部分生效等。

6.叢集容錯

  1. 叢集容錯的場景
  • 通信鍊路故障
  • 服務端逾時
  • 服務端調用失敗
  1. 容錯政策
  • 失敗自動切換
  • 失敗通知:通知上層調用者,由上層處理
  • 失敗緩存:緩存請求,等鍊路正常後再發送
  • 快速失敗:直接忽略異常,記錄日志
  • 容錯政策擴充:支援可擴充,采用其他手段根據不同條件不同處理

7.其他

  1. 基于注冊中心的訂閱釋出
    《分布式服務架構原理與實踐》閱讀筆記
  2. 分布式事務設計

    兩階段送出采用的是悲觀鎖政策,需要等待最慢的參與者,一旦協調者故障則整個事務就會阻塞。在分布式架構中,事務是一件很麻煩的事情。應盡量在業務層避免使用分布式事務。在大多數的業務場景中,我們可以使用最終一緻性替代傳統的強一緻性。

    《分布式服務架構原理與實踐》閱讀筆記

繼續閱讀