高可用thrift客戶池的實現詳解

2022-07-13 05:27:12 字數 1024 閱讀 5316

最近,公司要求將組內的thrift客戶端元件推廣至公司內使用。基本的要求如下:

1.高可用

2.整合名稱服務,也就配置檔案支援服務發現

3.解耦,客戶端和高可用元件解耦,簡單來說就是,如果以後要切換其他的高可用元件,改動要盡可能的小;同理,如果要基於目前的高可用部分實現其他的客戶端例如mysql,redis也要求能夠輕鬆支援。

以上為公司要求,但是在實際業務使用中,我們發現以下幾點也很重要:

1.支援對thrift業務層面的ping校驗

2.客戶端隔離策略

3.能夠友好的支援任何thrift協議

針對上述要求,我們來一步一步推理,實現乙個易用高可用thrift池化客戶端。

首先,我們把專案分解成三塊:

1.cluster:高可用的邏輯層

2.client:客戶端的實現層

3.registry:服務註冊發現層

乙個高可用元件應該包含一下功能:

1.容災策略

2.多種負載均衡策略

3.服務自動熔斷

所以基本的框架如下:

─com                └─zhizus

└─forest

├─cluster

│ ├─ha

│ └─loadbalance

├─registry

│ ├─confcenter

│ └─s2s

└─utils

由於,我們是需要將高可用部分如client層解耦,所以,我們來建立乙個client的描述類,loadbalance引用的並不是真正的client,而是client的描述類,而這個描述類針對所有的客戶端都是大同小異的。

如是便有了這樣乙個serverinfo物件:

public final class serverinfo

高可用性Cache池

前段時間開發上線了乙個cache池,使用雙層cache池冗餘,宕掉一台機器的cache失效從1 n降到1 n 2。如果2層cache池分開機器部署,失效率將會降到0。上線不久剛好碰上一次宕機事故,效果很好。該應用有16臺cache伺服器,高峰時每秒訪問約20萬次,平時的命中率約為99.95 宕掉一台...

nginx Nginx的高可用實現

1.兩台伺服器 2,都安裝上nginx 3,以及keeplived yum install keepalived y安裝之後在etc keepalived 有檔案keepalived.conf if ps c nginx no header wc 1 eq 0 then killall keepal...

Keepalived Nginx實現高可用(HA)

keepalived的ha分為搶占模式和非搶占模式,搶占模式即master從故障中恢復後,會將vip從backup節點中搶占過來。非搶占模式即master恢復後不搶占backup公升級為master後的vip。下面分別介紹centos7下搶占模式和非搶占模式的配置方式 vipip 主機名nginx埠...