技術漫談|controller側與agent側分布式通迅實現

技術漫談|controller側與agent側分佈式通迅實現

本文代碼相關技術如下:

技術漫談|controller側與agent側分佈式通迅實現

k8s集群與集群之間通訊, 我們都可以使用相同的中間件rabbitmq。

本文使用最簡單的模式 LB,單實例的RPC調用。

技術漫談|controller側與agent側分佈式通迅實現

2.1 rabbitmq lb模式調用

技術漫談|controller側與agent側分佈式通迅實現

  • agent1、 agent2、 agent3 同時上報自己在線時, rabbitmq自動調用 controller1 或 controller2 中其中一個實例,再由controller X 寫入redis中去。當controller1、controller2需要所有agent狀態時, 讀取數據都是redis,所以都是一致的。

  • agent1、 agent2 、agent3 獲取配置信息時, rabbitmq也自動調用controller1或 controller2 其中一個實例。再由controller X 讀取redis或者mysql數據,再返回給agent。不論是調用到controller1還是controller2,返回的數據都是一致。

2.2 rabbitmq 單實例模式調用

技術漫談|controller側與agent側分佈式通迅實現

controller 實例下發配置信息時:

  • setp1. 獲得當前在線的agent。

  • setp2. 單實例模式rpc調用。向所有的agent發送配置信息。

  • setp3. 可以明確瞭解有沒有agent時下發配置失敗的。如果都失敗,則本次調用失敗.。只要有一個失敗,就可以認為需要重發一次命令。

技術漫談|controller側與agent側分佈式通迅實現

3.1. rabbitmq rpc 調用 客戶端實現

技術漫談|controller側與agent側分佈式通迅實現

3.2. rabbitmq rpc 調用 服務端實現

技術漫談|controller側與agent側分佈式通迅實現

3.3. rabbitmq 單實例rpc調用 客戶端實現

技術漫談|controller側與agent側分佈式通迅實現

3.4. rabbitmq 單實例rpc調用.服務端實現

技術漫談|controller側與agent側分佈式通迅實現

技術漫談|controller側與agent側分佈式通迅實現

  • 通過 rabbitmq lb調用方式,可以實現從agent側上報數據到controller側或者agent側拉取需要的數據。

  • 通過rabbitmq 單實例調用方式,由於有了之前lb上報agent狀態,或者使用第三方 consul,etcd中服務發現功能。我們可以實現從controller側下發配置到每一個agent,在每個agent實例中完成相同的功能。


分享到:


相關文章: