重點來了,本文全面闡述一下我們的RPC是怎么實現(xiàn)并如何使用的,跟Kubernetes和Openstack怎么結(jié)合。 
在選型一文中說到我們選定的RPC框架是Apache Thrift,它的用法是在Main方法中重啟服務(wù),在Client端連接服務(wù)去調(diào)用,

而我的想法是要跟Dubblo、HSF的用法一樣,因為很多人都熟習(xí)這兩個框架的用法,特別是我們好幾個項目都是基于EDAS開發(fā)的,而且世面上用Dubbo的公司也很多。

順便再說一下我們對于RPC的幾點要求:

  • 1,兼容Dubbo和HSF的使用方法,支持版本和服務(wù)分組,支持項目隔離
  • 2,客戶端重試機制,可以配置次數(shù)和間隔時間
  • 3,客戶端線程池
  • 4,服務(wù)端可以平滑無縫升級而不影響客戶端的使用

兼容Dubbo就必然要使用Spring框架,那我們就直接上Spring Boot好了,號稱Spring Boot為微服務(wù)開發(fā)而生,一步到位,將Thrift跟Spring Boot整合。

版本和服務(wù)分組可以通過Kubernetes的Service的Label來實現(xiàn),我們客戶端在查找服務(wù)的時候通過這兩個標(biāo)簽再加上接口類的Label來定位Service的Cluster IP,這里不直接使用Service名稱來調(diào)用服務(wù)的原因是通過Label查詢Servcie更加靈活一些,Service的名稱不受限制,隨時可以啟動一個帶有相同Label的新Service來替換舊的Service.
項目隔離可以用Kubernetes的namespace來實現(xiàn),一個namespace是一個項目,當(dāng)然項目之間也可以互相調(diào)用,默認(rèn)情況下是整個Kubernetes集群的服務(wù)都是可以被調(diào)用到的如果在沒有指定namespace的情況下。

客戶端重試機制用代理Thrift連接的方式來實現(xiàn),在連接或接口方法調(diào)用異常時發(fā)起重新連接,參考:https://liveramp.com/engineering/recon