Airbnb是住宿的最大的在线市场之一。该平台成立于2007年,目前拥有超过550万个城市,超过10万个城市和220个国家。
最初,Airbnb的一小组工程师队在Rails Monolith上运行了Ruby,它们称为单轨。后来,公司增长并开始与单轨无轨工人有依赖性问题。 “由于我们的工程队长在QCON 2018的演示文稿期间,由于我们的工程队长,在QCONBB的演示文稿中,我们开始在模块之间遇到紧密耦合。 “
2015年,Airbnb拥有200多名工程师,正在为单轨制造成本。每天部署到泰利士的200个宣告,由于恢复和回滚,每周平均每周举止15小时。
“随着我们的工程团队继续增长,意大利面条纠缠在单轨编码方面也是如此。它变得越难以调试,导航和部署单轨。“ -Jessica Tai,Airbnb
作为响应,Airbnb开始分开Omorail并转移到亚马逊弹性计算云(EC2)中的面向服务的体系结构(SOA)。虽然这种改变了解决了紧密耦合的问题,但该公司现在面临着缩放的一个新问题。 “我们需要水平扩展连续交付,”Airbnb的软件工程师在Kubecon Na 2018的演示期间解释了Selanie Ceblula。
根据Melanie的说法,每个服务都需要自己的连续交付周期。这将使Airbnb能够通过简单地添加新服务来扩展工程师的开发。为了解决缩放,该公司于2017年开始迁移到Kubernetes。
在它的早期,MoNorail的前端是由Jens Vanderhaeghe,Airbnb的高级软件工程师所示的骨库,2018年。2015年,前端迁移到Redux并反应,而后端使用Java服务。单轨码库迅速增长,并且在某些时候,它累积为每日部署的220个更改,30,000个SQL数据库列,155,000个拉杆请求合并到GitHub中,1,254个独特的贡献者。最终,单轨局分为两个主要服务:Hyperloop和Treehouse。
为了减少复杂性和抽象的配置,Airbnb的工程团队依赖于yaml模板而不是文件继承。根据Melanie Ceblula的说法,这也使迁移遗留服务和培训工程师更容易。
“我们学到了很难让我们的工程师难以与文件可视化复杂层次结构。我们更喜欢模仿这一原因。“
建立在模板的概念下减少重复,Airbnb的工程师开始将配置文件存储在Git中。这样,简化了,查看,更新和提交配置文件。此外,Kubernetes部署最佳实践可以轻松设置为默认参数。
“一旦你开始将东西存放在git中,它会解锁这么多机会。当您使用相同的进程开始部署时,您可以使用标准存储和应用配置。“ -melanie ceblula,airbnb
2018年9月,Airbnb的主要生产群集已达到450个节点。到同年12月,这增加了900个节点。若要在这一点上,etcd的疑虑是由Ben Hughes,Airbnb的Ben Hughes,在Kubecon North America 2019年期间的解释。“如果我们的ETCD实例突然出现在内存,那就会很糟糕,”他补充道。
在2018年底之前,AirbnB的Kubernetes部署中的ETCD将被备份并跌倒。这是由多个问题引起的,包括API服务器上的低高速缓存命中率或越来越多的事件。
幸运的是,当ETCD失败时,Kubernetes将停止任何部署和扩展过程。没有工作负载。通过升级到etcd v3数据格式来解决etcd问题。
“许多问题是通过对抗ETCD V2数据格式的限制来引起的。一旦我们升级到etcd v3数据格式并做出了调整的其他后端字节,高达8 GB的其他内容,我们的大多数ETDD问题都消失了。“
到2019年3月,该公司的生产集群在1,800码的规模上再次增加一倍。到4月,这增加到大约2,300个节点。此时,工程团队通过增加节点的数量并选择更多的问题,而选择更多的群集。
Airbnb能够在没有太多问题的情况下过渡到多个月晶环境。这主要是由于SmartStack,Airbnb的服务网格和遗留基础设施没有任何搭配要求。
“我们的任何工作负载都可以在我们站起来的任何群集上运行。我们对集群的看法是,他们是我们可以在我们看到的契合时分配的巨大的计算和记忆库。“ -ben hughes,airbnb
在多个硬盘环境中,在创建期间随机分配给群集的工作负载。为了确保各个集群可以扩展而不接近大小限制,Airbnb的工程师只允许将新服务添加到具有少于400个节点的集群中。
为了确保群集同样执行,Airbnb团队创建了Kube-System,是一个用于部署群集的内部方法。集群组件被写为掌上图表,它们被模板化为单个清单。然后使用Kube-Gen,Airbnb的内部框架部署应用程序。在Kube系统下,部署不到10分钟。
为了更好地组织多个集群,Airbnb另外引入了类型的概念。这些群集类型作为类,而集群则作为实例。
“理想情况下,将服务部署到我们的一个集群的用户不应该能够判断它们所在的群集。 我们希望避免人们试图通过使我们所有的集群更好地在良好的集群上落地服务。“ -ben hughes,airbnb 自从迁移到Kubernetes以来,Airbnb每年达到不少于125,000个生产部署。 自2019年以来,已有50%的公司的服务在36个Kubernetes集群中运行超过7,000多个节点。 这包括超过250个关键服务。 此外,Airbnb团队已添加超过22种群集类型,例如生产,测试,开发,特殊安全组等。