您的位置:首页 > 运维架构 > 网站架构

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

2017-12-12 09:38 891 查看

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

 

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

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

 

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

 

将所有代码保持在相似的成熟度级别

 

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

 

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

 

为每个微服务做一个单独的编译,这样就会在版本控制系统中添加这次编译的版本信息文件。这有时会导致相同微服务在版本控制系统中有很多相似的信息。这就使得旧版本代码清理变得更加困难(因为您需要更仔细地验证一个版本是否不再被使用),但是在构建新的微服务时添加版本是很容易,这是一个可以接受的交易,因为我们的目的还是快速交付。

 

在容器中部署

 

在容器中部署微服务非常重要,因为这意味着您只需要一个工具就可以部署所有的东西。只要微服务在一个容器中,部署工具就知道如何部署它。容器是什么并不重要。但是DocKer 是值得推荐的,因为Docker似乎很快就成为了容器技术的实际标准。

 

不要依赖单个服务器

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

 

你要把服务器想象为牛,而不是宠物。如果你的生产环境中有一个专门的功能,你知道它的名字,当它崩溃的时候每个人都会收到影响,这样你就把这个服务器当成一个宠物。相反,你应该把你的服务器想象为一群牛,你关心的是你喝了多少加仑的牛奶。如果有一天你发现你的牛奶比平时少了,你只需要发现哪些奶牛产的不是很好,取而代之就好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息