我們在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
閱讀更多 睿雲智合Wise2C 的文章