字节跳动技术团队 2024年11月26日
QCon演讲实录|赵彦奇:HTTPDNS 边缘下沉,性能、成本和稳定性之间的取舍与思考
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

火山引擎HTTPDNS服务经历了从中心云到边缘云的原生改造,成功实现了业务性能提升20%和成本优化35%。该实践源于抖音集团业务对性能和成本的诉求,以及HTTPDNS自身架构的优势。在改造过程中,团队面临资源受限、稳定性欠缺和收益难评估等挑战,通过敏捷式交付、演进式架构、智能调度等方法,最终打造了云边端全链路流量调度方案,实现了性能提升、成本优化、稳定性增强等目标,并为未来安全DNS、精细化调度和海外递归服务下沉等方向奠定了基础。

🤔 **边缘云原生改造的必要性:** 抖音集团业务快速增长,HTTPDNS服务流量激增,中心云部署模式面临性能瓶颈和成本压力,而边缘云架构能够提供更佳的性能和更低的成本,成为优化的重要方向。

🚀 **挑战与解决方案:** HTTPDNS边缘化改造过程中面临资源受限、稳定性欠缺、收益难评估等挑战,团队采用敏捷式交付、演进式架构、智能调度等方法,逐步解决流量与资源冲突、性能与稳定性冲突等问题,最终实现性能和成本的双重提升。

📊 **云边端全链路流量调度:** 通过构建全国网络质量地图、负载实时反馈、7×24小时拨测等能力,打造了端边调度、边边调度、云边调度方案,实现了更精准的流量调度,提升了服务性能和稳定性,并降低了成本。

⚙️ **软件和系统架构优化:** 通过软件架构和系统架构的优化,实现了控制面配置同步、数据面流量迁移、业务无损升级等能力,并构建了多链路、多服务、多层次的容灾机制,提升了系统的自愈能力。

🔮 **未来发展方向:** 未来,HTTPDNS将持续迭代,在安全DNS、边缘接入精细调度、海外递归服务下沉等方面持续发力,提升产品服务能力和用户体验。

赵彦奇 2024-11-25 18:04 重庆

业务实现性能提升20% 、成本优化35%,揭秘火山引擎 HTTPDNS 边缘云原生技术实践

10 月 18 日,在 QCon 全球软件开发大会 2024(上海站),火山引擎边缘云网络研发工程师赵彦奇分享了《HTTPDNS 边缘下沉,性能、成本和稳定性之间的取舍与思考》,在一众 AIGC、LLM 等当下热门议题中脱颖而出,通过 QCon 组委会的主观评价及参会者在现场提交的实时数据反馈等维度综合评估,被评选为 QCon 上海 2024 的明星讲师之一。



演讲主要介绍了火山引擎 HTTPDNS 边缘云原生技术实践经验,从火山引擎 HTTPDNS 迁移至边缘的必要性出发,围绕实践过程当中遇到的困难和挑战,打造 HTTPDNS 下沉边缘解决方案,最终实现了性能提升、成本下降的全过程,以及对整体实践的回顾与未来展望。



以下是演讲实录:


大家好,我今天分享的内容主要是火山引擎 HTTPDNS 边缘云原生技术实践。HTTPDNS 是服务于抖音集团几乎 95% 移动端用户的移动端域名解析服务,通过这次改造,HTTPDNS 服务从中心云完全下沉到了边缘,业务上的收获是 20% 的性能提升、 35% 的成本优化。本次分享主要聚焦于 HTTPDNS 服务进行边缘云原生改造的必要性,面临了什么挑战以及解决方案,最后我将分享在工程和技术管理上,用了哪些比较好的方法论保障项目最终落地。


在分享之初,先为大家介绍一下团队。HTTPDNS 作为移动端域名解析服务,是火山引擎 TrafficRoute DNS 套件的重要子产品。火山引擎 TrafficRoute DNS 套件包括了云解析、云调度、移动解析、公共解析等,服务于抖音、头条、飞书、豆包,同时还向 CDN、IaaS 等基础设施提供成套的域名接入、解析和调度的解决方案。通过产品概览图,大家可以看到在整个互联网全链路中,我们的产品是如何提供服务的。




火山引擎 HTTPDNS 是面向多端应用的域名解析服务,适用于移动端 APP、PC 客户端等多种应用场景,在抖音集团内部,服务于抖音、头条、豆包等产品的移动端域名解析服务,支撑起峰值达到千万级的 QPS ,日达万亿次的解析请求量,作为长期部署在中心云的服务,对可靠性和成本要求都比较高,为什么选择做边缘云原生的改造呢?


主要还是基于业务,同时来自外部业务和团队内部的诉求驱动着架构改造:


在此基础上,HTTPDNS 团队关注到边缘云架构,边缘云在泛互联网、游戏、智能驾驶等行业实现了很好的支撑,整个边缘云的生态和技术相对比较成熟,可能是 HTTPDNS 服务进一步降低成本、提升性能的好机遇。



作为承载大流量的服务,HTTPDNS 在应用边缘计算的时候会遇到一些挑战。



基于以上基础,我们最终结合了工程和技术思路来推进实践:在工程上,我们通过可控的稳定性换取收益;在技术上,我们通过架构升级和运维自动化进一步提高稳定性。



HTTPDNS 服务在进行边缘云原生改造过程中遇到了哪些挑战?曾经引以为傲的成熟架构、完善体系,在中心云部署迁移到边缘云的时候,反而成为了很大的约束。因为架构成熟,所以对云组件的依赖特别强,因为体系完善,所以在中心云构建的一整套的运维自动化,以及容灾方案都需要在边缘云架构下重新构建。同时,HTTPDNS 服务是 APP 用户接入互联网的第一跳,一旦发生故障,严重的时候可能会导致抖音用户打开 APP 出现数秒的卡顿、直播推拉流场景下用户访问慢、在 CDN 调度场景可能出现调度不准,最终导致用户体验差等问题。



在HTTPDNS边缘云原生改造的实际工程应用中,面对复杂需求场景,存在以下四方面挑战:



为了论证项目的可行性,HTTPDNS 团队针对自身服务特征及技术架构优势,进行了详细分析。




以上是从技术角度进行分析,接下来从这个工程视角分析复杂度。


从 STACEY 矩阵来看,第一需要分析需求的明确性,第二需要分析技术的风险性。结合上面的讨论,我们知道边缘云原生实践的需求极其明确,是为了满足抖音等业务对成本和性能的追求,希望通过性能的提升给用户带来更好的体验,让用户在线时间更长,从而获得业务收益。既然需求已经明确,主要看技术上的风险,主要困难可以归纳成两点,一是服务的部署困难,二是流量的调度困难。虽然在中心云模式下,不管是流量的接入调度,还是服务部署、架构设计,都经过了很长时间的沉淀,但这种模式和解决方案应用在边缘到底能不能达到预期,是具有不确定性的。因此从 STACEY 矩阵来看,项目类型属于模糊型,应该选择敏捷式项目管理方式和开发模式,得出的结论是后续需要按照快速迭代、快速验证、快速交付的思路推进工程执行。



除了看自身的风险和优势以外,我们也参考了行业内 DNS 相关产品边缘化部署的案例。在海外,Akamai 的 Edge DNS 和 Cloudflare 的 DNS 利用自身基础设施建设的优势,充分发挥 Anycast 的骨干网能力,构建了一套完整、分布式的、边缘接入的权威 DNS 。虽然国内没有这么好用的 Anycast,但 Akamai 的 Edge DNS 为我们在做租户级别的隔离、设计高可靠的容灾方案等方面提供了很好的参考思路,Cloudflare 的 DNS 产品性能很好、安全性很高,也为我们在流量特别大的业务场景下实现性能优化提供了参考思路。



讨论完为什么要做这个项目,以及项目前期做的调研分析,下面和大家分享整个项目具体是怎么做的,以及项目过程中遇到了哪些有难度的技术问题和相关的解法。



3.1敏捷式交付


回顾一下整个项目的过程,我们选择了敏捷式交付模式,这种模式的好处在于,首先我们可以尽快地把边缘云原生改造后的 HTTPDNS 产品露出给用户,优先让弱网地区、偏远地区的抖音用户享受到低成本的、高性能的 HTTPDNS 服务;其次,我们可以在每一阶段验证架构、收益,进一步优化容灾体系、运维体系,以确保整个项目是平稳、分阶段交付的,每个阶段的风险都是可控的。




3.2演进式架构


整个架构的演进模式也分为四个阶段,从最早的单体服务模式到无状态、有状态非离的模式,再到为了适应边缘云原生改造,将缓存优先下沉的模式,到最终形成了云边共存的架构模式。




在这个过程中有两个核心问题。一个是流量和资源的冲突,一个是性能与稳定性的冲突。


3.3核心问题一:流量和资源的冲突


第一个核心问题是资源和流量的冲突。


我们的流量比较大,同时用户分布在全国各地,分布十分广泛,右边上面的图基本上代表了我们的服务在全国各个运营商、各个省份接受到的请求的分布,可以看到基本上能和省份的人口对齐。下面的图是当前每个省份和运营商对应的用户,访问服务的网络接入耗时情况,整体还是不错的,但有极个别地区的访问延时比较大,我们在进行边缘云原生改造的时候,会优先用户规模大、接入耗时较高的省份。


流量的广泛分布会对资源提出要求。假设贵州地区大概需要 100 万的 QPS 来满足用户的接入需求,但是边缘节点在这个地域只有 30 万的容量,就会导致无法让所有用户都就近接入;又比如广东有 300 万的 QPS 需求,但由于这是一个大省,省内的资源非常丰富,而我们不需要这么多资源,因为我们通过中心节点实现了服务稳定成型,这时只需要将 20% 用户的流量调度到边缘,就能达到所有用户就近接入的目标。


我们想将所有用户就近接入到边缘节点,但是边缘节点的资源不能满足这么大流量的服务时,就会衍生出资源和流量冲突的问题。



3.4核心问题二:性能与稳定性的冲突


第二个问题是性能与稳定性的冲突。


从性能方面来看,当我们把用户组的调度力度分得很粗的时候,用户的流量都统一调度到某一个大的节点,整个流量的分配拓扑是简单的,但是为了追求极致的性能,我们将用户分得越来越细,调度力度也会越来越细,每一个省份的用户访问同省的边缘节点,这样每个用户访问服务时的性能都很好,但是节点会越来越多,导致运维、容灾难度越来越大。


从流量波动方面来说,现有的针对边缘计算服务放置的研究,主要聚焦在三个方面,第一是面向性能,第二是面向成本,第三是面向质量。但对于流量规模特别大、用户接入设备特别多,用户的设备又是移动的服务来说,会产生一个新的流量迁移,会存在比如说 A 省的边缘节点原来能够按照 60% 的安全水位去服务该地区用户,但春节的时候,B 省的用户大量流入到 A 省,用户变多了,节点容量就不够了,就会导致 A 省的节点流量被打超的风险。



3.5解决方案路径


针对以上两个核心问题的解决方案在不断迭代。



3.6智能调度:平衡容量、性能和可靠性


现阶段,我们主要采取智能调度平衡容量、性能、可靠性之间的关系。


细分来看,具体怎么解决流量与资源的冲突问题?之前不能很好地把资源和流量联系起来,主要是因为只能根据地理位置及经验判断用户和节点的距离关系,现在通过智能调度平台,构建起全国几千个边缘计算节点的拨测服务,通过节点之间的互 PING 打造出全国的网络质量地图。有了质量地图以后,我们就能做到边缘节点应用尽用,只要看到机房有资源就去部署服务,按照质量地图把距离最近、预期最好的流量调度过来,依次迭代,最终形成全局综合最优、时延最低的调度方案。


怎么解决性能和稳定性的冲突呢?首先,影响机房稳定性的主要因素是流量会不会打超,我们通过负载实时反馈节点质量和容量感知的方式,上报到调度中心,最终实现基于负载反馈的调度模式,保证机房容量是永远安全的。其次,通过 7 × 24 小时拨测服务,对每个节点进行分钟级的服务状态测试,能够保障在一分钟内发现故障失效,从而实现自动切流,保障服务可靠性。最后,因为 HTTPDNS 是云边共存架构,架构的好处在于突发流量时,可以通过实时状态感知到节点的容量是不是存在风险,从而形成预警,按照策略把突发流量调度到中心机房,以此来应对突发流量。



3.7云边段全链路流量调度


基于上述能力,我们打造了云边端全链路的流量调度解决方案,涵盖端边调度、边边调度、云边调度。调度的本质究竟是什么,实际上在于流量是什么、能够服务流量的资源是什么以及需求是什么,通过这些输入并结合需求,形成的策略便被称作调度。我们需要明确各种定义,在图中,流量包含终端、网络特征,转发链路包括多种,有加速网络、公网、专网,每一种链路都有质量、成本、性能方面的预期,对服务端来说,不管是边缘服务还是中心服务,最重要的指标就是容量、可用性、地理位置,这决定了它能够服务哪个地域的流量。


通过定制模型,采用云边端全链路流量调度,HTTPDNS 服务在边缘云原生改造获得性能提升的基础上,进一步提升了系统能力,包括新建连成功率提升 1.7% ;晚高峰的总耗时平均值下降了 5.9%;边缘节点因为流量调度导致的流量波动,标准差也从 5% 下降到 1%;由于按照流量特征进行调度,所以每个节点的流量分布更均匀,带来的好处是缓存命中率更高,边缘节点回源量更小。



3.8软件和系统架构优化


同时,通过工程实践,不管是软件架构还是系统架构,都发生了比较大的变化。


在软件架构上,从用户侧看,客户端和服务端有自己的 SDK ,为了保障边缘下沉过程中服务的可靠,每个 SDK 都有自动化容灾和兜底机制,以及和中心联动的能力,还拥有通过云侧控制客户端进行多协议选择的方式;从接入侧看,包含中心的四七层负载均衡、数仓监控等套件及边缘套件;从应用服务侧看,将递归层、缓存层分离,打造出独立的云边分布式控制系统,以及采集边缘和中心节点质量和容量的系统。


通过以上架构优化,在控制面,可以在两秒内实现全国范围内的配置同步;在数据面,能够做到一分钟内感知节点容量的风险,并通过云端联动的方式在一分钟内实现流量 95% 的迁移;在业务侧,深度融合边缘云组件,实现业务无损升级。


在系统架构上,整个系统从客户端接入到网络链路、边缘缓冲层、边缘递归层、调度中心层,形成了具备多链路、多服务、多层次的容灾机制,同时,通过工程实践,做到了数据面的任意节点可插拔,进一步提升了系统的自愈能力;还有我们仍在投入的综合调度,通过客户端及每个边缘节点的 SDK 上报节点的质量和容量信息,未来我们会致力于基于用户体验和服务质量的调度。



3.9新问题及解决方案


在这个过程中,我们发现了新的问题,大家可以看图,图上是一个边缘节点接入流量时的流量抖动情况,抖动比较大,这是为什么呢?因为 Local DNS 的调度力度是一个运营商加一个省份,一般来说这种 DNS 体系基于 IP 以及 IP 的权重来控制流量接入,由于节点变多,需要做权重轮转的 IP越多,流量分布得越离散,所以抖动就变大了。


为了解决这个问题,我们构建出云边端联动的控制模型,使用 Anycast 作为数据面的控制通道,为每一个接入的客户端分配它应该访问的边缘节点 IP 。通过云端调度,首先实现了设备级粒度的控制,机房的抖动粒度也从原来的 5% 下降了 1% 。其次是支持多协议接入,以前客户端接入只能在 DNS 53、HTTPDNS 中选择一个,现在通过联动,可以按照用户所处地域及设备类型,分配最优接入协议。最后是摆脱了对 Anycast 的强依赖,以前如果想保证整个系统不依赖域名,全部使用 IP 访问,就得通过 Anycast,但国内 Anycast 性能不及预期,在新的解决方案里,除了第一跳分配 IP 的过程依赖 Anycast 之外,其他场景完全不依赖,形成了一套轻量 Anycast 接入方案。



4.1项目整体收益


接下来总结一下工程实践的相关收益。



4.2成本收益归因


应用边缘计算性能变好,是因为离用户更近了,那成本为什么能优化呢?主要看服务的成本构成。首先,HTTPDNS 作为网络 IO 型服务,带宽的成本占比很高,其次,因为 HTTPDNS 是缓存型服务,对四七层资源及计算资源内存的消耗都是很高的。


对比中心和边缘,在网络带宽上,中心一般使用 BGP 带宽,边缘一般使用某地运营商的单线带宽,二者价格相差接近 5 倍;在四七层负载均衡上,理论上中心和边缘的计算资源价格一致,我们能优化成本是因为通过调度把一个地域的流量分配到一个地方节点,不像以前,一个中心机房承载了全国各地域的流量,会导致中心机房的流量模型特别复杂,每个节点的缓存数量特别多,进而导致每单核 CPU 的性能下降,通过把缓存做类似哈希桶的切割以后,性能自然就提升了,最终计算资源也节约了差不多 0.5 倍。



4.3通过云调度 GTM 获得的收益


除了前述提到的性能提升 ,我们在别的性能方面也实现了进一步提升,比如平均时延下降 5% ,首包建链平均时延下降 4.1% ,通过使用智能调度的模式进行故障运维和风险处置,自动容灾率达到 100% ,保障全流程是完全平稳的,以至于业务侧对于我们进行了这么大的项目毫无感知,只是感知到成本变低了,性能变好了。



4.4工程角度的思考


除了服务上的切实收益,在工程角度我们也通过实践获得了一些思考结论。前期做可行性调研的时候,我们同时在思考对于边缘云原生改造之后的服务,系统的核心评价指标是什么,以及整个工程实践会涉及的技术方案有哪些?基于 AHP 层次分析法,我们做了一次建模,在内部通过问卷调查、多次讨论,最终确定了以下几项:




4.5未来持续演进方向


展望未来,产品还将持续迭代,有以下 3 个演进方向:



跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

HTTPDNS 边缘云 云原生 域名解析 流量调度
相关文章