微服務框架學習三:服務通訊框架介紹

Pegasus來源於點評的開源框架pigeon:https://github.com/dianping/pigeongit

什麼是Pegasus

Pegasus是一個高性能的分佈式服務框架,致力於提供RPC遠程服務調用方案,並可做爲精簡版SOA服務治理的方案。實現基本的RPC,路由,負載均衡,容錯,統計報表,服務註冊訂閱功能。github

其核心模塊包括如下幾類:sql

  • 遠程通訊:基於NIO的Socket通訊,"底層異步上層同步" + "請求|響應" 模式的信息交互方式,可支持多種序列化協議。
  • 集羣支持:提供服務負載智能感知路由策略(load balance),容錯(failover),以及服務集羣等支持。
  • 服務註冊:實現服務自動/手動註冊,服務調用者自感知的pub/sub模型。
  • 監控分析:可插拔的集中式服務調用監控分析中心。
  • 異構支持:提供http交互接口的支持,以便各種異構系統的接入。
  • 調用方式:支持多種服務調用方式,如:sync, future, callback, oneway。

爲何須要Pegasus

隨着應用規模的不斷擴大,傳統的垂直應用架構及應用堆砌已沒法知足,急需一套分佈式服務架構以及配套的服務治理框架,以便推進總體業務架構的演進。
技術架構的演進之路簡述:單一應用優化 => 垂直拆分 => 分佈式架構 => 分佈式服務治理 => 雲服務架構數據庫

構建一個穩定,高效,容錯,易維護,可監控的服務調用框架,以便推進公司業務系統朝着SOA架構演進,從而使總體業務架構更加清晰,可控和可度量,最終實現業務產品的健康,敏捷發展。

單一應用優化:應用做爲單一包部署,以部署多臺機器和數據庫表結構及sql爲優化手段。

垂直拆分:單一應用按照業務模塊拆分爲多個獨立的應用,分散流量並各自根據流量進行橫向擴展,此時數據庫可能也已按照業務拆分開,減少單庫的壓力。

分佈式架構:應用之間存在複雜頻繁交互,此時應抽取核心業務造成業務中心,爲其餘應用提供服務,具體業務應用應儘可能薄,以便可以快速響應業務需求變動。

分佈式服務治理:業務交互愈來愈複雜,人爲掌控已愈來愈難,此時應該有治理系統專門負責,包括分析業務依賴,監控業務性能,優雅升降級,容量規劃等,以監控和提高服務質量,支撐決策分析。

雲服務架構:業務脈絡繼續無限增加,一套敏捷和高質的完整支撐框架變得愈來愈重要,縮短開發上線的生命週期,下降試錯成本(快速試錯),資源優化調配,灰度發佈等等,都須要一套自動化的,全局的資源調配架構。包括iaas,paas及一整套配套的工具和系統支持,如iaas的管理工具接口,paas的配置中心,自動化發佈流程及工具,自動化QA系統等等。至關複雜(公有云更甚),須要投入很大的人力與物力,但若成功構建,效果明顯。架構

咱們能夠在哪裏用Pegasus

Pegasus能夠應用於內部全部Java系統之間的遠程服務調用(或其餘語言系統對Java系統的調用),它所提供的高性能﹑智能負載路由﹑容錯﹑集羣等特性,爲打造快速﹑穩定﹑可靠的服務提供了技術保障,也爲推動SOA化提供了基礎平臺支持。負載均衡

Pegasus的性能

Pegasus採用NIO方式傳輸二進制流數據,並採用長鏈接方式減小握手,比通常的http短鏈接協議(如soap)更快,從而提升業務吞吐量。另外經過智能的全局負載均衡策略,可以更加合理的調配資源,從而提升總體性能。框架

Pegasus VS Other RPC

Pegasus調用方式

 

 Pegasus類圖

Pegasus協做圖

Pegasus如何保持高性能

  1. pegasus經過不斷的心跳檢測,判斷服務提供者是否正常服務,一旦與服務提供者的鏈接中斷,或者連續幾回心跳沒有反饋(如虛擬機假死,但socket鏈接仍創建),那麼就認爲該服務提供者出現了異常,會自動將該提供者從客戶端的可用列表中摘除,後續的請求將再也不派發給該異常服務端,保證全部的請求都能被正確處理,從而達到高可用。而一旦該提供者恢復正常(如重啓後),那麼客戶端重連任務會自動探測到它,並從新將其加入到可用列表中,接收並處理新的請求。
  2. 由於心跳檢測有時間間隔,在間隔期若是某個服務提供者的鏈接中斷,此時若是有請求發往該提供者會出現異常,此時咱們會將該請求發往其餘可用的提供者,即重試一次,因爲這種狀況機率很低,加上重試時又會碰到重試的提供者也瞬間中斷的概率幾乎爲0,因此徹底確保了請求會被髮送到可用的服務提供者。
相關文章
相關標籤/搜索