作者

刘如梦,腾竞体育研发工程师,擅长高并发、微服务治理、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. 『学了就忘』Linux基础 — 6、VMware虚拟机安装Linux系统(超详细)

    目录 1.打开VMware虚拟机软件 2.选择Linux系统的ISO安装镜像 3.开启虚拟机安装系统 (1)进入Linux系统安装界面 (2)硬件检测 (3)检测光盘 (4)欢迎界面 (5)选择语言 ...

  2. MyBatis源码分析(五):MyBatis Cache分析

    一.Mybatis缓存介绍 在Mybatis中,它提供了一级缓存和二级缓存,默认的情况下只开启一级缓存,所以默认情况下是开启了缓存的,除非明确指定不开缓存功能.使用缓存的目的就是把数据保存在内存中,是 ...

  3. Python Linux Ubuntu apt安装PyCharm

    PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...

  4. Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理

    我在起前面的几篇随笔中,大概介绍了工作流的一些场景化处理,包括如何把具体业务表单组件化,并在查看和编辑界面中,动态加载组件内容,以及对于查看申请单的主页面,把审批.取消.发起会签.会签.批示分阅.阅办 ...

  5. Kali安装Parallels Tools过程记录

    最近两天又参加了公司一年一度的网络安全劳动竞赛,之前用过的一个 Kali 忘记密码进不去了 -_- .重新安装了 Kali 2021.3a 之后发现 Parallels Tools 安装失败,记录了一 ...

  6. SpringBoot 整合thymeleaf

    1.Thymeleaf介绍(官网推荐:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html) Thymeleaf是跟Veloc ...

  7. 跟着老猫来搞GO,基础进阶

    回顾一下上一篇博客,主要是和大家分享了GO语言的基础语法,其中包含变量定义,基本类型,条件语句,循环语句.那本篇呢就开始和大家同步一下GO语言基础的进阶. 函数的定义 上次其实在很多的DEMO中已经写 ...

  8. 力扣 - 剑指 Offer 30. 包含min函数的栈

    题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...

  9. 【python】使用python十分钟创建个人聊天机器人教程

    以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...

  10. python nose测试框架全面介绍十四 --- nose中的只跑上次失败用例

    玩过一段时间nose的朋友,一定会发现nose中有一个--failed的功能,官方解释为: --failed Run the tests that failed in the last test ru ...