Netflix的设计微服务体系架构的最佳实践
2017-12-12 09:38
891 查看
Netflix在微服务上做的很出色,他的开发团队为设计和实现微服务体系结构建立了几个最佳实践。他提出的最佳实践值得借鉴,下面对这些实践做一些介绍。
为每个微服务创建一个单独的数据存储
不要在微服务中使用共同的后端数据存储。每个微服务的团队选择最适合该服务的数据库。此外,对于单个数据存储,共享数据库结构是非常容易的,同时也减少工作的重复。最后,如果一个团队更新了数据库结构,其他使用该结构的服务也必须更改。分离数据可能会使数据管理变得更加复杂,因为单独的存储系统很容易在本地被更改,特别是数据的外键也可以被更改,但是实现同步数据却需要额外的工作,这就使得数据变得不一致。您需要添加一个工具来执行主数据管理(MDM),通过在后台操作来查找和修复数据的不一致。你可以写自己的工具或者购买商业产品。许多商业关系数据库管理系统提供这样的产品。
将所有代码保持在相似的成熟度级别
将微服务中所有代码保持一个相似的成熟度和稳定性。换句话说,如果您需要在已部署的微服务中添加或重写某些代码,那么最好的方法通常是将新的或更改的代码创建成一个新的微服务,从而保留现有的微服务。通过这种方式,您可以迭代地部署和测试新的代码,直到它没有Bug,并且最大限度地提高效率,同时又不会在现有的微服务中带来系统崩溃或性能下降的风险。一旦新的微服务与原来一样稳定,如果它们确实执行同一个单独的功能,或者合并后可以带来更高的效率,您就可以将它们合并在一起。然而,在Cockcroft的经验中,更常见的是,你应该拆分微服务,以防止他变大。
为提高交付的速度为每个微服务做一个单独的编译
为每个微服务做一个单独的编译,这样就会在版本控制系统中添加这次编译的版本信息文件。这有时会导致相同微服务在版本控制系统中有很多相似的信息。这就使得旧版本代码清理变得更加困难(因为您需要更仔细地验证一个版本是否不再被使用),但是在构建新的微服务时添加版本是很容易,这是一个可以接受的交易,因为我们的目的还是快速交付。
在容器中部署
在容器中部署微服务非常重要,因为这意味着您只需要一个工具就可以部署所有的东西。只要微服务在一个容器中,部署工具就知道如何部署它。容器是什么并不重要。但是DocKer 是值得推荐的,因为Docker似乎很快就成为了容器技术的实际标准。
不要依赖单个服务器
对待服务器,特别是那些运行客户端代码的服务器,把他们设计成可以相互代替的架构。它们都执行相同的功能,没有轻重之分,所以您不需要单独关注它们。你唯一关心的是有足够多的服务器来提供你需要的服务,你可以使用自动伸缩来调整服务器数量。如果一个停止工作,它会自动被另一个取代。避免将服务依托于那些脆弱的系统,不要依赖于单个服务器来执行特定的功能。你要把服务器想象为牛,而不是宠物。如果你的生产环境中有一个专门的功能,你知道它的名字,当它崩溃的时候每个人都会收到影响,这样你就把这个服务器当成一个宠物。相反,你应该把你的服务器想象为一群牛,你关心的是你喝了多少加仑的牛奶。如果有一天你发现你的牛奶比平时少了,你只需要发现哪些奶牛产的不是很好,取而代之就好。
相关文章推荐
- 领域驱动设计之体系架构模式交互过程与最佳实践
- 大型分布式网站架构设计与实践 第一章《面向服务的体系架构(SOA)》
- ActiveMQ架构设计与最佳实践
- 海尔电商峰值系统架构设计最佳实践 Dubbo
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
- 微服务架构的两大解耦利器与最佳实践 推荐
- 超大规模系统架构设计的一般原则(最佳实践)
- 有容云:微服务架构最佳实践课堂PPT- 微服务容器化的挑战和解决之道
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
- 轻量级微服务架构及最佳实践
- 值得关注的议题:12306,架构设计最佳实践
- 面向服务体系架构的业务规划和建模方法系列之四--实践案例介绍“汽车贷款 推荐
- App 后台架构设计方案 设计思想与最佳实践
- 海尔电商峰值系统架构设计最佳实践
- 架构设计最佳实践之DRY
- 架构设计最佳实践与必备素养
- 微服务架构在Netflix的应用:架构设计的经验教训
- 微服务架构设计实践系列之一:序言
- .net core实践系列之短信服务-架构设计
- 微服务架构上云最佳实践