如何設計一個 RPC 框架

1. 服務框架的設計

儘管不同的分佈式服務框架實現細節存在差異,但是核心功能差異不大,下面的架構圖描繪了一個分佈式服務框架的整體邏輯架構。

如何設計一個 RPC 框架

總共分為 3 層:

  1. 服務層,Service,其中主要部分就是動態代理,主要用於將服務提供者的接口封裝成遠程服務調用。上層的服務接口用於 Spring 之類的業務框架使用,也是 Spring 的 bean.
  2. 過濾器層,服務調用職責鏈,提供多種調用切面供框架自身和使用者擴展,例如負載均衡,性能統計,服務調用完成通知,失敗重試等。
  3. RPC 層,這裡就是 RPC 框架的核心部分,包括通信框架,序列化框架,還有用於屏蔽底層通信框架和序列化框架的抽象接口。

分佈式服務框架通常會包含另外兩個重要功能:服務治理中心服務註冊中心

1. 服務註冊中心:負責服務的發佈和通知,通常支持對等集群部署,某個節點宕機不會影響整個集群不可用。即使全部宕機,隻影響新的節點註冊和發佈,不影響現有的,因為客戶端需要緩存服務路由信息。

2. 服務治理中心: 服務治理中心通常包括服務治理接口服務治理 Portal,架構師,測試人員和系統運維人員通過服務治理 Portal 對服務的運行狀態,歷史數據,健康度和調用關係等進行可視化的分析和維護,目標是要持續優化服務,防止服務架構腐化,保證服務高質量運行。

2. 服務框架的功能

雖然每個服務框架不盡相同,但是還有有一些核心功能是相同的,比如以下功能:

  1. 服務訂閱發佈:比如,配置化發佈和引用服務,服務自動發現,服務在線註冊和取消註冊。
  2. 服務路由:比如,默認提供隨機路由,輪詢,基於權重的路由,粘滯連接,路由定製功能。
  3. 集群容錯:比如,Failover(失敗自動切換),Failback(失敗自動恢復),Failfast(快速失敗)。
  4. 服務調用:需要支持:同步調用,異步調用,並行調用。
  5. 多協議:包括私有協議,公有協議。
  6. 序列化方式:需要支持二進制和文本類序列化方式。
  7. 統一配置:支持本地靜態配置,支持基於配置中心的動態配置。

以上功能可以按照業務定製,不需要 100% 支持。

3. 服務框架的性能指標

分佈式服務框架的性能肯定比不上本地調用,原因是:網絡通信,序列化,反射調用,動態代理這些都會消耗性能。所以需要有性能指標。

  1. 高性能:在同等資源佔用情況下,單服務提供者的 TPS 要儘量高。
  2. 低延時:在同等資源佔用情況下,服務調用延時要儘量低。
  3. 性能線性增長:如果增加了服務提供者,整體性能要能夠線性增長。
  4. 可靠性:服務註冊中心的可靠性,網絡鏈路的可靠性。

4. 服務治理需要哪些功能?

  1. 服務運行態監控,例如通過路由導流,限流,服務降級,動態控制超時時間。
  2. 服務監控,性能統計,報表,報警。
  3. 服務生命週期管理
  4. 故障快速定位
  5. 服務安全

總結

以上就是在設計分佈式服務框架需要注意的地方,例如整體架構的設計,框架需要哪些功能,框架的需要保證哪些性能。同時,一個框架只是可以使用時不夠的,還需要服務治理,保證服務不被腐化,同時保證服務的健康。

引用

《分佈式服務框架——原理和實踐》——李林峰


分享到:


相關文章: