亚太内容分发大会暨CDN峰会一直致力于推动CDN产业深度融合发展和市场普及,现已成为亚太地区影响力最大的内容分发网络盛会。十年来,在以阿里云、网宿科技、腾讯云等亚太CDN产业联盟成员孜孜不辍的努力下,CDN产业已经成为基础性设施网络,以坚定的基石之姿,支撑起中国成为世界最大的互联网市场。
随着全球数字化、“一带一路”战略的推进,亚太内容分大会暨CDN峰会的影响力正在逐渐向全球延伸,同时也将中国智造CDN及产业链推广向全球每一个角落。
在6月10日上午举办的【内容出海论坛】上,芒果TV运维研发负责人 叶静涛带来了以《芒果TV的Spinnaker多云持续交付实践》为题的主题演讲。
演讲开始,叶静涛分享了一个小故事,即2021年2月22日午餐时间,芒果TV监控系统全面报警,有个公有云中上百台实例被删除!得益于一直坚守的多云机制,流量被自动转发到其他云,故障云也只用了20分钟完成所有实例的重建,此次故障对用户的真正影响率不足2%。其中利用了31个伸缩组、123台实例、8-20分钟重建、1.93%影响率。“我们坚持多云的故事,否则就是事故。”叶静涛说。
言归正传,叶静涛的演讲总结于三个字:看、想、练。看多云的优势,想思考和期望,练Spinnaker实践。
首先从多云的优势讲起包括以下几点:一是跨云级别的高可用,是配合客户端重试实现多云容灾机制。这一优势体现在当一个云不可用时,可以通过另外一家云提供服务;二是避免被厂商锁定,迁移成本几乎为零,选择更主动;三是避免资源不足,大型活动可在多家云平台申请资源;四是更多区域选择,可选区域为所有云并集。
其次是思考和期望,包括三方面的内容。一是在引入多云前后的思考。引入多云前面临的问题包括配置漂移,即每次操作引发的增量都会变成下次操作的变量,最终演化为千机千面。其次是发布的稳定性,依赖测试用例的质量和覆盖率,版本变更又会造成测试用例的不可信。最后是标准与灵活,从管理角度希望做到标准化,从业务角度希望做到自定义;引入多云之后又有新的痛点:一是云分散,相同业务不同云厂商的资源要登陆到多个控制台去操作。二是部署成本上升,每增加一家云,发布工作量将增加一倍。三是学习成本上升,不同云厂商对云的理解和设计都略有不同,每家云平台都需要掌握。
叶静涛表示,有了以上6个痛点之后,期望具备的能力包括以下九个方面:一是对云透明化、二是支持主流公有云、三是不可变基础设施、四是上手简单、五是自动流转、六是对接主流运维工具、七是智能判定灰度结果、八是丰富的发布策略、九是优秀的拓展能力。
奔着这一目标,芒果TV调研过很多工具,最终选择了基于spinnaker的多云持续交付平台。随后引出了新问题:怎么去实践的?
叶静涛介绍,Spinnaker首先是多云的机制,多云的机制要体现在两个方面:一是云的接入,作为平台怎么把云接进去;二是统一视角,用业务视角看资源,而不是云平台看资源。
关于云平台接入这一块只是历程,由于是国外的产品,对亚马逊云、微软云、谷歌云支持的很好。叶静涛说:“2018年拿到它的时候国内其他家还没有,我们联系了阿里、腾讯,由这两家上生产,之后又接入了华为云,芒果TV自己也把Istio相关开发出来完善Spinnaker的容器云部分,在合作过程中对阿里、腾讯也有了一些反哺。例如阿里云弹性伸缩组期望值的设定、腾讯云把带宽限定回归到LB上,整个过程我们是互相学习,互相进步的。”
而在统一视角这方面,Spinnaker是怎样通过统一的视角看到每个云上资源的?叶静涛介绍道,Spinnaker要求资源按照${App}-${Stack}-${Detail}三段进行命名,所有云平台中具有同样${app}前缀的资源划分到一起纵向管理。“这个过程当中看到VOD业务中有阿里云、腾讯云两组数据,其中阿里云是在做红黑全量的迭代,红色代表负载均衡看上去不健康,绿色是给流量,正好是做红黑,上一个版本机器不会释放,一旦有问题直接从LB层流量过去,就可以很快回滚。”
再来看不可变基础设施,叶静涛认为这不是新的概念,从容器引进时,这个概念已经带进来了。Spinnaker充分展示了云资源按需使用的魅力,以镜像为交付物将发布缩减为创建和销毁两个动作。而Immutable方式的核心是镜像,研发的交付物是软件包,基于软件版本自动更新镜像成为新的挑战。叶静涛介绍道:“芒果TV分成三种镜像:公共基础镜像、业务基础镜像、交付镜像。首先,公共基础镜像是在官方的镜像基础上,芒果TV统一对镜像的要求,比如操作系统版本、监控组建等方面是不允许改的。其次是业务基础镜像,根据业务特点和语言环境不同准备不同的语言环境,业务探点不同,可以根据自己的端口号去配置。最后是整个交付包的制造是基于业务基础镜像开一台机器,我们需要拉去最新软件包的版本打进去,这也是准交付物,因为没有经过测试,我们有自动流水线发布到预发布环境上去,经过各种安全代码扫描才是交付镜像。”
芒果TV在Spinnaker支持的部署策略,包括新增、替换、红黑、滚动等四点。新增是只增量部署新版本服务,用于灰度发布和金丝雀分析。替换是新版本服务部署完毕后清空所有老服务,用于预发布环境。红黑是新版本服务部署完毕后老服务保留,但不再接收流量。用于全量发布。 滚动是新版本与老服务按照N+1原则滚动发布,用于容器云。
有了以上的镜像,芒果TV的三条流水线也逐渐形成。这三条流水线包括预发布流水线、灰度发布流水线和全量发布流水线。以上流水线除灰度发布需人工确认版本外皆自动触发和执行。
那么金丝雀分析是怎样能智能的判断一个产品迭代之后新的版本是否适用?叶静涛介绍:“左边是生产的负载均衡和生产的集群,右边是预发布负载均衡和预发布集群,我们分别基于这俩集群新创建基线限集群和金丝雀集群两个弹性,直接接入生产分担相同的流量,此时通过监控系统去采集指标,包括CPU、内存、网络、业务日志等各种指标,然后做金丝雀分析。这是其中一个指标采集下来的结果,它会产生金丝雀分析报告并进行评分。我们可以无限的扩指标,同时可以给它一个权重,我的总分是100分,不同业务关注的指标不同,它的权重就不同。总分超过一个阈值我们认为是安全的,低于一个阈值发布是需要暂停的,中间分数段需要人工根据金丝雀报告进行判断。”
金丝雀分析带来的收益是什么?一是完全基于生产环境做的,它是真实可靠的。二是与业务和应用的版本都是解耦,不依赖测试用例,分析维度可自由扩展。三是Spinnaker的权重评分机制可以做到自动化。四是隐性收获,分析维度的丰富可以反向推动监控体系的完善。从而,Spinnaker在芒果TV里贯穿CICD、研发测试运维,包括在核心的位置。
再回头看六个痛点是否有解,答案肯定是有。叶静涛讲解道:“通过统一的视角、统一的UI,云资源分散便得到了解决;部署成本上升,只要能做成自动化,就能解决多个云并行的问题;学习成本的上升,因为Spinnaker是统一的操作平台,对现有的运营工具是兼容的,不需要学新的东西,做Spinnaker这个人肯定要去学集成进来,但是用Spinnaker的人不需要学;配置漂移也得到了解决,基于镜像发布的体系,没有进去改的机会,我只有创建和销毁;发布的稳定性方面,稳定性就是对版本质量把控,首先是三条流水线,先预发布,流水线上已经是缓慢发布的过程,中间有金丝雀基于真实流量的判定,因此我认为它是没有问题的;最后是灵活与标准,统一镜像的一部分,同时开放给对方一部分,三条流水线可以基于自己业务不同的诉求去编辑。”
演讲最后叶静涛表示,从 2018 年到今天,芒果TV的spinnaker道路充满了实验、学习、实践与转变,发版任务增加了十倍(现在每周发版次数200+,流水线执行次数600+),但运维人员并没有增加,并且实现了部分研发自治。后续将继续丰富金丝雀分析和混沌工程用例,最终达到“谁构建,谁运维”。