DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox
說(shuō)起Citrix公司的NetScaler這款硬件負(fù)載均衡器大家可能不熟悉,它的競(jìng)爭(zhēng)對(duì)手F5,在運(yùn)維界可能比較多人了解。硬件負(fù)載均衡器通常作為網(wǎng)絡(luò)入口流量分流的設(shè)備,例如像淘寶網(wǎng)的流量特別大,可能只有幾個(gè)入口IP,在淘寶網(wǎng)的流量的最前端就會(huì)部署像F5或者NetScaler這樣的硬件負(fù)載均衡器作為分流。
隨著云計(jì)算越來(lái)越深入人心,像Citrix這種硬件設(shè)備商越來(lái)越賣(mài)不動(dòng)了,因?yàn)榻^大部分中小企業(yè)都直接跟云計(jì)算公司采購(gòu)所需的虛擬設(shè)備,這樣的設(shè)備可定制,可按需動(dòng)態(tài)分配。Citrix也是積極跟云計(jì)算公司,例如AWS合作,推廣自己的虛擬版本的NetScaler。
容器化大潮和微服務(wù)概念的推廣下,系統(tǒng)被拆分成了一個(gè)個(gè)只有單一職責(zé)的微服務(wù),服務(wù)的擴(kuò)容通過(guò)增加容器的數(shù)量來(lái)解決,服務(wù)之間的調(diào)用關(guān)系越來(lái)越復(fù)雜,像一張密密麻麻的網(wǎng)。當(dāng)一個(gè)服務(wù)啟動(dòng),擴(kuò)容或者縮容之后,需要迅速被依賴(lài)它的服務(wù)感知到,即發(fā)現(xiàn),所以發(fā)現(xiàn)的過(guò)程必須是自動(dòng)的,且現(xiàn)有大部分的C/S模式的代碼都沒(méi)有提供client服務(wù)發(fā)現(xiàn)的能力,因此服務(wù)發(fā)現(xiàn)最好是對(duì)client來(lái)說(shuō)是透明的。通過(guò)負(fù)載均衡器配合server端實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)管理的功能正是基于容器的微服務(wù)架構(gòu)特別需要的方案。由上述可見(jiàn),通過(guò)負(fù)載均衡器的方式來(lái)解決服務(wù)發(fā)現(xiàn)的問(wèn)題是微服務(wù)架構(gòu)中一個(gè)特別重要的問(wèn)題,而且該問(wèn)題目前沒(méi)有特別好的解決方案。Citrix推出的Nitrox正是試圖解決這個(gè)問(wèn)題。總結(jié)下Citrix推出Nitrox的原因:
- 通過(guò)提供NetScaler CPX負(fù)載均衡軟件進(jìn)軍容器市場(chǎng)
- 解決容器架構(gòu)中容器與容器之間服務(wù)發(fā)現(xiàn)的問(wèn)題
- Nitrox中使用的NetScaler CPX與硬件負(fù)載均衡設(shè)備的API接口保持一致,方便其現(xiàn)有用戶從其他架構(gòu)遷移到容器架構(gòu)
我們先來(lái)看看Nitrox的重要部分,即NetScaler CPX負(fù)載均衡軟件,該軟件是一款收費(fèi)的軟件。
NetScaler的部署模式如下圖所示:
接下來(lái)看看Citrix推出的整體的容器集群的服務(wù)發(fā)現(xiàn)解決方案Nitrox。Citrix開(kāi)源了該解決方案,地址是Nitrox,該方案同時(shí)支持基于Mesos/Kubernetes/Swarm等多個(gè)編排系統(tǒng)的服務(wù)發(fā)現(xiàn)。其基本原理,如下圖所示:
Nitrox作為一個(gè)容器,跑在容器集群內(nèi),同時(shí)有偵聽(tīng)編排系統(tǒng)(Mesos/Kubernetes/Swarm)事件,以及讀取編排系統(tǒng)信息的能力,當(dāng)各主機(jī)上的容器狀態(tài)發(fā)生變化時(shí),變化上報(bào)到編排系統(tǒng)(Mesos/Kubernetes/Swarm),編排系統(tǒng)再把事件通知到各個(gè)偵聽(tīng)的客戶端。Nitrox作為客戶端接收到事件后,重新獲取當(dāng)前容器集群中各個(gè)容器的狀態(tài)。根據(jù)最新的集群狀態(tài)來(lái)更新各個(gè)容器的路由。除了初始化基本的配置,上面說(shuō)的負(fù)載均衡動(dòng)態(tài)配置,都是通過(guò)腳本自動(dòng)完成的,最終做到了服務(wù)的自動(dòng)發(fā)現(xiàn)。
現(xiàn)在我們來(lái)總結(jié)下Docker容器架構(gòu)通過(guò)動(dòng)態(tài)負(fù)載均衡來(lái)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的方法
-
在容器里面實(shí)現(xiàn)負(fù)載均衡通常采用以下思路
-
負(fù)載均衡設(shè)備
- 4層包括IPVS,各大云計(jì)算廠商的負(fù)載均衡設(shè)備,例如aliyun的SLB, AWS的ELB等,以及本文中提到的F5,NetScaler
- 既包含4層又包含7層的負(fù)載均衡軟件,目前最流行的包括Haproxy,Nginx(以及衍生出來(lái)的國(guó)內(nèi)的Tengine)
- 通過(guò)DNS來(lái)做負(fù)載均衡,問(wèn)題比較多,例如DNS有本地緩存,容易導(dǎo)致數(shù)據(jù)不一致,且對(duì)某些client端有要求,某些client端不會(huì)每次請(qǐng)求都去DNS拿最新的路由信息,因此一般很少將DNS作為負(fù)載均衡的方案。
-
- 獲取負(fù)載均衡信息的API(從swarm,kubernetes,mesos獲取)或者注冊(cè)中心獲取,即registry,包括 Zookeeper,etcd,Consul等
- 通過(guò)腳本監(jiān)聽(tīng)registry或者編排系統(tǒng)的事件,某些事件如果導(dǎo)致負(fù)載均衡發(fā)生變化,便將最新的負(fù)載均衡信息更新到負(fù)載均衡設(shè)備中
最后,從幾個(gè)角度來(lái)對(duì)比類(lèi)似負(fù)載均衡實(shí)現(xiàn)的差異。
| 負(fù)載均衡能力 | 4層 | 主要是7層,兼具4層 | 4層,實(shí)現(xiàn)是IPVS |
| 支持方式 | 每個(gè)節(jié)點(diǎn)需要安裝兩個(gè)容器 | 每個(gè)節(jié)點(diǎn)一個(gè)Dockercloud/haproxy容器 | 不需要額外的容器 |
| 負(fù)載均衡技術(shù)實(shí)現(xiàn) | 未知 | 用戶態(tài) | 內(nèi)核態(tài) |
| 支持動(dòng)態(tài)負(fù)載能力 | 是 | 是 | 是 |
| 實(shí)現(xiàn)地址 | Nitrox,NetScaler為收費(fèi)軟件 | Dockercloud-haproxy | Docker 1.12 內(nèi)置 |
預(yù)測(cè)最終Docker官方會(huì)逐步推出自己的服務(wù)發(fā)現(xiàn)完整方案,我們?cè)贒ocker 1.12中應(yīng)該能看到該方面的跡象,其他公司在解決服務(wù)發(fā)現(xiàn)方面的提供的產(chǎn)品會(huì)是一個(gè)很重要的補(bǔ)充。
總結(jié)
以上是生活随笔為你收集整理的DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HoloLens开发手记 - Unity
- 下一篇: [改善Java代码]不使用stop方法停