新闻资讯
大家都应该看过一些明星导致社交媒体平台瘫痪的新闻吧?明星事件带来的突发性流量引发业务扩张,以前只是扩容虚机,速度慢还情有可原,现在大部分互联网平台都用过容器,为什么扩容速度有些时候还是跟不上流量增长的节奏?
这里主要是两个问题。
① 一是网口发放速度匹配容器扩容速度的问题。若能立即按需创建容器,例如在10秒内启动5000个容器实例,则需要在10秒内完成端到端的网口创建、挂接和网络打通。
在处理过程中,容器网络控制器需要调用 VPC网络 API批量创建5000个网口, VPC控制面产生相应的配置,下达给各主机节点,主机按配置创建所有网口再挂接节点,从而挂接到容器上,同时,分布在各个主机和各类网关的数据面转发表也要同步完成刷新。
在传统的I层网络架构中,无论控制面或数据面都存在瓶颈点,全流程网络打通速度不能与容器扩展速度相匹配。
② 另外还有网口规模的问题,由于 ENI最初是针对 I层虚机或裸机的网卡扩展机制,所以数量受到节点规格的限制,有的厂商根据主机的 flavor限定 ENI的规格,有些厂商提供了固定的最大数量,比如8个,这些规格约束有商业成本的考虑,但根本原因还是规模目标不同。
容器为了榨干节点资源,支持0.1核甚至更小的容器,单个节点理论上可以部署近千个容器实例,也就是需要近千个网口,这与现有 VPC网络的控制面和数据面规模存在数量级差距。
网络资源预热使秒级扩展成为可能
怎样处理发放速度不匹配的问题?
计算机系统结构的经典答案:
添加“Cache”层,即按照预先确定的策略在节点上建立预分配 ENI的 warm pool,集群纳管节点时,自动创建并配置若干 ENI,然后将其放置到pool中,这样,在批量启动一个容器时,只需要将已经 ready的 ENI从 warm pool中取出挂接到容器。
通过网络资源预热,有效地弥补了 VPC网络资源分配性能不匹配容器生命周期的现状。添加“Cache”的机制可以支持容器大量创建删除场景。
Warmpool机制主要解决端到端网络连接时间长的问题。现在 VPC网络中的单节点网卡都是串行处理,并且单个网络设备的绑定时间也达到30秒-60s,不做预热的情况下,容器网络端到端打通时间在一分钟以上。分钟级别的容器启动时间是无法被接受的。
Warm pool机制在裸金属节点上预装载一定数量的 ENI (用户可以根据服务部署并发量自定义配置),同时容器随时调度到预热节点上都有的即时可用的 ENI网卡。对 warm pool进行了优化后,容器网络的端到端打通时间减少到1s-2s。
华为云容器网络 Yangtse公司的 warmpool实际上很久以前就在云容器实例 CCI上实践过,它是 CCI能以30秒的时间扩容1000容器的绝对优势来领先业界的技术手段之一。
破除ENI数量限制,支持大规模容器扩容
前面已经介绍过,单一服务器 ENI的规格上限,这限制了容器的高密度部署和大规模快速扩展,在第二代裸金属容器中,我们将所有容器网络组件卸载到华为云擎天卡上,突破了传统架构的约束,最大 ENI数量提升数十倍,单服务器可部署容器数量也相应提升。
与此同时,由于擎天体系结构的资源共池优势,裸金属容器也可以向虚拟机容器扩容,而在虚拟容器上,容器网络 Yangtse利用了 Trunkport技术,结合 ENI的优点,在保证性能的前提下,单台服务器理论上可为千容器同时提供直通网络能力。
ELB直通容器,处理海量冲击更平稳
在解决了速度和规模的问题之后,其实还有一个隐藏杀手,处理不当,可能会使我们新扩容的容器全部“丧命”。
在传统的容器网络对外部 ELB的对接中,外部流量由 ELB先到 Kubernetes的 Node Port (工作节点所在的主机端口),然后再转发到后端容器,这一增加的跳转不仅会带来时延和故障的几率,还会影响 ELB的使用灵活性。
在应用业务流量增长触发扩容时,如果 ELB直接全量分配分摊的流量请求,海量数据请求将很快压垮新扩的(overload)容器,导致扩容失败。
出现这种情况与业务的处理逻辑或运行时行为有关:新扩展的后端实例需要在处理请求的同时装载热点数据到本地 Cache,或者根据收到的请求立即编译(JIT)并加载相应的代码模块,所有这些都需要“慢启动”的过程,也就是根据业务模型定制初始流量比例和阶梯递增率,例如:初始流量的15%,每5秒增加10%。
然而,当 ELB挂接宿主服务器(节点)的网络端口(Node Port)时,尤其是在一个节点上部署多个容器, ELB不能感知到最终的后端容器,这是由于节点的二次分配,从而不能做到容器级别的流控,也难以保证稳态后的负载均衡。
容器网络 Yangtse实现了与华为云 ELBv3独享型负载均衡实例的直通,独享 ELBv3资源独立,实例的性能不受其他实例的影响,且流量由 ELB直接传输到后端容器,保证了转发性能和稳定性。