作者

刘如梦,腾竞体育研发工程师,擅长高并发、微服务治理、DevOps,主要负责电竞服务平台架构设计和基础设施建设。

詹雪娇,腾讯云弹性容器服务EKS产品经理,主要负责 EKS 虚拟节点、容器实例相关的产品策划。

业务介绍

自 2019 年,腾竞整个电竞赛事数据服务完全由腾讯云 TKE 容器服务承载。腾竞赛事数据开放平台目前主要提供职业赛事数据的授权与查询,随着斗鱼、虎牙、企鹅、掌盟、微信直播、微博等平台的相继接入,平台整体流量有了爆发式的增长。

此前 2021英雄联盟全球总决赛(以下简称 S11) 期间更是创下了平台流量新高,达到了百万级 QPS、百亿级调用量。面对电竞赛事此类周期性强、并发高的业务场景,有效快速的自动扩缩容、提升资源利用率,是满足业务高速发展、合理控制成本的关键所在。

这里将介绍 LOL S11 赛事期间,腾竞赛事数据开放平台如何通过 虚拟节点弹性调度+VPC-CNI 架构,轻松应对爆发的百万流量。

业务特性

电竞赛事具备明显的业务特性,其对服务的自动伸缩能力有非常高的要求。

  • 周期性

电竞赛事具有明显的周期性,比赛时段是流量高峰期,其余时间流量骤减,流量相差数百倍,需要通过弹性扩缩能力,减少波谷时的冗余资源,降低成本。

  • 高并发

比赛期间,服务需要承载百万级 QPS,需要快速的扩容时间、及库存充足的资源池。

  • 突增快

比赛开始时,玩家开始大量涌入直播间,需要保证服务稳定性,避免突增流量过大引发集群雪崩。

架构介绍

整体架构

集群采用 Istio 作为服务网格框架进行微服务治理,流量经由多条 CLB(解决单条 CLB 带宽上限)进入 Istio Ingress(直连Pod)后进行流量分发,依托于 Istio 的 Sidecar 模式,能够对各服务之间进行非常精细化的流量管理,例如:灰度、限流、熔断等等。

普通节点+虚拟节点

开启 VPC-CNI 采用直连 Pod 模式后,集群不再受 NodePort 网络转发能力的限制,少量常规节点应对业务日常低负载场景,利用虚拟节点弹性扩缩容能力应对赛事期间业务超高负载场景。

DevOps

基于 Docker 的 CI/CD 服务,支持多环境(云端、本地)、多集群编排服务,满足业务的不同部署需求。

弹性扩容方案演变

基于上述的业务特性,针对弹性扩容的方案,经历了【手动扩容=>节点池=>虚拟节点】的一系列演变历程,目前的弹性扩容方案可以完美满足业务需求。

业务初期:手动扩容

业务初期,负载较低,根据业务特征,手动扩缩容基本可以满足需求。

由于手动扩缩容需要一定的时间窗口,因此需要放置一定数量的冗余资源应对突增流量,资源利用率较低,只有6%左右。

业务发展中:节点池

随着业务发展,周期性的高低峰流量特征愈发明显,面对高频的扩缩容需求时,手动扩缩容不仅人力成本较高,而且无法避免人为失误。

在突增流量速度较慢的场景下,节点池可以较好满足业务需求,不过需配置服务器,扩容速度较慢,冗余资源仍存在,资源利用率较低。另外,缩容时对节点进行封锁、驱逐等操作,不利于服务的稳定性。

业务高速发展:虚拟节点,秒级扩容,节省30%成本

业务高速发展阶段,高低峰流量相差悬殊、并发逐渐增高、突增流量时间达到秒级,节点池的扩容速度不足以满足业务需求,还有购置服务器时库存不足的风险。

虚拟节点是 TKE 提供的一种弹性调度能力,提供了近乎无限资源的扩容能力,可以直接将 Pod 调度至弹性容器服务 EKS 维护的云上资源中,无需扩容节点。相比节点池,虚拟节点的扩容、缩容流程简化了购买、初始化、退还服务器的流程,大大提升了弹性的速度,尽可能降低在扩容流程中可能出现的失败,使得弹性更快、更高效、更节省成本。

在弹性效率层面,虚拟节点可在数十秒内启动数以百计的 Pod,能够很好的应对 S11 这类高爆发业务场景。在成本层面,避免了普通节点由于无法完美分配 Pod 申请的资源而产生的 buffer 资源,节省了资源成本。

在此基础上,我们结合业务侧数据,采取自动化资源预热的方式应对高频的突增流量场景;运营类业务场景则需要和运营部门紧密结合做好手动扩容的准备。

网络转发方案优化

存在的问题

集群提供公网访问入口时,默认情况下外部流量经由集群节点 NodePort 转发至集群内部,当虚拟节点中部署的 Pod 数量较少,集群整体负载较低时,该模式不会有网络转发性能瓶颈。不过随着部署在虚拟节点中的Pod数量增大,集群整体负载升高,就需要添加更多的节点用于网络转发,这与自动伸缩、快速扩容、降低成本的目标背道而 驰。

优化方案

开启 VPC-CNI 后采用直连 Pod 模式,容器与节点分布在同一网络平面,每个 Pod 分配有固定 IP,网络直接由 CLB 转入 Istio Ingress,不再经由 NodePort 转发,提高了网络转发效率,集群也不在需要网络转发节点,大大提高了集群的扩容能力。该模式下,集群扩容上限受到集群所分配网段可用 IP 数的限制,因此需要提前做好规划,避免集群扩容受限。

最终效果

通过虚拟节点和 VPC-CNI 模式下直连 Pod 的结合,目前集群整体承载能力有了很大的提升,在成本控制方面也有了长足的进步。

秒级扩缩容

通过虚拟节点+K8s HPA 能力,集群可在数十秒内启动数以百计的承载百万级流量的Pod,可以轻松应对快速扩缩容需求。再结合业务侧数据,自动化进行资源预热,提升集群抗突增流量能力。缩容时也不再需要对节点进行封锁、驱逐等操作,提高了服务的稳定性。

百万承载

VPC-CNI 直连 Pod 解决了 NodePort 流量转发瓶颈的问题,加上虚拟节点近乎无限资源的扩容能力大大提高了集群水平扩容的上限,像腾竞赛事数据开放平台这样大量读的场景能轻松扩容至百万乃至千万级 QPS

降低成本

虚拟节点的高效扩缩容,配合 K8s 的 HPA 自动伸缩机制,减少了资源的准备和闲置时间,避免普通节点中的碎片化资源问题,有效的提高了资源利用率,最终为业务节省了30%的成本

参考文档

容器服务 TKE:

https://cloud.tencent.com/document/product/457/6759

虚拟节点概述:

https://cloud.tencent.com/document/product/457/53027

弹性集群:

https://cloud.tencent.com/document/product/457/39804

VPC-CNI 模式介绍:

https://cloud.tencent.com/document/product/457/50355

关于我们

更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~

福利:

①公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~

②公众号后台回复【系列】,可获得《15个系列100+篇超实用云原生原创干货合集》,包含Kubernetes 降本增效、K8s 性能优化实践、最佳实践等系列。

③公众号后台回复【白皮书】,可获得《腾讯云容器安全白皮书》&《降本之源-云原生成本管理白皮书v1.0》

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

虚拟节点轻松应对 LOL S11 百万并发流量——腾竞体育的弹性容器实践的更多相关文章

  1. ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力

    在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不 ...

  2. 轻松应对并发问题,Newbe.Claptrap 框架中 State 和 Event 应该如何理解?

    Newbe.Claptrap 框架中 State 和 Event 应该如何理解?最近整理了一下项目的术语表.今天就谈谈什么是 Event 和 State. Newbe.Claptrap 是一个用于轻松 ...

  3. 轻松应对并发,Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单

    接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开 ...

  4. 轻松应对C10k问题

    http://blog.csdn.net/u011011917/article/details/17203539 传统的.教科书里的I/O复用等待函数select/poll在处理数以万计的客户端连接时 ...

  5. 百万并发中间件系统的内核设计看Java并发性能优化

    “ 这篇文章,给大家聊聊一个百万级并发的中间件系统的内核代码里的锁性能优化. 很多同学都对Java并发编程很感兴趣,学习了很多相关的技术和知识.比如volatile.Atomic.synchroniz ...

  6. 轻松应对IDC机房带宽突然暴涨问题

    轻松应对IDC机房带宽突然暴涨问题! 1[提出问题] [实际案例一] 凌晨3:00点某公司(网站业务)的一个IDC机房带宽流量突然从平时高峰期150M猛增至1000M,如下图: 该故障的影响:直接导致 ...

  7. TCP 百万并发 数据连接测试 python+locust

    过程笔记和总结 尝试一.locust 测试百万Tcp并发 另一种方式是使用jmeter 基础环境 服务端 虚拟机:Centos7.2 jdk 1.8 客户端 虚拟机: Centos7.2 python ...

  8. 微言Netty:百万并发基石上的epoll之剑

    说道本章标题,相信很多人知道我在暗喻石中剑这个典故,在此典故中,天命注定的亚瑟很容易的就拔出了这把石中剑,但是由于资历不被其他人认可,所以他颇费了一番周折才成为了真正意义上的英格兰全境之王,亚瑟王.说 ...

  9. Memcached 笔记与总结(7)增加虚拟节点

    仅仅把 Memcached 服务器集群地址通过一致性哈希转映射在圆环上,可能会出现数据不能均匀地分配给各台 Memcached 服务器. 解决方案是引入虚拟节点,就是把每个映射在圆环上的服务器地址(物 ...

随机推荐

  1. Django(71)图片处理器django-imagekit

    介绍 ImageKit是用于处理图像的Django应用程序.如果需要从原图上生成一个长宽为50x50的图像,则需要ImageKit. ImageKit附带了一系列图像处理器,用于调整大小和裁剪等常见任 ...

  2. Python 类似 SyntaxError: Non-ASCII character '\xc3' in file

    Python 类似 SyntaxError: Non-ASCII character '\xc3' in file 产生这个问题的原因: python 的默认编码文件是ACSII,而编辑器将文件保存为 ...

  3. Element - 日期禁用集合(持续更新)

    当前日期之前的日期禁用 <el-date-picker v-model="form.startTime" type="date" placeholder= ...

  4. Oracle创建表、删除表、修改表、字段增删改 语句总结

    创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 字段类型 默认值 是否为空, ...... ); 创建一个us ...

  5. 深入浅出:了解时序数据库 InfluxDB

    数据模型 1.时序数据的特征 时序数据应用场景就是在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,并按秒甚至毫秒计算的实时性写入存储. 传统的RDBMS数据库对写入的 ...

  6. Jmeter接口数据流测试及持续集成部署:(一)Jmeter环境搭建:安装JDK、安装Jmeter、安装Fiddler、安装ant

    Jmeter环境搭建 1.安装JDK 官方下载地址:https://www.oracle.com/java/technologies/downloads/ 安装方法:双击jdk安装包,一直下一步安装即 ...

  7. 第40篇-JNIEnv和JavaVM

    下面介绍2个与JNI机制相关的类型JNIEnv和JavaVM. 1.JNIEnv JNIEnv一般是是由虚拟机传入,而且与线程相关的变量,也就说线程A不能使用线程B的JNIEnv.而作为一个结构体,它 ...

  8. 体验webhooks

    一.webhooks是什么 webhooks是一种实现在web api跟web service之间的发布订阅的轻量级的模式:当服务中心某个事件发生的时候,就会向订阅者发送一个POST请求形式的通知,这 ...

  9. mysql根据条件决定是否插入数据

    这个问题其实分两个方面: 1.根据表的主键决定数据是否插入. 2.根据表的非主键决定是否插入. 假设有表DOC_INFO(医生表),联合主键HOS_ID(医院代码),DEPT_CODE(科室代码),D ...

  10. Part 21 to 22 AngularJS anchorscroll

    Part 21 AngularJS anchorscroll example $anchorscroll service is used to jump to a specified element ...