輕量化的分布式服務框架 Hasor-RSF 盤點

jopen 9年前發布 | 21K 次閱讀 分布式 分布式/云計算/大數據

介紹:

  一個輕量化的分布式服務框架,相信這類框架已經不是什么新鮮事物,可用的替代方案有很多這里就不多說了,說一下RSF解決的問題把。

1.分布式
  這個是基本功能之一,消費者會自動輪詢本地可用IP地址表以減少對單一服務提供者的訪問壓力。

2.接口泛化
  服務提供者和服務消費者,之間不需要明確的接口定義。說白了就是提供和消費兩個程序各自使用各自的接口,無需搞出一個接口jar做統一約束。RSF會自動根據方法簽名來匹配調用。

3.自定義序列化
  支持自定義序列化。內置Hessian、Java兩種序列化方案,默認配置 Hessian 版本為4.0。如需更換其它版本直接引入相關Jar包即可,內置的Hessian包名已經經過處理不會產生沖突。

4.同步 or 異步
  基于接口包裝的服務調用是同步處理的,因為異步的話無法及時獲取返回值。基于RsfClient接口調用遠端服務的話,可以同步也可以異步。異步的話有CallBack也有Future。

5.熱裝載/熱卸載
  RSF上的服務都是動態的,服務可以隨時發布隨時卸載。

6.多版本
  定位一個RSF服務采用Group,Name,Version三個屬性。一臺服務器可以同時發布同一個服務的不同版本。

7.服務攔截器
  雖說用處可能不是很大,但是對于某些想管理所有遠程調用的需求來說還是必要的。比方說:服務的使用授權、還有調用統計以及本地服務調用優先等。


接下來需要解決的問題:

1.服務自動發現
  RSF不同于 dubbo 的是它沒有一個服務注冊中心。取而代之的是自動發現。

2.服務網關
  面對外網的RSF調用,需要一個RSF服務網關來代為轉發。

3.服務監控
  可以全面實現服務的調用流程監控。等等,甚至可以操縱服務上下限。設置服務限流等策略。


目前RSF存在的問題:


1.RSF服務在調用遠端服務時如果出現遠端拒絕,客戶端會進行重試ChooseOther響應信息(尚未支持這一功能)

2.不支持多語言客戶端。這個是體力活,如果去支持的話RSF是可以做到的。因為RSF傳輸協議是自有的傳輸協議,多語言要解決的只有序列化的問題。

例子:

Server端:

RsfBootstrap bootstrap = new RsfBootstrap();
bootstrap.doBinder(new RsfStart() {
    public void onBind(RsfBinder rsfBinder) throws Throwable {
       rsfBinder.rsfService(EchoService.class, new EchoServiceImpl()).register();
    }
}).socketBind(8001);
RsfContext rsfContext = bootstrap.sync();

客戶端:

//1.使用 RSF 引導程序創建 RSF。
RsfBootstrap bootstrap = new RsfBootstrap();
bootstrap.doBinder(new RsfStart() {
    public void onBind(RsfBinder rsfBinder) throws Throwable {
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        rsfBinder.bindAddress(hostAddress, 8001);//分布式的遠程服務提供者:1
        rsfBinder.bindAddress(hostAddress, 8002);//分布式的遠程服務提供者:2
        rsfBinder.rsfService(EchoService.class).register();
    }
});
RsfContext rsfContext = bootstrap.sync();
//
//2.獲取遠程服務的包裝類
EchoService myService = rsfContext.getRsfClient().wrapper("RSF", EchoService.class.getName(), "1.0.0", EchoService.class);
//3.發起調用
for (int i = 0; i < 1000000; i++) {
    String echoMsg = myService.echo("你好..");
}

接口和實現類:

public interface EchoService {
    public String echo(String sayMessage);
}
public class EchoServiceImpl implements EchoService {
    public String echo(String sayMessage) {
        return "RE : " + sayMessage;
    }
}

源碼位置:
    http://git.oschina.net/zycgit/hasor/tree/master/project-rsf   下的(project-rsf)項目 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!