1. 程式人生 > >服務調用框架DataStrom

服務調用框架DataStrom

不發送 進行 -c 分享 分包 自己 ssi ast 傳輸

根據以前的命名服務,從新構建了下服務框架;

結構模式;c-center-s;

1.服務端:

服務端啟動,講自己的IP,端口註冊到註冊中心節點(master),然後註冊自己的處理類(需要繼承對應接口);

同時需要設置服務類型(是否是主從服務,如果是主從服務還需要設置自己是否是master);

如果不是主從服務則中心采用hash負載均衡進行服務調度;

同時有心跳給註冊中心;

2.註冊中心

啟動註冊中心,註冊中心是主從方式存在,啟動時選舉自己為master;然後接收其余註冊中心回應,2秒沒有收到則認為自己是master進行發布,收到master的回復則更新信息;

master節點實時有心跳;

主要工作:

1.判斷服務狀態是否可以用,調度服務;

主從服務時判斷master服務,進行數據處理;

多服務認為是需要選擇調度,則使用均衡方式;

2.負載均衡服務,調度服務;

3.判斷註冊中心master節點,隨時準備選舉新master

3.客戶端

客戶端直接向註冊中心請求:1.請求服務地址,直接與服務通訊 2.請求數據傳輸,直接由中心傳遞數據 ;同時需要設置是否需要回執數據;

技術分享

4.通訊

整個框架考慮到數據實時傳輸,大數據量處理,直接采用udp通訊;提供了高層封裝;

封裝的通訊層使用了數據分包,按照udp適合的傳輸包大小設置,你也可以自己調用接口設置分包大小;每包分配了一個ID,同時一次傳輸認為是一個session,分配seesion的id;

接收端按照數據接收,同時有包丟失時會再次向發送端請求再次發送;

接收端設計了接收發送;

發送端進行了數據緩存,內存中緩存一定時間,接收到接收端完成的ack就清除,否則保持1分鐘;直到內存耗盡;

如果是註冊中心,數據內存緩存到期還會緩存到本地數據庫中(持久化),在本地保持最近10分鐘數據;都是timer清除;

采用udp同樣也是基於框架功能,不需要連接,可以在使用時可以直接反向發送數據;也可以不發送;

整個通訊已經測完成;

5.使用包

本框架使用了goolge工具包guava-22.0,界面庫JTattoo-1.6.11,公共序列化包fastjson-1.2.9;持久化數據庫BerkeleyDB

服務調用框架DataStrom