DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox

简介: Citrix公司在这次Docker大会上给大家带来的是提供的容器集群的负载均衡解决方案 —— Nitrox。Nitrox通过使用该公司一款网络网络负载均衡设备NetScaler,提供动态的容器负载均衡和监控的功能。

说起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的部署模式如下图所示:
screenshot

  1. 通过硬件设备NetScaler MPX来解决网络进入容器集群的入口流量的负载均衡,就是图中所说的南北的流量(N-S traffic)。
  2. 通过软件设备NetScaler CPX来解决容器集群内,不通服务之间通信负载均衡的问题,就是图中所说的东西的流量(W-E traffic)。
  3. 通过与编排系统配合(Mesos/Kubernetes/Swarm)来解决自动化服务发现,动态变更负载均衡配置的问题,图右侧底层的支持平台。
  4. Citrix的软负载设备和硬负载设备是统一的api接口Nitro,保证了迁移的平滑和接口的一致性,对于Citrix已有的硬件负载设备用户来说,架构的迁移很简单。

接下来看看Citrix推出的整体的容器集群的服务发现解决方案Nitrox。Citrix开源了该解决方案,地址是Nitrox,该方案同时支持基于Mesos/Kubernetes/Swarm等多个编排系统的服务发现。其基本原理,如下图所示:
Nitrox

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中应该能看到该方面的迹象,其他公司在解决服务发现方面的提供的产品会是一个很重要的补充。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Java 开发工具 对象存储
Aliyun OSS Java SDK超时时间设置
Aliyun OSS Java SDK超时时间设置
17193 0
|
缓存 算法 Java
刷算法,你应该知道的队列经典应用
文章介绍了队列的基本特性和经典应用,包括如何用队列实现栈、使用优先级队列解决Top K问题,并通过LeetCode题目示例展示了队列在算法实现中的应用。
刷算法,你应该知道的队列经典应用
|
人工智能 自然语言处理 前端开发
三大行业案例:AI大模型+Agent实践全景
本文将从AI Agent和大模型的发展背景切入,结合51Talk、哈啰出行以及B站三个各具特色的行业案例,带你一窥事件驱动架构、RAG技术、人机协作流程,以及一整套行之有效的实操方法。具体包含内容有:51Talk如何让智能客服“主动进攻”,带来约课率、出席率双提升;哈啰出行如何由Copilot模式升级为Agent模式,并应用到客服、营销策略生成等多个业务场景;B站又是如何借力大模型与RAG方法,引爆了平台的高效内容检索和强互动用户体验。
3327 5
|
小程序 JavaScript Java
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
461 0
|
JSON 测试技术 API
使用Postman发送POST请求的指南
本文介绍了如何使用Postman发送POST请求进行接口测试。关键步骤包括:创建新请求,设置请求类型为POST,输入URL,添加请求头如`Content-Type: application/json`,在Body中选择raw输入JSON数据,然后发送请求并检查响应。示例展示了向用户注册接口发送数据的过程。掌握这些技能有助于高效测试API。
|
NoSQL Redis 数据安全/隐私保护
Docker进入redis容器连接redis-cli 报错:(error) NOAUTH Authentication required.
Docker进入redis容器连接redis-cli 报错:(error) NOAUTH Authentication required.
【算法系列篇】递归、搜索与回溯(一)
【算法系列篇】递归、搜索与回溯(一)
|
JSON API 数据格式
1688一件采购实现指南:含代码实现采购流程
1688是中国最大的B2B电子商务平台之一,提供了丰富的商品信息和采购服务。一键采购是1688平台的一项便捷功能,可以帮助用户快速完成采购流程,提高采购效率。本文将详细介绍如何使用1688一键采购功能,并通过代码示例演示如何实现一键采购的自动化操作。
阿里云商标智能注册申请通过率、成功率高吗?被驳回概率大吗?
阿里云商标智能注册申请通过率、成功率高吗?商标智能注册申请价格便宜,但并不是价格便宜通过率就低,主要取决于商标申请人,阿里云只是个商标注册平台。
872 0
阿里云商标智能注册申请通过率、成功率高吗?被驳回概率大吗?
|
芯片 内存技术
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
STM32bug【 KEILMDK中出现Error: Flash Download failed - “Cortex-M3“】
2327 0