輕量級分布式服務化框架

2021-09-02 12:30:42 字數 2703 閱讀 7167

[size=x-large][align=center][b]輕量級分布式服務化框架[/b][/align][/size]

[list]

[size=medium][*]github: [url]

[*]doc: [url]

[/list]

[size=x-large][b]基本原理[/b][/size]

[img]

[align=left][size=medium]輕量級分部署服務排程框架的基本原理是服務提供方provider提供rpc服務,同時把ip和埠以及發布的rpc服務註冊到註冊中心,客戶端或者rpc消費者從註冊中心獲取服務provider列表,同時獲取provider提供的服務列表。另外客戶端還會監聽註冊中心的資料變化,獲知server宕機或者服務不可用,將該provider從客戶端provider快取列表中剔除,方便做容錯和負載均衡。[/size][/align]

[size=x-large][b]特性[/b][/size]

[size=medium][align=left]一、 負載均衡

提供基於roundrobin和隨機方式的負載均衡

二、 高可用

consumer會從註冊中心獲取到服務列表及該服務的提供者列表,如果某個提供者provider網路異常或者宕機,consumer能馬上感知到,加入不可用列表,如果從註冊中心收到服務不可用會剔除快取,不可用列表會重新嘗試發起連線,如果網路正常了會立即恢復。

三、 泛型

一般的rpc呼叫需要拿到服務提供方的業務api(inte***ce class,入參class,返回值class打包到乙個jar中,依賴該jar),如果使用泛型,只需要填寫inte***ce的name,版本,方法名稱,引數名稱,引數值,如果是物件,將物件字段封裝到乙個map中即可,無需依賴任何業務jar即可完成rpc呼叫。

四、 rpc上下文附件

rpc呼叫方可以將需要傳遞的上下文資訊填寫到上下文中,而不是作為rpc的入參,這樣provider可以從上下文中獲取到掉用方的上下文資訊。

五、 高可用註冊中心

rpc 框架提供了zookeeper,etcd,redis pubsub(支援單個,或者sentinel集群模式)的註冊中心,具備高可用功能。

六、 實時動態監控

provider提供了監控的api,監控可以使用該api加入到專案或者公司的監控平台。

七、 記憶體使用少

rpc使用的記憶體模型是tcp連線建立後自動分配一塊記憶體,讀和寫都在該記憶體中,不需要為每次請求分配記憶體,同乙個tcp記憶體復用,資料使用了壓縮的方式儲存和傳送,不支援返回資料量超大的呼叫(壓縮後超過1m)。

[/align][/size]

[size=x-large]整體架構[/size]

[img]

[size=medium]泛型:genericservice,consumer不依賴provider的api jar包即可完成remote api呼叫

監控:statmonitor,consumer註冊需要的遠端服務statmonitor,呼叫rpc獲取監控資料

webui:乙個視覺化rpc管理介面,

rpc呼叫:使用jdk proxy封裝傳送tcp資料,並等待資料返回,完成rpc呼叫。

負載均衡:在集群模式下,同乙個版本的rpc服務在多台伺服器上部署,consumer發起rpc呼叫使用負載均衡。

自動容錯:發現rpc provider不可用及時剔除,當可用時加入。

**:rpcclient註冊乙個remote intface時會返回乙個**。

多註冊中心:提供zookeeper,etcd,redis等註冊中心,並可以實現高可用。[/size]

[align=left][b][size=x-large]使用[/size][/b][/align]

[b]服務端provider[/b]

******rpcserver rpcserver = new ******rpcserver();

rpcserver.sethost("192.168.132.87");

rpcserver.setport(4321);

//將乙個service暴露為rpc服務

rpcserver.register(loginrpcservice.class, new loginrpcserviceimpl());

rpcserver.startservice();

// thread.currentthread().sleep(100000);//wait for call

rpcserver.stopservice();

[b]客戶端consumer[/b]

******rpcclient rpcclient = new ******rpcclient();

rpcclient.sethost("192.168.132.87");

rpcclient.setport(4321);

loginrpcservice loginrpcservice = rpcclient.register(loginrpcservice.class);

rpcclient.startservice();

boolean loginresult = loginrpcservice.login("admin", "admin");

rpcclient.stopservice();

[b]contact

qq : 839861706[/b]

輕量級分布式檔案系統fastDFS

fastdfs的結構比較簡單,主要由client tracker server和storage server三部分組成。client通過tracker server得到storage server的資訊,然後直接與storage server通訊訪問檔案,避免了tracker server成為瓶頸。...

XXL JOB 輕量級分布式任務排程平台

簡述 xxl job是乙個輕量級分布式任務排程平台,分布式任務排程中心。github doc 文件資料 db 排程資料庫 建表指令碼 xxl job admin 排程中心,專案原始碼 xxl job core 公共jar依賴 xxl job executor samples 執行器,sample示例...

輕量級分布式日誌管理新秀graylog

在分布式系統中,眾多服務分散部署在數十台甚至是上百臺不同的伺服器上,要想快速方便的實現查詢 分析和歸檔等功能,使用linux命令等傳統的方式查詢到想要的日誌就費時費力,更不要說對日誌進行分析與歸納。如果有乙個集中的日誌系統,便可以將各個不同的伺服器上面的日誌收集在一起,不僅能方便快速查詢到相應的日誌...