技術漫談|集羣中容器間的通迅

我們在k8s中啟動3個restful api service實例。當對外提供的服務的時候,這個api service 可能出現實例的內存數據不一致的情況。

原本consul作為服務發現是最佳的。為了進一步減少組件,我們使用redis來完成服務發現的功能。

APService 3個實例如下

Instance1 192.168.0.101

Instance2 192.168.0.102

Instance3 192.168.0.103

1.instance 啟動之後,每秒發送一次心跳數據包。如果3秒之類沒有發起,redis自動過期。

我們可以認為instance下線了。

2.獲得在線的服務器列表

Response:

Instance1

Instance2

Instance3

3.獲得真實的

Response:

192.168.0.101

192.168.0.102

192.168.0.103

當外部客戶端調用如果Instance 有寫入數據的操作,有以下的4個步驟:

獲得除了自己之外的在線服務器ip地址。

通過RPC調用直接修改其它服務器的內存數據 Instance1--rpc-->Instance2 修改其內存數據

Instance1--rpc-->Instance3 修改其內存數據。

RPC 調用都成功後,再將數據寫入mysql數據庫中,否則對外報告失敗了。

僅由當前的Instance1下發配置信息到agent。

容器之間的通迅可以使用golang 原生的rpc-json 來實現peer to peer調用

每個instance 都作為服務器,又都作為客戶端。

1.instance 啟動時,監聽著7771端口。

2.instance 在需要的同步數據的地方直接調用。

cluster_server.go

cluster_client.go