zoukankan      html  css  js  c++  java
  • 海量并发也没那么可怕,运维准点下班全靠它!

    摘要:现在大部分互联网平台都使用容器了,为什么扩容速度有些时候还是跟不上流量增长的节奏呢?

    大家应该都看过某些明星导致社交媒体平台宕机的新闻吧?明星事件带来的突发流量触发业务扩容,以前是扩容虚机,速度慢还情有可原,现在大部分互联网平台都使用容器了,为什么扩容速度有些时候还是跟不上流量增长的节奏呢?

    这里主要有两个问题。

    01

    一是网口发放速度匹配容器扩容速度的问题。如果是即时按需创建容器,比如10秒内启动5000个容器实例,这要求10秒内完成端到端的网口创建、挂接和网络打通。

    处理流程上,容器网络控制器需要调用VPC网络API批量创建5000个网口,VPC控制面生成相应的配置,下发到各个主机节点,主机按配置创建好全部网口再挂接到节点上,进而挂接到容器上,与此同时,分布在各个主机和各类网关的数据面转发表也要同步完成刷新。

    传统的I层网络架构,无论是管控面还是数据面都存在瓶颈点,全流程网络打通的速度,无法匹配容器扩容速度。

    02

    再一个就是网口规模的问题。由于ENI原本是针对I层虚机或裸机的网卡扩展机制,数量受节点规格的限制,有的厂商是按照主机的flavor限定ENI的规格数量,某些厂商提供了固定的最大数量,比如8个,这些规格约束有商业成本的考虑,但根本原因还是规模目标不同。

    容器为了榨干节点资源,支持0.1核甚至更小的容器,单节点理论上可部署近千容器实例,也就需要近千网口,这与现有VPC网络的管控面和数据面规模有数量级差距。

    网络资源预热,让秒级扩容成为可能

    如何应对发放速度不匹配问题?

    计算机系统结构的经典答案:

    加“Cache”层, 就是按预定策略在节点建立预分配ENI的warm pool,集群纳管节点时,自动创建并配置好若干个ENI放入pool中,在批量启动容器的时候只需要把已经ready的ENI从warm pool中取出挂接到容器即可。

    网络资源预热能够有效弥补VPC 网络资源分配性能不能匹配容器生命周期的现状。加‘Cache’的机制能够支撑容器大批量创建删除场景。

    Warm pool机制主要解决端到端网络打通时间长的问题。目前VPC网络单节点网卡是串行处理的,而且单个网络设备绑定时间也达到了30s-60s,不做预热的情况下容器网络端到端打通时间在一分钟以上。分钟级容器启动时间是不可接受的。

    Warm pool机制在裸金属节点上预挂载一定数量ENI(用户可根据服务部署并发量自定义配置),容器随时调度到预热节点上都有即时可用的ENI网卡。经过warm pool的优化,容器网络端到端打通时间缩短为1s-2s。

    华为云容器网络Yangtse的warm pool其实早在裸金属容器之前就已经在云容器实例CCI中得到了实践,是CCI能以30秒扩容1000容器的绝对优势领先业界的技术手段之一。

    突破ENI数量限制,支持大规模容器扩容

    上文中讲到了,单服务器ENI的规格上限,限制了容器的高密度部署和大规模快速扩容,在第二代裸金属容器中,我们把容器网络组件全部卸载到了华为云擎天卡上,突破了传统架构的约束,最大ENI数量提升数十倍,单服务器可部署的容器数量也相应提升。

    同时,得益于擎天架构资源共池优势,裸金属容器还可以向虚拟机容器扩容,而在虚拟机容器上,容器网络Yangtse使用了Trunkport技术,结合ENI的优势,在保障性能的前提下,单台服务器理论上可为千容器同时提供直通网络能力。

    ELB直通容器,应对海量冲击更平稳

    解决了速度和规模的问题后,其实还存在一个隐藏的杀手,处理不好,可能使我们新扩容出来的容器全部命丧于此。

    在传统的容器网络对接外部ELB方案中,外部流量会从ELB先到Kubernetes的Node Port(工作节点所在主机的端口),然后再转发给后端容器,增加的这一跳不仅带来了时延和故障几率,也影响了ELB使用时的灵活性。

    当应用业务流量增长触发扩容时,如果ELB直接全量发放分摊的流量请求,海量请求会迅速压垮(overload)新扩的容器,造成扩容失败。

    发生这种情况跟业务的处理逻辑或运行时行为相关:新扩容的后端实例需要一边处理请求一边加载热点数据到本地Cache,或者需要根据接收到的请求即时编译(JIT)和加载相应的代码模块,这都需要“慢启动”(slow-start)过程,即根据业务模型,自定义初始流量比例和阶梯递增速率,比如:15%的初始流量,每5秒增加10%。

    但是,当ELB挂接宿主服务器(节点)的网络端口(Node Port)时,特别是一个节点上部署多个容器时,由于存在节点二次分发,ELB无法感知到最终的后端容器,进而无法做到容器级别的流控,也难以保证稳态后的负载均衡。

    容器网络Yangtse实现了与华为云ELB v3独享型负载均衡实例的直通,独享型ELB v3资源独立,实例的性能不受其它实例的影响,而且流量从ELB直通至后端容器,保证转发性能和稳定性。

    关于裸金属容器网络的揭秘,就到这里了。后续我们将围绕华为云云原生技术平台Vessel,逐一为您解读华为云容器的黑科技。

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    使用java的wsimport.exe生成wsdl的客户端代码【转】
    css 动画【转】
    如何让javascript base64加密后不含+/=
    UEditor js动态创建和textarea中渲染【原】
    在js或jquery中动态添加js脚本【转】
    利用spring的MultipartFile实现文件上传【原】
    hibernate状态转换关系图【原】
    ssh框架里拦截器的权限验证基本思路【转】
    JAVA中三种URL连接方法
    程序出错问题总结
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/13530146.html
Copyright © 2011-2022 走看看