<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          lindzh RPC輕量級分布式RPC框架

          聯(lián)合創(chuàng)作 · 2023-09-23 12:59

          輕量級分部署服務(wù)調(diào)度框架的基本原理是服務(wù)提供方Provider提供rpc服務(wù),同時把ip和端口以及發(fā)布的rpc服務(wù)注冊到注冊中心,客戶端或者 rpc消費(fèi)者從注冊中心獲取服務(wù)Provider列表,同時獲取Provider提供的服務(wù)列表。另外客戶端還會監(jiān)聽注冊中心的數(shù)據(jù)變化,獲知 server宕機(jī)或者服務(wù)不可用,將該P(yáng)rovider從客戶端Provider緩存列表中剔除,方便做容錯和負(fù)載均衡。

          基本原理

          特性

          一、  負(fù)載均衡
          提供基于RoundRobin和隨機(jī)方式的負(fù)載均衡
          二、  高可用
          Consumer會從注冊中心獲取到服務(wù)列表及該服務(wù)的提供者列表,如果某個提供者Provider網(wǎng)絡(luò)異常或者宕機(jī),
          Consumer能馬上感知到,加入不可用列表,如果從注冊中心收到服務(wù)不可用會剔除緩存,不可用列表會重新嘗試發(fā)起
          連接,如果網(wǎng)絡(luò)正常了會立即恢復(fù)。
          三、  泛型
          一般的rpc調(diào)用需要拿到服務(wù)提供方的業(yè)務(wù)api(interface class,入?yún)lass,返回值class打包到一個jar中,
          依賴該jar),如果使用泛型,只需要填寫interface的name,版本,方法名稱,參數(shù)名稱,參數(shù)值,如果是對象,
          將對象字段封裝到一個Map中即可,無需依賴任何業(yè)務(wù)jar即可完成rpc調(diào)用。
          四、  Rpc上下文附件
          Rpc調(diào)用方可以將需要傳遞的上下文信息填寫到上下文中,而不是作為rpc的入?yún)ⅲ@樣Provider可以從上下文中獲取
          到掉用方的上下文信息。
          五、  高可用注冊中心
          Rpc 框架提供了zookeeper,etcd,redis pubsub(支持單個,或者sentinel集群模式)的注冊中心,具備高可
          用功能。
          六、  實時動態(tài)監(jiān)控
          Provider提供了監(jiān)控的api,監(jiān)控可以使用該api加入到項目或者公司的監(jiān)控平臺。
          七、  內(nèi)存使用少
          Rpc使用的內(nèi)存模型是tcp連接建立后自動分配一塊內(nèi)存,讀和寫都在該內(nèi)存中,不需要為每次請求分配內(nèi)存,同一個
          tcp內(nèi)存復(fù)用,數(shù)據(jù)使用了壓縮的方式保存和發(fā)送,不支持返回數(shù)據(jù)量超大的調(diào)用(壓縮后超過1m)。

          整體架構(gòu)

          泛型:GenericService,Consumer不依賴Provider的api jar包即可完成remote api調(diào)用
          監(jiān)控:StatMonitor,consumer注冊需要的遠(yuǎn)程服務(wù)StatMonitor,調(diào)用rpc獲取監(jiān)控數(shù)據(jù)
          Webui:一個可視化rpc管理界面,https://github.com/lindzh/rpc-webui
          RPC調(diào)用:使用jdk proxy封裝發(fā)送tcp數(shù)據(jù),并等待數(shù)據(jù)返回,完成RPC調(diào)用。
          負(fù)載均衡:在集群模式下,同一個版本的Rpc服務(wù)在多臺服務(wù)器上部署,Consumer發(fā)起rpc調(diào)用使用負(fù)載均衡。
          自動容錯:發(fā)現(xiàn)rpc provider不可用及時剔除,當(dāng)可用時加入。
          代理:rpcClient注冊一個remote intface時會返回一個代理。
          多注冊中心:提供Zookeeper,etcd,redis等注冊中心,并可以實現(xiàn)高可用。

          使用

          Provider

          SimpleRpcServer rpcServer = new SimpleRpcServer();
          rpcServer.setHost("192.168.132.87");
          rpcServer.setPort(4321);
          //將一個service暴露為rpc服務(wù)
          rpcServer.register(LoginRpcService.class, new LoginRpcServiceImpl());
          rpcServer.startService();
          // Thread.currentThread().sleep(100000);//wait for call
          rpcServer.stopService();

          Consumer

          SimpleRpcClient rpcClient = new SimpleRpcClient();
          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();
          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.蜜桃 | 日韩激情视频 | 操逼视频123 | 亚洲最大性爱网站 | 天天夜夜爽 |