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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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中应该能看到该方面的迹象,其他公司在解决服务发现方面的提供的产品会是一个很重要的补充。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
数据安全/隐私保护 计算机视觉
2024年2月国内如何快速注册OnlyFans最新小白教学
onlyfans软件是一个创立于2016年的订阅式社交媒体平台,创作者可以在自己的账号发布原创的照片或视频,并需要注意的是,网络上可能存在非法或不道德的应用将其设置成付费模式,若用户想查看则需要每月交费订阅。程序,建议你在使用互联网时保持警惕,并遵循相关法律法规。(现在p站没了,大家晚上懂得都懂啊)
2024年2月国内如何快速注册OnlyFans最新小白教学
|
机器学习/深度学习 算法
大模型开发:什么是过拟合和欠拟合?你如何防止它们?
机器学习中,过拟合和欠拟合影响模型泛化能力。过拟合是模型对训练数据过度学习,测试集表现差,可通过正则化、降低模型复杂度或增加训练数据来缓解。欠拟合则是模型未能捕捉数据趋势,解决方案包括增加模型复杂度、添加特征或调整参数。平衡两者需通过实验、交叉验证和超参数调优。
1448 0
|
物联网 Linux 开发工具
[基础篇]ESP8266-SDK教程(一)之开发环境搭建
上篇文章我们了解了ESP8266到底是个什么“东西”,了解了ESP8266在这个万物互联时代有哪些优势,那我们不能光是了解,我们还需要去深入的学习一下,争做物联网时代的弄潮儿~继往开来第二篇,本篇文章主要介绍一下几种常见的ESP8266开发方式,感觉现在不管是学习硬件开发还是软件开发,第一节课都是先学习一下开发环境搭建,毕竟这个开发环境不单单是有台电脑就足够了,交叉编译工具链才是最重要的,我们需要将写的代码编译成可以在ESP8266上运行的代码,这一步就需要交叉编译工具。
5906 0
|
分布式数据库 Hbase
HBase 源码解析
HBase Read读流程源码解析&HBase Write写流程源码解析 &HBase Flush & Compact流程源码解析
4739 0
|
安全 Shell API
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
|
安全 Java 开发工具
Android签名详解(debug和release)
Android签名详解(debug和release) 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换 2) 保证信息传输的完整性 签名对于包中的每个文件进行处理,以此确保包中内容不被替换 3) 防止交易中的抵赖发生,Market对软件的要求 2.
1977 0
|
NoSQL 安全 Java
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
|
存储 网络协议 大数据
Apache ZooKeeper 初认识(附用户交流群)
为了让阿里云上的用户更好的使用 ZooKeeper,我们将会在近期推出 ZooKeeper 的托管服务,为您提供稳定、高可用、长期维护的 ZooKeeper 集群
2146 39
|
语音技术
Freeswitch VAD改造支持as
Freeswitch VAD改造支持as
|
测试技术 网络协议 Java
JMeter 压测 MQTT 消息
## 背景信息     MQTT 是专为移动互联网(Mobile Internet)、物联网(IoT)设计的超轻量级消息协议,连接移动端与云服务双向通信,广泛应用于各种应用领域,如端向云汇报状态、云向端推送消息、端向端发送消息(即时聊天)等场景。MQTT 服务性能指标包括支撑同时在线移动端设备数量、消息收发量级、消息延迟等。  &nbs
3727 0