當前位置:編程學習大全網 - 源碼下載 - rpc框架都有哪些rmi dubbo

rpc框架都有哪些rmi dubbo

Dubbo分層

config(配置層 )

proxy(服務代理層)

registry( 註冊中心層)

cluster( 路由層)

monitor( 監控層)

protocol( 遠程調用層)

exchange( 信息交換層)

transport( 網絡傳輸層)

serialize( 數據序列化層)

對外配置接口

以ServiceConfig, ReferenceConfig為中心,可以直接new配置類,也可以通過spring解析配置生成配置類

Javassist ProxyFactory

Jdk ProxyFactory

服務接口透明代理,生成服務的客戶端Stub和服務器端Skeleton

以ServiceProxy為中心,擴展接口為ProxyFactory

選擇

Zookeeper

Redis

Multicast

Simple

支持基於網絡的集群方式,有廣泛周邊開源產品,建議使用dubbo-2.3.3以上版本(推薦使用)

依賴於Zookeeper的穩定性

支持基於客戶端雙寫的集群方式,性能高

要求服務器時間同步,用於檢查心跳過期臟數據

去中心化,不需要安裝註冊中心

依賴於網絡拓普和路由,跨機房有風險

Dogfooding,註冊中心本身也是壹個標準的RPC服務

沒有集群支持,可能單點故障

封裝服務地址的註冊與發現

以服務URL為中心,擴展接口為RegistryFactory, Registry, RegistryService

選擇

Spring

Jetty

Log4j

自動加載META-INF/spring目錄下的所有Spring配置

啟動壹個內嵌Jetty,用於匯報狀態

大量訪問頁面時,會影響服務器的線程和內存

自動配置log4j的配置,在多進程啟動時,自動給日誌文件按進程分目錄

用戶不能控制log4j的配置,不靈活

條件路由

腳本路由

基於條件表達式的路由規則,功能簡單易用

有些復雜多分支條件情況,規則很難描述

基於腳本引擎的路由規則,功能強大

沒有運行沙箱,腳本能力過於強大,可能成為後門

Random

RoundRobin

LeastActive

ConsistentHash

隨機,按權重設置隨機概率(推薦使用)

在壹個截面上碰撞的概率高,重試時,可能出現瞬間壓力不均

輪循,按公約後的權重設置輪循比率

存在慢的機器累積請求問題,極端情況可能產生雪崩

最少活躍調用數,相同活躍數的隨機,活躍數指調用前後計數差,使慢的機器收到更少請求

不支持權重,在容量規劃時,不能通過權重把壓力導向壹臺機器壓測容量

壹致性Hash,相同參數的請求總是發到同壹提供者,當某壹臺提供者掛時,原本發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引起劇烈變動

壓力分攤不均

Failover

Failfast

Failsafe

Failback

Forking

Broadcast

失敗自動切換,當出現失敗,重試其它服務器,通常用於讀操作(推薦使用)

重試會帶來更長延遲

快速失敗,只發起壹次調用,失敗立即報錯,通常用於非冪等性的寫操作

如果有機器正在重啟,可能會出現調用失敗

失敗安全,出現異常時,直接忽略,通常用於寫入審計日誌等操作

調用信息丟失

失敗自動恢復,後臺記錄失敗請求,定時重發,通常用於消息通知操作

不可靠,重啟丟失

並行調用多個服務器,只要壹個成功即返回,通常用於實時性要求較高的讀操作

需要浪費更多服務資源

廣播調用所有提供者,逐個調用,任意壹臺報錯則報錯,通常用於更新提供方本地狀態

速度慢,任意壹臺報錯則報錯

封裝多個提供者的路由及負載均衡,並橋接註冊中心

以Invoker為中心,擴展接口為Cluster, Directory, Router, LoadBalance

Cluster選擇

Router選擇

路由規則

容器

RPC調用次數和調用時間監控

以Statistics為中心,擴展接口為MonitorFactory, Monitor, MonitorService

Dubbo協議

Rmi協議

Hessian協議

連接個數:單連接

連接方式:長連接

傳輸協議:TCP

傳輸方式:NIO異步傳輸

序列化:Hessian二進制序列化

適用範圍:傳入傳出參數數據包較小(建議小於100K),消費者比提供者個數多,單壹消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大文件或超大字符串。

適用場景:常規遠程服務方法調用

采用NIO復用單壹長連接,並使用線程池並發處理請求,減少握手和加大並發效率,性能較好(推薦使用)

適合於小數據量大並發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況

Dubbo缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低

Dubbo協議缺省每服務每提供者每消費者使用單壹長連接,如果數據量較大,可以使用多個連接

為防止被大量連接撐掛,可在服務提供方限制大接收連接數,以實現服務提供方自我保護

在大文件傳輸時,單壹連接會成為瓶頸

總結

可與原生RMI互操作,基於TCP協議

偶爾會連接失敗,需重建Stub

參數及返回值需實現Serializable接口

參數及返回值不能自定義實現List, Map, Number, Date, Calendar等接口,只能用JDK自帶的實現,因為hessian會做特殊處理,自定義實現類中的屬性值都會丟失

連接個數:多連接

連接方式:短連接

傳輸協議:HTTP

傳輸方式:同步傳輸

序列化:Hessian二進制序列化

適用範圍:傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件

適用場景:頁面傳輸,文件傳輸,或與原生hessian服務互操作

提供者用Dubbo的Hessian協議暴露服務,消費者直接用標準Hessian接口調用

或者提供方用標準Hessian暴露服務,消費方用Dubbo的Hessian協議調用

基於Hessian的遠程調用協議

可與原生Hessian互操作,基於HTTP協議

需hessian.jar支持,ty為統壹接口

以Message為中心,擴展接口為Channel, Transporter, Client, Server, Codec

選擇

Hessian

Dubbo

Json

Java

性能較好,多語言支持(推薦使用)

Hessian的各版本兼容性不好,可能和應用使用的Hessian沖突,Dubbo內嵌了hessian3.2.1的源碼

通過不傳送POJO的類元信息,在大量POJO傳輸時,性能較好

當參數對象增加字段時,需外部文件聲明

純文本,可跨語言解析,缺省采用FastJson解析

性能較差

Java原生支持

性能較差

可復用的壹些工具

擴展接口為Serialization, ObjectInput, ObjectOutput, ThreadPool

選擇

Business

RPC

Remoting

Service

Config

Proxy

Registry

Cluster

Monitor

Protocol

Exchange

Transport

Serialize

層次結構

層說明

  • 上一篇:測手相免費測試app,手相掃壹掃測試法
  • 下一篇:筆記本電腦怎麽分盤
  • copyright 2024編程學習大全網