作者

刘如梦,腾竞体育研发工程师,擅长高并发、微服务治理、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. 攻防世界 web2.robots

    输入ip/robots.txt,显示出了flag目录,直接访问.

  2. 深入理解和运用Pandas的GroupBy机制——理解篇

    GroupBy是Pandas提供的强大的数据聚合处理机制,可以对大量级的多维数据进行透视,同时GroupBy还提供强大的apply函数,使得在多维数据中应用复杂函数得到复杂结果成为可能(这也是个人认为 ...

  3. 从零开始 DIY 智能家居 - 基于 ESP32 的智能紫外线传感器模块

    目录 前言 硬件选择 二.使用步骤 获取代码 设备控制命令: 设备和协议初始化流程: 配置设备信息 回调函数注册 数据获取与上报流程 总结 前言 做了这么多传感器都是自己玩,这次家里人看不下去了,非得 ...

  4. PCIE学习笔记--TLP Header详解(三)

    目录篇地址为:http://blog.chinaaet.com/justlxy/p/5100053481 Completions Completions的TLP Header的格式如下图所示: 这里来 ...

  5. u-boot 1.1.6 start.S 代码学习<转>

    ---转自 http://blog.csdn.net/rockhard/article/details/4166642 ------ /* 参考了别人的一些笔记,看完了启动代码. 本文档记录在看代码时 ...

  6. CSS 盒子的边距塌陷

    tip:为能更直观地学习,本文章已省略部分 css 样式代码. 我相信下面的情形大家在日常工作中常常碰到:在制作静态页面中,为了页面整体的协调与美观,我们想让子盒子 image-div 的上边沿距离父 ...

  7. 如何系统学习C 语言(中)之 指针篇

    谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在. 同时,指针也是C 语言中最精华的部分,通过灵活地运用指 ...

  8. Centos7 误删除bin/sbin之类的恢复

    参考连接:https://blog.csdn.net/weixin_41843733/article/details/107468767 挂载对应版本的光盘进入急救模式,复制已经丢失的命令到/mnt/ ...

  9. Python里字符串Format时的一个易错“点”

    这是一篇很小的笔记,原因是我做学习通的时候见到了这个题: 当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了... 看了一眼这个format的字符串对象,发现有个 {:7. ...

  10. ansible基本命令及剧本

    ansible常用命令 1. -v, –verbose 详细模式,如果命令执行成功,输出详细的结果(-vv –vvv -vvvv) 2. -i, –inventory=PATH 指定host文件的路径 ...