Airbnb从微服务演进过程中获得的十条经验

来源:互联网 发布:电子软件开发是什么 编辑:程序博客网 时间:2024/06/08 17:21

最近在纽约举行的FutureStack 2017[1]大会上,Airbnb的软件工程师Melanie Cebula谈到了她们公司的微服务之旅以及从中得出的十条经验。


Airbnb在191个国家的65000个城市开展共享住房服务,今年夏天他们迎来了第400万个房源。仅今年夏天,就有4500万客人会使用Airbnb的房源,自2008年以来共有2亿客人入住。


为了实现这一目标,Airbnb需要每周部署3500个微服务,每年总共部署75000个生产环境,他们目前已经拥有900名工程师,并且还在持续招聘。


“从根本上来说我们需要百分之百的可用性,同时我们也希望百分之百的生产率,”Cebula说。“百分之百的可用性意味着我们的网站对于我们的客户、房东和员工是完全可用的,百分之百的生产率意味着生产环境中的每个员工都可以很容易地创建、修改和发布功能。”


这儿就是Cebula从单体应用到微服务的技术演进过程中获得的十条经验:



1、单体架构优先


不要直接从微服务开始,Airbnb在代码基线中仍然维护了一个Ruby on Rails单体应用,这个应用已经工作了很长时间并且允许聚焦于基础设施。Cebula说从微服务开始是预先优化的,但不是必需的。


但是当公司发展壮大后,创建一个开始调研微服务的计划就非常重要了。对于Airbnb,这个转折点是在50万行代码时,这时代码增加很快,他们意识到代码的每年倍增是不可伸缩的。


如果把新消费与新零售这两股潮流结合到一块儿聊下怎么样?做一个规模不大的封闭沙龙,定向邀请一些业内玩家在一起聊个半天?


Cebula说:“重要的是早日有这样的洞察力,并开始构建所需要的组件。”


2、DevOps文化



“同时DevOps文化的创立也是非常伟大的”,Cebula说到,“你希望每一个工程师都准备好了支持他们的服务,因为我们现在是按照一个微服务配备三个工程师的比例,微服务还会持续增加。”对于Airbnb来说,DevOps文化的兴起来自于他们的系统运维团队。


在发生一些事故时,系统运维团队有三个主要职责,他们第一需要对问题进行分类,第二协调反馈,第三需要将反馈与合适的内部服务团队、产品团队、基础设施专家和第三方服务部门沟通。


随着时间的推移,Cebula说到,系统运维团队“出人意料地成为了在一家历史上以产品驱动为主导的公司内部建设DevOps文化的巨大杠杆,以后当公司试图扩展大型服务时,这会变得非常重要。”


系统运维培训对所有工程师开放,并且可以随叫随到。 根据Cebula的说法,他们开放的这些培训广受欢迎,据了解,现在有超过33%的工程师参加培训。 他们学习基础设施、当前的架构以及演进过程,如果他们有兴趣的话,还可以学习如何设置即时响应、如何做成一个有效的即时响应。 他们还有一个动手项目,每个人都被分组参加。 据她介绍,工程师认为这是一个亮点。


她说:“我们已经培育出了一种文化,每个工程师都可以单独构建、测试和发布他们的软件。”


3、配置即代码


Cebula说,开发人员不擅长试图追踪所有这些工具。 但是开发人员可以理解代码。


所以代码的配置变得非常重要,将配置作为代码,这样就非常容易推导,她解释说 “生产环境中目前配置了什么、配置是否已经回滚,对配置进行更改,这些都可以在里边呈现。”


4、监控和告警


她说,每项服务都应该使用像New Relic这样的标准化工具。 这将允许开发人员以相同的方式监控和告警这些跨应用的服务。


同样重要的是让工程师能够在功能代码之外编写度量指标,使开发人员能够轻松编写自己的业务度量指标。 Cebula说,这些告警被配置为代码。 他们有自己的领域特定语言(DSL)来根据这些度量指标编写告警。 创建一个新的告警就像打开一个新的pull request一样简单。


Cebula说只要有可能,Airbnb就给开发者免费的功能,比如捆绑统计数据到pull request中。


5、持续交付


Cebula说,部署的伸缩对于工程师是非常困难的。 但是如果已经实现了持续交付,那么创建的每个新服务都将具有与单体应用一样的进程和相同的功能。 成功的关键是标准化和自动化。


6、自动化


手工操作步骤是非常困难的,还容易出错。 所以所有一切都尽可能自动化。


当拆解这些服务时,Cebula建议,“需要确保考虑它们的共同点,这些服务应该具备什么特性可以来构建我们的配置实现特定的效果。”


应用程序的代码也很重要,代码位于存储代码的代码库中,作为持续集成过程的一部分进行自动化测试和验证。 基本上,这些是很小的构建,并以组件的方式部署和使用。 他们有标准化的格式和默认值。 她说:“所以对于开发人员来说容易使用是毫无疑义的。”这只是一个提醒,不需要献花。


7、第一个服务通常是不好使的

微服务技术演进是一个漫长而艰苦的过程,Cebula指出Netflix花了十年的时间才完全从单体应用转向微服务。 她说,可能你的第一个服务是不好使的。 微服务技术演进是非常有挑战性的,你必须提醒自己,一切都会好起来的。


8、服务拥有自己的数据


Cebula说Airbnb有着民主的部署流程。 所有开发人员都希望自己的功能可以涵盖从代码实现到部署到生产环境的全过程。 开发人员都希望可以部署这些功能的变更、监控这些变更、回滚、中断或者在必要的时候进行恢复。


9、从单体架构拆分

一旦已经创建了微服务,稍后就会看到程序在速度和自动化程度方面的提升。 Cebula说:“这太棒了。” 这时你会意识到仍然有数百万行代码停留在单体应用里。 为了移植代码,您将不得不与基础设计架构团队合作,他们一直在构建微服务,同时还要引入产品团队,开始分拆单体应用。 引入产品工程师是关键。 她说:“你可以向他们展示这些非常棒的图表,说明是如何可以并且真正快速部署任何他们想要的服务,这将是非常棒的。” 但是你必须获得真正用于微服务转型的支持。


10、标准化微服务的创建


这是Airbnb目前正在进行的工作。 目标是使所有配置都易于访问,因此开发人员可以通过一个pull requset创建一个服务。 可以同时创建代码存储库和配置。


理想的情况是,您只需要定义与您的服务相关的内容。


相关链接:


1. https://www.thenewstack.io/tag/FutureStack-2017


原文链接:https://thenewstack.io/airbnbs-10-takeaways-moving-microservices/


基于Kubernetes的DevOps实践培训


本次培训内容包含:Kubernetes架构、安装、深入了解Kubernetes、Kubernetes高阶——设计与实现、Kubernetes落地实践、微服务、Cloud Native等,点击识别下方二维码加微信好友了解具体培训内容



点击阅读原文链接即可报名。
原创粉丝点击