溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Service之間如何通信

發(fā)布時(shí)間:2021-11-19 09:27:28 來(lái)源:億速云 閱讀:120 作者:柒染 欄目:云計(jì)算

Service之間如何通信,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

微服務(wù)架構(gòu)的應(yīng)用由若干 service 組成。比如有運(yùn)行 httpd 的 web 前端,有提供緩存的 memcached,有存放數(shù)據(jù)的 mysql,每一層都是 swarm 的一個(gè) service,每個(gè) service 運(yùn)行了若干容器。在這樣的架構(gòu)中,service 之間是必然要通信的。

服務(wù)發(fā)現(xiàn)

一種實(shí)現(xiàn)方法是將所有 service 都 publish 出去,然后通過(guò) routing mesh 訪問(wèn)。但明顯的缺點(diǎn)是把 memcached 和 mysql 也暴露到外網(wǎng),增加了安全隱患。

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

  1. 讓 service 通過(guò)簡(jiǎn)單的方法訪問(wèn)到其他 service。

  2. 當(dāng) service 副本的 IP 發(fā)生變化時(shí),不會(huì)影響訪問(wèn)該 service 的其他 service。

  3. 當(dāng) service 的副本數(shù)發(fā)生變化時(shí),不會(huì)影響訪問(wèn)該 service 的其他 service。

這其實(shí)就是服務(wù)發(fā)現(xiàn)(service discovery)。Docker Swarm 原生就提供了這項(xiàng)功能,通過(guò)服務(wù)發(fā)現(xiàn),service 的使用者不需要知道 service 運(yùn)行在哪里,IP 是多少,有多少個(gè)副本,就能與 service 通信。下面我們開(kāi)始實(shí)踐。

創(chuàng)建 overlay 網(wǎng)絡(luò)

要使用服務(wù)發(fā)現(xiàn),需要相互通信的 service 必須屬于同一個(gè) overlay 網(wǎng)絡(luò),所以我們先得創(chuàng)建一個(gè)新的 overlay 網(wǎng)絡(luò)。

docker network create --driver overlay myapp_net

直接使用 ingress 行不行?

很遺憾,目前 ingress 沒(méi)有提供服務(wù)發(fā)現(xiàn),必須創(chuàng)建自己的 overlay 網(wǎng)絡(luò)。

部署 service 到 overlay

部署一個(gè) web 服務(wù),并將其掛載到新創(chuàng)建的 overlay 網(wǎng)絡(luò)。

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


部署一個(gè) util 服務(wù)用于測(cè)試,掛載到同一個(gè) overlay 網(wǎng)絡(luò)。

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

sleep 10000000 的作用是保持 busybox 容器處于運(yùn)行的狀態(tài),我們才能夠進(jìn)入到容器中訪問(wèn) service my_web

驗(yàn)證

通過(guò) docker service ps util 確認(rèn) util 所在的節(jié)點(diǎn)為 swarm-worker1。

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

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

其實(shí)哪個(gè)副本的 IP 都不是。10.0.0.2 是 my_web service 的 VIP(Virtual IP),swarm 會(huì)將對(duì) VIP 的訪問(wèn)負(fù)載均衡到每一個(gè)副本。

我們可以執(zhí)行下面的命令查看每個(gè)副本的 IP。

docker exec util.1.bpon0vvbgve6lz3fp08sgana6 nslookup tasks.my_web

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

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

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI