云原生DevOps与Continuous Everything的实践(内附完整演讲视频)

af5cf7af6b6c411ce9748320fd5478e9.gif

ac02fa0bbd43a325469aad8f52a59643.png

本文内容选自2021中国DevOps社区峰会 · 大连站,王宇博老师分享的《云原生DevOps与Continuous Everything的实践》文字实录和视频回放。

2fe8041c76904160d8e43c9d903734a1.png

视频回放:

2c55944109759c6ef40b714a2f451777.png

以下是演讲文字实录:

大家好,很高兴能回到大连和大家做分享,也很高兴看到亚马逊云科技和DevOps社区有非常紧密的合作,通过社区的形式来给更多的中国开发者分享,和社区共同成长。

今天我想从亚马逊自身的实践开始和大家一起探索如何在云上帮助开发者、企业构建DevOps体系。DevOps相对比较复杂,在技术层面、架构层面、组织层面,甚至包括文化层面都有需要了解和掌握的地方。

bc8d77242c12f002981bc26831ae692f.png

亚马逊的DevOps之旅

首先,我想从亚马逊的电商平台展开。亚马逊成立于1994年,从网上书店开始,目前已经有20多年的发展。早期亚马逊也使用的是单体架构,根据当时的业务情况和用户规模,单体架构在那个年代是合适的选择。随着2000年前后网络泡沫的膨胀,亚马逊也发现单体架构很难承载业务量、用户量的蓬勃发展。因此从2000年开始,亚马逊就逐渐开始向微服务和DevOps演进。其中非常重要的一个时间点是2002年,当时亚马逊创始人贝佐斯发表了非常著名的“API宣言”,所有团队之间的接口和通信只能通过API来进行,通过API构建起一整套跨体系的流程,从而使得亚马逊的架构不断地微服务化。到目前为止,我们向微服务和DevOps演进已经有20多年的时间,目前在整个亚马逊电商平台的后端有10万个微服务,使团队面向用户的持续交付能力得到了极大的提升。

657f3c4dc3062762dd8acb56beb46b17.png

在亚马逊电商平台的架构中,有不同的产品团队,在亚马逊叫做双披萨团队。每个团队通常不超过十个人,他们会全权负责产品的开发、运维,迭代、交付的全过程,团队负责的每个产品就是一个微服务,例如在亚马逊电商平台上的购物车,个性化推荐等。通过一系列的微服务,实现了云端的DevOps的体系建设。

亚马逊20年的微服务实践总结,可以用三条经验来概括。在DevOps体系中,最重要的文化,必须通过文化建设使开发者凝聚在一起,实现共同的DevOps目标。对于亚马逊来说,双披萨团队,逆向工作法等机制,是构建DevOps文化的的良好体现。其次是架构,包括设计,解耦,重构,使DevOps架构有良好的设计模式。最后是工具,对于构建云原生的DevOps平台,工具很重要。

a3acbb11923877c26c208183be624ce0.png

架构和模式

在构建DevOps的模式和架构的过程中,要考虑的因素非常多,包括技术层面和价值层面的不同因素。架构需要和业务有良好的契合度,并且要选择合适的设施来实践DevOps。对于亚马逊来说,在这个领域有非常丰富的实践,以方法论或者实践指导的形式发布出来,比如说亚马逊构建者库,帮助开发者了解和掌握如何实践DevOps,把亚马逊过去20多年的经验以文字化的方式总结出来,分享给所有的开发者。这是一系列非常丰富的指导,帮助大家更快更好地借鉴亚马逊的经验,并且成功应用于您的DevOps流程。

4be736d14276bb686f13d3dcd177e360.png

我们希望以微服务的方式构建应用,缩小范围,使API成为所有微服务的前门,而不通过其它方式进行。对于构建微服务体系,需要考虑的因素有很多,包括高可用,低延迟,高吞吐等等。而我们则要进行权衡来选择如何构建更符合业务的微服务体系。这里就需要技术团队和业务团队有良好的沟通,来把握如何平衡地构建微服务体系。这个微服务体系设计出来以后也不是一成不变的,会随着不同阶段的业务需求进行演进。比如说在某些时候,我们会觉得效率更重要,有时候可能需要进行更多的观测,就要权衡不同的目标来使微服务体系建设和业务衔接的良好。

我们看到越来越多的开发者会基于无服务器架构来构建微服务体系。亚马逊有一套完善的无服务器架构,通过无服务器和其他云原生服务的集成,包括存储、分析,事件处理等,帮助大家迅速在云端构建起一整套的无服务器体系,使系统演进的速度更加便捷,并且可以随时调整持续交付的能力。大家关注的另外一点就是基础架构即代码,通过代码的方式来管理和使用基础架构,使基础架构的持续交付为DevOps的建设提供帮助。

保持微服务的持久交付和高可用性,对某些场景,例如在线的视频或者电商平台,尤其是在促销情况下如何保证高可用,是微服务用户体验需要考虑的一个非常重要的因素。在这方面,对架构的设计要考虑更多,包括自动化、部署分析、人工干预等等。不管是亚马逊还是其它互联网公司都有很多实践,大家有兴趣可以做进一步的了解。

混沌工程的概念发源于2010年的,希望通过一套理念和体系来提升分布式系统的韧性。故障的发生总是在意料之外,但又是在情理之中。如何利用混沌工程来打造系统的韧性,也是DevOps面临的非常关键的问题。从理论到实践、方法、服务,亚马逊有一整套完善的体系,在这里就不详细进行展开了。

如何打破业务和开发之间的沟通理解障碍,使产品开发和迭代的速度满足业务需求也是DevOps实践面临的问题。用统一语言可以解决这样的问题,使技术和业务得到良好的衔接。当然现在一个流行的话题就是领域驱动的设计,领域驱动的设计其实是关注微服务的拆分,如何使拆分更好地满足业务需求。如果没有很好地理解业务的边界,而把微服务拆分成大的单体架构是我们不希望看到的。这些比较抽象,但是可以帮助大家形成更好的理念,在生产中指导实践。而如何把实践落地到具体的开发和生产领域,需要有一整套云原生工具的支撑。

7c47e17e0265c263a188bc4981738653.png

云原生工具

下面我为大家介绍一些云原生的工具,这些工具都是围绕开发者展开的。对于DevOps而言,我们希望帮助开发者快速迭代,快速创新,构建自服务平台帮助开发者选择出任何需要的服务来快速地设计和演进。这是我们围绕开发者构建的云原生平台,从设计、应用、运维、架构四个方面给大家做展现。

ae6e29adb1f1d04b7e73f2267b0472f0.png

亚马逊云科技DevOps工具集,涵盖众多领域,包括CI/CD工具,基础架构即代码,监控与追踪,IDE/CLI/SDK,通过云原生工具为DevOps构建进行良好的支撑。云端的一站式DevOps解决方案,能够为开发者提供极大便利。亚马逊云科技提供的套件包括代码实现,控制管理,编译测试,部署监控等过程。现在开发者很关心GitOps的实践,亚马逊云科技也能够帮助开发者快速实现云原生和GitOps的云端整合和实践。

3b6fd83f1cd531f9c33f07c6d3a582f0.png

我们来看一下亚马逊内部是如何使用云原生DevOps工具进行实践的。亚马逊的DevOps流水线通常有四个阶段,包括开发测试,代码审核,预生产和生产。我们会使用云主机来进行开发测试,工具有Cloud9,远程云桌面,CodeStar,都能够在数秒中获得资源来进行开发测试,使迭代时间大大缩短了。亚马逊云科技开发工具包可以和更多的IDE集成,包括PyCharm, IntelliJ, Visual Studio, Visual Studio Code, WebStorm, Rider等。远程云调试,是目前比较热门的一个话题。很多时候我们在本地进行微服务开发,但是如果我们需要进行调试,就需要在本机上启动容器。在本地上启动很多容器,尤其是Java容器的时候就会影响调试的效果。这时就可以通过远程云调试的方式在云端进行微服务代码调试,帮助大家进一步提升调试的效率。

9112530a9392d9fbff8ca0d02e6a56ba.png

然后看一下代码审核,包括代码的自动和人工审核,来提高代码交付的质量。对于代码审核我们有云服务来帮助大家管理不同的代码的分支,进行代码提交审核,通过自动化的方式进行代码审核和后续合并相关流程的实施。其中以人工智能和机器学习驱动的代码审查服务,叫CodeGuru。它有两个能力,第一个是静态代码分析器,第二个是性能分析,从审核和性能两个方面为代码审核提供智能化的支撑,目前支持Java和Python两种语言。对于一些代码的错误,例如资源泄露的问题,在CodeGuru也有很好的发现和修复整合交付给开发者。在CodeGuru中可以通过火焰图来进行性能研究,找出最昂贵的代码。

d68cce0bbdd596af55293bb1f7523ddc.png

再看持续交付。亚马逊内部构建了一整条典型的持续交付流水线,包括代码,编译,生成,Alpha/Beta/Gamma测试,向不同的区域进行部署,并且随着业务的不断扩大进行不同权重的部署等等。至于如何进行集成,可以通过Codebulid来直接查看单元和集成测试报告。

85f258d8761da7e0e372d58c39f73bda.png

下面看一下在整个DevOps体系中,如何进行技术架构的选型。在选型过程中我们会考虑很多因素,首先当然是基础架构选型的自动化,通过一系列的自动化模式帮助大家以代码的方式进行基础设施的快速实现和管理,可以选择容器,无服务器等方式,并且以更合理的成本帮大家构建DevOps。

9a6078a9a40c69adac22787cad61250c.png

具体给大家看一下如何针对实际需求来进行基础设施选型。首先看是否需要服务器的自主管理。如果需要有更多的服务器选择和管理权,可以选择Amazon ECS还有Amazon EKS,我们会在Amazon EKS中提供更多的安全功能增强并回馈给开源社区,对于企业级DevOps提供更多的帮助。如果大家不想管理服务器,只想在云端快捷使用容器服务,也没有关系,我们有托管的无服务器容器服务,Amazon Fargate,大家只需要关注容器之上的应用即可。如果大家希望构建事件驱动的应用,我们有Amazon Lambda,可以便捷地构建无服务器应用,同时也可以和其它云服务一起,构建更大规模的无服务器解决方案。而随着无服务器技术的发展,Lambda也开始支持容器操作,同时支持的计算和存储资源也在不断地提升。我们相信无服务器会有非常良好的前景。再给大家介绍一下Amazon CDK,它是通过熟悉的编程语言,比如JavaScript, TypeScript, Python, Java, C#, Go等,来进行基础设施的演进和定义,通过模板来访问控制资源从而实现一整套的基础设施自动化。

70f62cfb3978a11a26d77ec45cb4aff2.png

总结和探讨

最后做个总结。对于亚马逊而言,是通过文化和机制等推动了DevOps向前发展。亚马逊的研发团队DevOps核心在于:解耦(两个披萨团队和微服务)、自动化一切、自服务平台、基础设施即代码。DevOps的工程实践和现代应用架构非常重要。持续交付要从业务出发,打破团队壁垒,构建高效敏捷交付和数据反馈闭环。GitOps是容器平台CI/CD的热点方向,同时安全和智能化是目前DevOps发展的趋势。Amazon也正在把越来越多的内部工具和实践演化成面向开发者的云服务,为DevOps助力和赋能。

今天的分享就到这里,谢谢大家。

b2d137e4944251deb789751097454808.png

社区近期活动

线下活动:

10月23日 珠海Meetup

10月24日 天津Meetup

11月06日 北京Meetup(即将上线)

11月09月 上海Meetup(即将上线)

12月04日 深圳峰会

226cc38b67398d440cc59c8ed7416a47.png

线上活动:

10月20日 线上直播

10月27日 线上直播

25f7f9f4b9d2263c5ac4066c431dcbf0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值