原文:From Monorail to Monorepo: Airbnb’s journey into Microservices
Airbnb 最开始是一个 single repo Ruby on Rails 项目。前端用过 backbone 和 react,后端有Ruby 和 Java。
2014年之前的 deployment workflow 是:
- Code review & CI
- merge to master
- staging, manual test
- production
用于支持 deploy 的内部项目:
- deployment dashboard:这是一个内部开发的 CI。现在所有的服务都用这个 dashboard 来部署。dashboard 还可以实现回滚。功能上类似于 Netflix 的 Spinnaker。
- SCRAM: 用于检测、记录服务出现的exception。系统通过机器学习来预测哪些部署可能出现问题。类似于 bugsnag 和 honeybadger 这样的付费服务
- 合并队列:代码合并到 master 的流程是,提交 Pull Request,代码审查通过,然后提交一个合并请求。这个请求会进入一个队列。
![](https://img.haomeiwen.com/i26988/35e23120ff633572.png)
![](https://img.haomeiwen.com/i26988/d65c826d088a85f6.png)
随着这个single repo project 不断变大,Airbnb 开始采用 microservices architecture。
- 拆分为 前端 和 后端 两个部分
- 前端使用 react,但page 是使用 server side rendering 传回给前端的
后端
- Airbnb 有700+ 个 microservices
- synchronous communication 使用 thrift schema,比 json 的格式要求更严谨
- asynchronous communication 使用 kafka
![](https://img.haomeiwen.com/i26988/03d38b153eaf90c6.png)
架构中使用的工具
- service generation: 用于创建一个 service,并自动生成了 thrift 配置
- 将所有配置文件放在一个 repo
- 使用 Kubernetes 部署服务,与deployment dashboard 集成
- microservice 测试工具。比如 API 测试,schema 检验,Selenium 测试
- infrastructure as code, using Kubernetes, Amazon EKS
网友评论