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的部署模式如下图所示:
- 通过硬件设备NetScaler MPX来解决网络进入容器集群的入口流量的负载均衡,就是图中所说的南北的流量(N-S traffic)。
- 通过软件设备NetScaler CPX来解决容器集群内,不通服务之间通信负载均衡的问题,就是图中所说的东西的流量(W-E traffic)。
- 通过与编排系统配合(Mesos/Kubernetes/Swarm)来解决自动化服务发现,动态变更负载均衡配置的问题,图右侧底层的支持平台。
- Citrix的软负载设备和硬负载设备是统一的api接口Nitro,保证了迁移的平滑和接口的一致性,对于Citrix已有的硬件负载设备用户来说,架构的迁移很简单。
接下来看看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或者编排系统的事件,某些事件如果导致负载均衡发生变化,便将最新的负载均衡信息更新到负载均衡设备中
最后,从几个角度来对比类似负载均衡实现的差异。
对比 | Nitrox | Dockercloud/haproxy | Docker1.12内置负载均衡能力 |
---|---|---|---|
负载均衡能力 | 4层 | 主要是7层,兼具4层 | 4层,实现是IPVS |
支持方式 | 每个节点需要安装两个容器 | 每个节点一个Dockercloud/haproxy容器 | 不需要额外的容器 |
负载均衡技术实现 | 未知 | 用户态 | 内核态 |
支持动态负载能力 | 是 | 是 | 是 |
实现地址 | Nitrox,NetScaler为收费软件 | Dockercloud-haproxy | Docker 1.12 内置 |
预测最终Docker官方会逐步推出自己的服务发现完整方案,我们在Docker 1.12中应该能看到该方面的迹象,其他公司在解决服务发现方面的提供的产品会是一个很重要的补充。
DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox相关推荐
- Docker网络和服务发现
[编者的话] 本文是<Docker网络和服务发现>一书的全文,作者是Michael Hausenblas.本文介绍了Docker世界中的网络和服务发现的工作原理,并提供了一系列解决方案. ...
- 深入了解服务注册与服务发现
1. 什么是服务注册与发现 我们先来看下什么是服务注册与服务发现? 服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去(比如: zookeeper\consu ...
- 服务发现:Zookeeper vs etcd vs Consul
服务发现:Zookeeper vs etcd vs Consul 摘自:http://dockone.io/article/667 [编者的话]本文对比了Zookeeper.etcd和Consul三种 ...
- 为什么不用ZK来做服务发现?
为什么不用ZK来做服务发现? 本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云 ...
- 服务发现技术是如何演进出来的?
昨天写了一篇<微服务的时间和成本去哪儿了>,有人在底下留言: 我的回答是: "微服务可以不用服务发现和负载均衡吗?它是微服务一个核心组件.怎么能说没有关系?" 我觉得有 ...
- 为什么不应该使用ZooKeeper做服务发现
本文作者通过ZooKeeper与Eureka作为 Service发现服务(注:WebServices 体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验.本文虽 ...
- DockerCon 2016 西雅图即将到来,8大主题详尽解读
DockerCon 2016 距离全球Docker粉丝最受欢迎的DockerCon 2016,只有短短几天.大家一定想了解,本次大会有哪些新的技术会推出?哪些新的场景又使用上容器技术?各大厂商又是如何 ...
- 网易云轻舟微服务深度解读:基于开源,强于开源
近日,由杭州市政府.赛迪以及网易主办的"2018中国杭州云创大会"于杭州国际博览中心如期举办,大会以"开放·生态·赋能"为主题,汇聚行业领袖.技术大咖及产业链从 ...
- 日调度5万亿次,腾讯云微服务架构体系TSF深度解读
http://www.infoq.com/cn/news/2018/02/deep-interpretation-TSF-cloud-mi 写在前面 当前,传统企业的IT系统以单体架构为主,在面对互联 ...
最新文章
- puppet aix之自动化用户管理
- java csv格式文件写入_java csv文件写入
- ifconfig没有命令 kali_kali学习笔记之——端口扫描工具
- 【转】Linux开机启动管理---systemd使用
- SPOJ - NSUBSTR Substrings(后缀自动机)
- 罗盘时钟代码(转载)
- android 软键盘遮住按钮,Android应用中出现软键盘遮挡住按钮如何解决
- 快来一起玩转LiteOS组件:RHas
- Redis简介(1)
- 京东总部大厦已经完成5G信号覆盖 网速是4G的20倍!
- mysql接口教程_接口测试教程 - xmysql 介绍
- java中scanner类_Java里Scanner 类
- js mysql 住宿系统_微信小程序酒店管理信息系统研发(WebStorm,node.js,MySQL)
- Python编程--目标IP地址段主机指定端口状态扫描
- 海天讲座(一)最优传输理论
- 利用python编程实现音频剪辑
- win10系统添加打印机
- C#:什么是委托和事件及其相关(转)
- DNP3 模拟器使用教程
- spm12预处理步骤及知识点总结
热门文章
- malloc 初始化_你真的了解 NSObject 对象的初始化吗?
- 双线性内插怎么缩小_汗蒸桶怎么选择才是最好的
- 大文件分片上传前端框架_js实现大文件分片上传的方法
- C++:迭代器(STL迭代器)iterator详解
- 全球及中国汽车紧急呼叫终端行业运营模式及未来投资方向建议报告2022版
- 全球及中国高强度钢行业发展态势与市场规模分析报告2022版
- 全球及中国皮裤行业消费需求及未来产销前景预测报告2022-2027年
- shopee本土店怎么做,一些运营技巧分享
- 腾讯qq在线状态,开放平台
- 世界人民盼丰收-国际农民丰收节贸易会:世界农民节日