重點(diǎn)來了,本文全面闡述一下我們的RPC是怎么實(shí)現(xiàn)并如何使用的,跟Kubernetes和Openstack怎么結(jié)合。
在選型一文中說到我們選定的RPC框架是Apache Thrift,它的用法是在Main方法中重啟服務(wù),在Client端連接服務(wù)去調(diào)用,
而我的想法是要跟Dubblo、HSF的用法一樣,因?yàn)楹芏嗳硕际炝?xí)這兩個(gè)框架的用法,特別是我們好幾個(gè)項(xiàng)目都是基于EDAS開發(fā)的,而且世面上用Dubbo的公司也很多。
順便再說一下我們對(duì)于RPC的幾點(diǎn)要求:
- 1,兼容Dubbo和HSF的使用方法,支持版本和服務(wù)分組,支持項(xiàng)目隔離
- 2,客戶端重試機(jī)制,可以配置次數(shù)和間隔時(shí)間
- 3,客戶端線程池
- 4,服務(wù)端可以平滑無縫升級(jí)而不影響客戶端的使用
兼容Dubbo就必然要使用Spring框架,那我們就直接上Spring Boot好了,號(hào)稱Spring Boot為微服務(wù)開發(fā)而生,一步到位,將Thrift跟Spring Boot整合。
版本和服務(wù)分組可以通過Kubernetes的Service的Label來實(shí)現(xiàn),我們客戶端在查找服務(wù)的時(shí)候通過這兩個(gè)標(biāo)簽再加上接口類的Label來定位Service的Cluster IP,這里不直接使用Service名稱來調(diào)用服務(wù)的原因是通過Label查詢Servcie更加靈活一些,Service的名稱不受限制,隨時(shí)可以啟動(dòng)一個(gè)帶有相同Label的新Service來替換舊的Service.
項(xiàng)目隔離可以用Kubernetes的namespace來實(shí)現(xiàn),一個(gè)namespace是一個(gè)項(xiàng)目,當(dāng)然項(xiàng)目之間也可以互相調(diào)用,默認(rèn)情況下是整個(gè)Kubernetes集群的服務(wù)都是可以被調(diào)用到的如果在沒有指定namespace的情況下。
客戶端重試機(jī)制用代理Thrift連接的方式來實(shí)現(xiàn),在連接或接口方法調(diào)用異常時(shí)發(fā)起重新連接,參考:https://liveramp.com/engineering/recon