写点什么

纯干货|聊一聊大促活动背后的技术:火山引擎边缘云 CDN/DCDN/GA

  • 2024-01-23
    北京
  • 本文字数:4294 字

    阅读完需:约 14 分钟

纯干货|聊一聊大促活动背后的技术:火山引擎边缘云 CDN/DCDN/GA

去年 12 月 12 日,“抖音商城双 12 好物节”正式结束。据了解,双 12 期间,抖音电商推出了超值购、秒杀等多个优价频道和多个类目的主题榜单,让有消费需求的用户更高效地发现高性价比好物。除了货架场景,“抖音商城双 12 好物节”还发力重点达人直播间、好物直播间等内容场域,通过电商优质内容为商家和达人创造生意增量。



“抖音商城双 12 好物节”的背后是大流量、高并发对基础技术提出的挑战,保障大促期间平台的平稳运行、用户流畅的购物体验尤为重要。在经受了双十一海量流量考验的基础上,火山引擎 CDN/DCDN 和 GA 作为抖音静态/动态/长连接业务流量入口,保障了大促期间抖音电商平台的平稳运行。


下图为抖音客户端视频业务/动态接口/长连接业务主要流量架构图,客户请求通过火山引擎内容分发网络(CDN)、全站加速(DCDN)、全球加速(GA)回源到中心网关,转发到对应的业务服务。



技术架构


火山引擎 CDN/DCDN 和 GA 利用丰富的网络资源,依托边缘云全球网络(含到主要地区的合规专线)降低网络抖动、时延和丢包,显著提升传输效率,结合自研的传输优化、智能缓存、动态路由、安全防护等能力,为用户提供安全、稳定的一站式加速服务,提升用户访问体验。


  • 火山引擎内容分发网络产品 CDN (Content Delivery Network)提供稳定、弹性、高性能的全球内容分发服务。

  • 火山引擎全站加速产品 DCDN (Dynamic Content Delivery Network) 是一款在 CDN 静态内容加速服务的基础上,提供纯动态及动静态混合内容加速的服务。

  • 火山引擎全球加速产品 GA(Global Accelerator)是一款实现全球范围网络就近接入和跨地域部署的四层网络加速服务。


火山引擎 CDN/DCDN/GA 资源分布


火山引擎 CDN/DCDN/GA 通过抖音集团业务和规模化 ToB 业务的打磨,已经形成了一套完备且具备规模商业化能力的系统。


  • 资源分布:全球 2500+加速节点,国内实现三大运营商本省覆盖,海外覆盖了主要国家和地区;

  • 丰富协议:支持 HTTP(S)、QUIC、WebSocket、TCP、UDP 协议接入;

  • 智能调度:保证客户就近接入,实现大规模 QPS 的全网调度;

  • 智能路由:自研智能路由系统,保证请求最优路径回源,提升用户体验;

  • 传输优化:通过协议优化、回源预建连、公网路由择优等策略,提升动态 API、上传、下载等各个场景的传输速度;

  • 安全防护:支持大容量的 DDoS 防护、CC 防护、Web 漏洞防护,全链路 HTTPS(支持国密协议),确保数据传输安全;

  • 稳定性:通过大规模 QPS 的验证,稳定性经过充分验证,经历了抖音春晚红包、抖音世界杯直播、抖音电商双十一等大型活动考验。


火山引擎 CDN/DCDN/GA 网络拓扑


解决方案


火山引擎 CDN/DCDN/GA 作为抖音业务动静态流量入口,在双 12 期间,不仅要承载常态流量,还需要应对大促带来的洪峰流量冲击,这对火山引擎 CDN/DCDN/GA 的容量、调度能力、容灾能力都提出了更高的要求。对此,本文从 5 个方面介绍应对双 12 突发流量时火山引擎 CDN/DCDN/GA 提供的解决方案。


动态扩容


为了解决大促高峰时间段的资源不足问题,火山引擎 CDN/DCDN/GA 采用动态扩容技术。双 12 带来的流量是脉冲式流量,持续时间短,峰值高。虽然火山引擎 CDN/DCDN/GA 常态下会保留一定的流量冗余,但依然无法应对大促带来的突发流量。如果想要通过短时间内完成大量边缘节点扩容来解决这一问题,不仅操作难度极大,而且仅为活动进行大规模扩容,也会造成资源浪费。因此,如何动态扩容以应对短时间洪峰流量,是火山引擎 CDN/DCDN/GA 产品在双 12 遇到的主要挑战之一。


火山引擎 CDN/DCDN/GA 使用火山引擎边缘云统一技术底座,主要流量运行在边缘云容器/虚拟机上。因此可以在活动正式开始前,充分利用边缘容器平台的弹性能力,快速创建出一批新资源,完成资源动态扩容,满足活动期间的容量需求。在活动结束后,将扩容资源释放,实现整体容量的快速扩缩。


流量调度


为了应对突发流量,火山引擎 CDN/DCDN/GA 引入“活动”流量模型。常态下,火山引擎 CDN/DCDN/GA 会根据业务实时以及最近几天的 QPS/带宽/连接数进行调度,但面对双 12 带来的突发流量,这种调度模式显然无法适应。


为解决这个问题,火山引擎引入了“活动”流量模型。假设活动期间各个地区的流量分布与常态流量一致,根据业务预估的总 QPS/带宽/连接数,按比例分配到不同地区。在进行调度时,将预估的活动流量一并纳入考虑,因此调度后的节点能够承载活动突发流量。同时会根据前一天的流量值修正下一次活动流量模型。


引入“活动”的流量模型


自保能力


为了应对容量风险,火山引擎 CDN/DCDN/GA 具备熔断能力实现自保。资源和调度已具备应对预估峰值的能力,但业务预估流量跟真实流量很可能存在偏差。如果业务预估比真实流量低,突发流量很有可能超出 CDN/DCDN/GA 服务上限,当出现短时间的可用性降低、请求耗时增加后,会触发客户端不断重试,进一步加剧服务压力,极有可能造成线上整体的雪崩,影响产品请求。


因此,为了应对极端场景的风险,CDN/DCDN/GA 需具备熔断能力,当请求量达到一定阈值后,通过熔断降低系统压力,保证线上主要业务流量的稳定性。


活动期间,主要有以下容量风险:


  • CPU 资源风险:大量客户端冷启,新建连接(CPS)突增,抖音支持全链路 HTTPs,因此冷启客户端会进行大量的 SSL 握手,消耗 DCDN 节点大量 CPU 资源;

  • QPS 突增风险:电商 API 接口请求量(QPS)突增,超过 CDN/DCDN/GA 处理能力上限,造成服务崩溃;

  • 请求堆积风险:随着 QPS 突增,活动业务后端服务压力增加,响应耗时变大,造成大量请求堆积,拖垮 CDN/DCDN/GA 和业务服务。


为了应对上述风险,火山引擎 CDN/DCDN/GA 产品引入多维度熔断能力:


  • CPS 熔断能力:针对最耗费 CPU 的 SSL 握手,支持针对单域名和全局 SSL 握手限流能力,当单个域名的 SSL 流量超出阈值后,将拒绝新 SSL 请求,避免打爆 CPU;

  • QPS 熔断能力:当活动域名的 QPS 超过设定阈值后,拒掉新请求,避免过多请求回源,保护自身和源站服务;

  • 回源熔断能力:当单个域名同时回源的请求达到一定阈值后,新的回源请求会在 CDN/DCDN/GA 直接熔断,响应异常码,避免业务服务响应变慢后,请求堆积拖垮业务后端服务。


上述熔断能力,均支持单域名和全局粒度。


  • 单域名熔断:主要针对活动域名配置,避免活动域名突增影响全局流量。

  • 全局熔断能力:主要是保护 DCDN 服务,当超过 DCDN 服务能力上限后,熔断一部分流量,保证大部分流量可正常服务。


流量压测


具备资源、调度、熔断能力后,还需要在活动之前对上述功能进行验证。对此,火山引擎 CDN/DCDN/GA 与抖音客户端合作,进行全链路压测,利用真实的客户端请求,模拟活动期间洪峰,验证全链路的处理能力。

流量压测曲线


加速性能


性能接入是加速产品最重要的衡量指标之一。如何更好的提升性能,也是火山引擎 CDN/DCDN/GA 产品持续探索的方向,经过多年的打磨,沉淀了经验,以下是火山引擎 CDN/DCDN/GA 产品在性能优化方面的主要策略。


智能调度


移动端用户通过 4G/5G/WIFI 无线网络访问源站应用,信号不稳定,如果直连源站,RTT 较长,按照主流的基于 ACK 反馈或超时来判断丢包的拥塞控制算法,需要很长时间才能感知到丢包,再进行重传,导致时延非常大,如果通过更近的接入点上车,移动端和节点之间 RTT 更短,就可以更快感知到丢包,更快进行重传,降低时延。

火山引擎 CDN/DCDN/GA 自研的智能调度算法会基于用户分布情况,动态实时计算出接入质量更优的节点,例如在某城市,会根据用户分布的集中度,选择离大多数用户更近的接入点上传,相比传统的 DNS 调度能更好的实现就近接入,提升用户体验。


智能路由


广域网网路存在复杂的运营商和地域限制策略,经常出现绕路、限速等情况。针对此问题,火山引擎自研的智能选路系统可在复杂的广域网中实时选择最优路径回源,保障业务的最佳体验。智能路由解决的是多目标路径规划问题,需要兼顾性能、容量等,重点是归一化目标函数设计。火山引擎

CDN/DCDN/GA 综合考虑了链路质量、节点水位、亲缘性等目标,同时根据不同的业务场景(API、上传、下载等)采用不同权重值,保证各种业务场景按照最佳链路回源。



传输优化


  • 协议栈优化:回源链路采用火山引擎自研的 TTCP 协议栈,TTCP 具备内核插件化能力,已在火山引擎 CDN/DCDN/GA 全网部署,支持域名粒度控制,可根据业务场景(API、上传、下载)实现精准化的参数控制和自适应拥塞控制算法,保证最佳的访问体验。同时 TTCP 实现了平台化的管理,利用采集现网数据通过大数据实时分析决策动态的调整系统参数和拥塞控制算法,提升访问体验。


  • 连接优化:火山引擎 CDN/DCDN/GA 产品为提升访问性能、降低中心服务的压力,采取了“预建连”优化手段。节点在没有真实请求时,主动与源站建立一批连接,维护在连接池内,当突发业务请求到达,回源时可直接复用连接,提高访问性能。通过抖音集团内部业务测试显示,采用预连接策略后,首包时间耗时从 115ms 降低到 54ms,降低了 53%以上,效果明显。


图片 9.png


图片 8.png


应用案例


火山引擎 DCDN 承载了双十一期间抖音业务主要 API 流量,在双十一的洪峰挑战中保证了用户最佳购物体验,性能、稳定性得到了充分验证。通过客户端监测数据,火山引擎 DCDN 活动期间服务稳定,且加速性能达到行业领先水平。


1. 抖音短视频:抖音短视频核心 Feed 流 API 请求通过开启 QUIC 协议,采用智能路由、预建连等优化策略,网络耗时均值降低 7%以上,长尾耗时降低 17%以上,人均播放时长等核心业务收益显著正向。



2. 抖音电商:结合边缘高防调度以及边缘 WAF 能力,解决 API 防护、 DDoS 和 CC 攻击、保护内容不被恶意爬取、劫持、篡改等,通过自研的传输优化、智能缓存、动态路由等技术提供了纯动态及动静态混合内容的加速服务,为用户提供更优质的访问体验。



展望未来


火山引擎 CDN/DCDN/GA 自上线以来,通过字节内部大规模 QPS、亿级并发连接数的验证,经历了双十一、春节活动、世界杯等大型活动考验,经过多年的打磨,性能、稳定性达到业内领先水平,沉淀了典型应用场景的加速解决方案。火山引擎 DCDN 和 GA 先后于 2021 年和 2022 年正式 ToB,把服务抖音业务的技术积累提供给更多的外部客户。


下一步,火山引擎 CDN/DCDN/GA 会继续进行深度优化,持续降低访问时延,比如在加速网络内部使用基于 UDP 的私有协议,针对动态 API、上传、下载场景使用更加自助可控的丢包检测和拥塞控制算法,另外结合端上的能力,针对时延敏感性业务,比如游戏场景联动火山引擎游戏加速解决方案 GNA 支持全链路的加速能力,开启 FEC、双通道、网络检测能力等,为用户提供极致性价比的加速服务。


2024-01-23 14:233919

评论

发布
暂无评论
发现更多内容

另类加法与走方格的方案数

未见花闻

7月月更

STM32+ESP8266+MQTT协议连接OneNet物联网平台

DS小龙哥

7月月更

Elephant Swap的LaaS方案优势分析,致eToken表现强势

股市老人

从源码上学习 MockMvc 的使用

安逸的咸鱼

Java 源码 Mock测试框架 7月月更

zookeeper-运行期间的leader选举与observer

zarmnosaj

7月月更

Android 开发遇到的Exception

沃德

android 7月月更

strncpy() 复制字符串(受长度限制)

謓泽

7月月更

LeetCode-88. 合并两个有序数组(java)

bug菌

Leet Code 7月月更

敏捷 ? DevOps ?

FunTester

开幕在即 | “万物互联,使能千行百业”2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛

OpenHarmony开发者

OpenHarmony

C#入门系列(二十七) -- LINQ简析

陈言必行

7月月更

Qt | 模态对话框和非模态对话框 QDialog

YOLO.

qt 7月月更

【愚公系列】2022年07月 Java教学课程 06-常量

愚公搬代码

7月月更

谈谈程序员如何提高自己的写作能力

宇宙之一粟

写作 7月月更

Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议

鳄鱼视界

QT exe只允许运行单个

小肉球

qt 7月月更

干货分享-作为Lead 接手一个新的数据团队一 问题盘点 与Insights的发现

松子(李博源)

经验分享 数据分析师 成长笔记 带团队

Qt|编辑框的使用总结

中国好公民st

qt 7月月更

java零基础入门-java8新特性(上篇)

喵手

Java 7月月更

关于数据产品经理的三个小的知识点

松子(李博源)

数据中台 数据产品经理 数据产品

深浅拷贝

Jason199

js 深拷贝 浅拷贝 7月月更

【函数式编程实战】(二)代码的行为参数化传递

小明Java问道之路

函数式接口 Lambda 函数式编程 行为参数化 7月日更

Prometheus 2.37.0 新特性

耳东@Erdong

release Prometheus 7月月更

在 Kyma 云原生平台上开发并部署 Node.js 应用

汪子熙

Kubernetes 云原生 SAP Kyma 7月月更

数据结构-顺序表的实现

芒果酱

数据结构 C语言 7月月更

云原生(十) | Kubernetes篇之Kubernetes简介

Lansonli

云原生 k8s 7月月更

Docker 安装 Nginx 部署前端项目

宁在春

nginx Docker Vue 7月月更

Python干货篇——列表及列表常用内置函数

Java学术趴

7月日更

mysql进阶(十七)Cannot Connect to Database Server问题分析

No Silver Bullet

MySQL 数据库 7月月更

NFT数字藏品系统搭建—app开发

开源直播系统源码

软件开发 数字藏品 NFT数字藏品系统

纯干货|聊一聊大促活动背后的技术:火山引擎边缘云 CDN/DCDN/GA_字节跳动_火山引擎_InfoQ精选文章