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