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

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

我們在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個步驟:

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

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

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

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

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

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

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

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

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

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

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

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

cluster_server.go

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

cluster_client.go

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

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


分享到:


相關文章: