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

介紹:
  一個輕量化的分佈式服務框架,相信這類框架已經不是什麼新鮮事物,可用的替代方案有不少這裏就很少說了,說一下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調用,須要一個RSF服務網關來代爲轉發。

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


目前RSF存在的問題:
java


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

2.不支持多語言客戶端。這個是體力活,若是去支持的話RSF是能夠作到的。由於RSF傳輸協議是自有的傳輸協議,多語言要解決的只有序列化的問題。 git

例子: bootstrap

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();

客戶端: app

//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/rsf 異步

相關文章
相關標籤/搜索