天天看點

dubbo/dubbox 增加原生thrift及avro支援

Thrift2Protocal.java:

重寫父類AbstractProxyProtocol的二個抽象方法doExport及doRefer即可,doExport用于對外暴露RPC服務,在這個方法裡啟動thrift server,dubbo service provider在啟動時會調用該方法。而doRefer用于dubbo service consumer發現服務後,擷取對應的rpc-client。 

參考這個思路,avro也很容易內建進來:

AvroProtocol.java

不要忘記在META-INF/dubbo/internal下添加名為com.alibaba.dubbo.rpc.Protocal的檔案,内容為:

接下來談談如何打包到dubbo的jar裡:  

dubbo-rpc/pom.xml裡,把二個新增的項目加進來:

然後dubbo/pom.xml裡:

dependencies節也要增加:

這樣打包出來的dubbo-xxx.jar裡,就包括新增的Protocol。至于google的protobuf,目前處于3.x -beta階段,等以後出正式版了,再看情況整合起來。

最後,對dubbo/thrift/avro/rest這4種協定,做了下簡單的對比測試,測試用例很簡單:

用戶端調用ping方法,伺服器傳回字元串"pong",在mac book pro上做5萬次調用,結果如下:

這跟預期一緻,REST走http協定,自然最慢,avro與dubbo底層的網絡通訊都是借助netty實作,在同一個數量級,但是avro的二進制序列化效率更高,是以略快,而thrift則是從裡到外,全都是facebook自己實作的,性能最優,完勝其它協定。

個人建議:對于一個服務接口,對外同時提供thrift、REST二種形式的服務實作,内部子系統之間用thrift方式調用(因為thrift跨語言,其實從外部進來的調用,也可以用thrift-rpc方式),一些不友善直接用thrift-client調用的場景,仍然走傳統的REST.