在进行严格的研究和分析后,我终于到达了使我感到困惑的点"是微服务模式或架构"。有人说,这是一种进化的模式,以解决整体应用的解决方案,因此设计模式毫无疑问,这是一个架构,讲述了他们的发展,管理,可伸缩性,自动及其;全栈。我欢迎任何想法或建议。
微服务可以最好地描述为建筑风格。除了建筑决策外,该样式还包括组织和过程相关的注意事项。
建筑元素包括:
- 按业务关注的组成。
- 严格的持久性脱钩。
- 定义明确的接口和通信。
- 目标尺寸较小。
组织元素包括:
- 团队组织围绕组件(康威定律(。
- 团队规模限制(两只比萨团队(。
过程相关元素包括:
- 较少集中的治理。
- 较小,更频繁的版本。
- 技术决策的自由度更高。
- 面向产品的开发(敏捷,MVP,精益等(。
有关更多详细信息,我建议阅读Martin Fowler的文章。
我将其描述为需要应用程序功能分解的软件架构样式。
通常,它涉及单片应用程序被分解为多个较小的服务,每个服务都在其自己的档案中部署,然后使用标准轻量级通信作为一个应用程序组成,例如在HTTP上休息或某些异步通信(当然,当然,,在某个时候,微服务是从头开始写的(。
微服务中的"微观"一词没有指示服务中的代码行,它仅表示范围仅限于单个功能。
每个服务都是完全自主且全堆栈的。因此,改变服务实现对其他服务使用明确定义的接口进行通信时没有影响。这种申请有几个优点,但它不是免费的午餐,并且需要大量的努力。
重要的是要专注于每个服务必须具有的属性:
- 单一目的 - 每个服务都应专注于一个单一目的并做得好。
- 松散的耦合 - 服务彼此了解甚少。更改一项服务不需要更改其他服务。服务之间的沟通应仅通过公共服务界面进行。
- 高凝聚力 - 每种服务都将所有相关的行为和数据封装在一起。如果我们需要构建一个新功能,则所有更改应仅本地化为一项服务。