Netflix的设计微服务体系架构的最佳实践

Netflix在微服务上作的很出色,他的开发团队为设计和实现微服务体系结构创建了几个最佳实践。他提出的最佳实践值得借鉴,下面对这些实践作一些介绍。

 

为每一个微服务建立一个单独的数据存储

不要在微服务中使用共同的后端数据存储。每一个微服务的团队选择最适合该服务的数据库。此外,对于单个数据存储,共享数据库结构是很是容易的,同时也减小工做的重复。最后,若是一个团队更新了数据库结构,其余使用该结构的服务也必须更改。html

 

分离数据可能会使数据管理变得更加复杂,由于单独的存储系统很容易在本地被更改,特别是数据的外键也能够被更改,可是实现同步数据却须要额外的工做,这就使得数据变得不一致。您须要添加一个工具来执行主数据管理(MDM),经过在后台操做来查找和修复数据的不一致。你能够写本身的工具或者购买商业产品。许多商业关系数据库管理系统提供这样的产品。web

 

将全部代码保持在类似的成熟度级别

 

将微服务中全部代码保持一个类似的成熟度和稳定性。换句话说,若是您须要在已部署的微服务中添加或重写某些代码,那么最好的方法一般是将新的或更改的代码建立成一个新的微服务,从而保留现有的微服务。经过这种方式,您能够迭代地部署和测试新的代码,直到它没有Bug,而且最大限度地提升效率,同时又不会在现有的微服务中带来系统崩溃或性能降低的风险。一旦新的微服务与原来同样稳定,若是它们确实执行同一个单独的功能,或者合并后能够带来更高的效率,您就能够将它们合并在一块儿。然而,在Cockcroft的经验中,更常见的是,你应该拆分微服务,以防止他变大。数据库

 

为提升交付的速度为每一个微服务作一个单独的编译

 

为每一个微服务作一个单独的编译,这样就会在版本控制系统中添加此次编译的版本信息文件。这有时会致使相同微服务在版本控制系统中有不少类似的信息。这就使得旧版本代码清理变得更加困难(由于您须要更仔细地验证一个版本是否再也不被使用),可是在构建新的微服务时添加版本是很容易,这是一个能够接受的交易,由于咱们的目的仍是快速交付。后端

 

在容器中部署

 

在容器中部署微服务很是重要,由于这意味着您只须要一个工具就能够部署全部的东西。只要微服务在一个容器中,部署工具就知道如何部署它。容器是什么并不重要。可是DocKer 是值得推荐的,由于Docker彷佛很快就成为了容器技术的实际标准。服务器

 

不要依赖单个服务器

对待服务器,特别是那些运行客户端代码的服务器,把他们设计成能够相互代替的架构。它们都执行相同的功能,没有轻重之分,因此您不须要单独关注它们。你惟一关心的是有足够多的服务器来提供你须要的服务,你可使用自动伸缩来调整服务器数量。若是一个中止工做,它会自动被另外一个取代。避免将服务依托于那些脆弱的系统,不要依赖于单个服务器来执行特定的功能。架构

 

你要把服务器想象为牛,而不是宠物。若是你的生产环境中有一个专门的功能,你知道它的名字,当它崩溃的时候每一个人都会收到影响,这样你就把这个服务器当成一个宠物。相反,你应该把你的服务器想象为一群牛,你关心的是你喝了多少加仑的牛奶。若是有一天你发现你的牛奶比平时少了,你只须要发现哪些奶牛产的不是很好,取而代之就好。svg