本文將分享一個(gè)高可用的池化 Thrift Client 及其源碼實(shí)現(xiàn),歡迎閱讀源碼(Github)并使用,同時(shí)歡迎提出寶貴的意見和建議,本人將持續(xù)完善。

本文的主要目標(biāo)讀者是對(duì) Thrift 有一定了解并使用的童鞋,如對(duì) Thrift 的基礎(chǔ)知識(shí)了解不多或者想重溫一下基礎(chǔ)知識(shí),推薦先閱讀本站文章《和 Thrift 的一場(chǎng)美麗邂逅》。

下面進(jìn)入正題。

為什么我們需要這么一個(gè)組件?

我們知道,Thrift 是一個(gè) RPC 框架體系,可以非常方便的進(jìn)行跨語(yǔ)言 RPC 服務(wù)的開發(fā)和調(diào)用。然而,它并沒有提供針對(duì)多個(gè) Server 的 Smart Client【1】。比如,你有一個(gè)服務(wù) service,分別部署在 116.31.1.1 和 116.31.1.2 兩臺(tái)服務(wù)器上,當(dāng)你需要從 Client 端調(diào)用該 service 的某個(gè)遠(yuǎn)程方法的時(shí)候,你只能在代碼中顯式指定使用 116.31.1.1 或者 116.31.1.2 其中的一個(gè)。這種情況下,你調(diào)用的時(shí)候無(wú)法預(yù)知所指定 IP 對(duì)應(yīng)的服務(wù)是否可用,并且當(dāng)該服務(wù)不可用時(shí),無(wú)法隱式自動(dòng)切換到調(diào)用另外一個(gè) IP 對(duì)應(yīng)的服務(wù)。也就是說(shuō),服務(wù)的狀態(tài)對(duì)你并不是透明的,并且無(wú)法做到服務(wù)的負(fù)載均衡和高可用。

此外,當(dāng)你調(diào)用遠(yuǎn)程方法時(shí),每次你都得新建一個(gè)連接,當(dāng)請(qǐng)求量很大時(shí),不斷的創(chuàng)建、刪除連接所耗費(fèi)的服務(wù)資源是巨大的。

網(wǎng)友評(píng)論