溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Service之間如何通信

發布時間:2021-11-19 09:27:28 來源:億速云 閱讀:162 作者:柒染 欄目:云計算

Service之間如何通信,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

微服務架構的應用由若干 service 組成。比如有運行 httpd 的 web 前端,有提供緩存的 memcached,有存放數據的 mysql,每一層都是 swarm 的一個 service,每個 service 運行了若干容器。在這樣的架構中,service 之間是必然要通信的。

服務發現

一種實現方法是將所有 service 都 publish 出去,然后通過 routing mesh 訪問。但明顯的缺點是把 memcached 和 mysql 也暴露到外網,增加了安全隱患。

如果不 publish,那么 swarm 就要提供一種機制,能夠:

  1. 讓 service 通過簡單的方法訪問到其他 service。

  2. 當 service 副本的 IP 發生變化時,不會影響訪問該 service 的其他 service。

  3. 當 service 的副本數發生變化時,不會影響訪問該 service 的其他 service。

這其實就是服務發現(service discovery)。Docker Swarm 原生就提供了這項功能,通過服務發現,service 的使用者不需要知道 service 運行在哪里,IP 是多少,有多少個副本,就能與 service 通信。下面我們開始實踐。

創建 overlay 網絡

要使用服務發現,需要相互通信的 service 必須屬于同一個 overlay 網絡,所以我們先得創建一個新的 overlay 網絡。

docker network create --driver overlay myapp_net

直接使用 ingress 行不行?

很遺憾,目前 ingress 沒有提供服務發現,必須創建自己的 overlay 網絡。

部署 service 到 overlay

部署一個 web 服務,并將其掛載到新創建的 overlay 網絡。

docker service create --name my_web --replicas=3 --network myapp_net httpd


部署一個 util 服務用于測試,掛載到同一個 overlay 網絡。

docker service create --name util --network myapp_net busybox sleep 10000000

sleep 10000000 的作用是保持 busybox 容器處于運行的狀態,我們才能夠進入到容器中訪問 service my_web。

驗證

通過 docker service ps util 確認 util 所在的節點為 swarm-worker1。

登錄到 swarm-worker1,在容器 util.1 中 ping 服務 my_web。

可以看到 my_web 的 IP 為 10.0.0.2,這是哪個副本的 IP 呢?

其實哪個副本的 IP 都不是。10.0.0.2 是 my_web service 的 VIP(Virtual IP),swarm 會將對 VIP 的訪問負載均衡到每一個副本。

我們可以執行下面的命令查看每個副本的 IP。

docker exec util.1.bpon0vvbgve6lz3fp08sgana6 nslookup tasks.my_web

10.0.0.3、10.0.0.4、10.0.0.5 才是各個副本自己的 IP。不過對于服務的使用者(這里是 util.1),根本不需要知道 my_web副本的 IP,也不需要知道 my_web 的 VIP,只需直接用 service 的名字 my_web 就能訪問服務。

看完上述內容,你們掌握Service之間如何通信的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女