对于任何有真实世界经验的人来说,把一个单体分解成不同的模块和服务。
我已经阅读了马丁·福勒( Martin )的MonolithFirst博客文章,我提出了这个问题。当把一个单体分解成微型服务时,方程中的“大小”元素是我思考得最多的元素。具体来说,如何将一元应用程序(我们正在讨论的是2001: A Space;就像它那么老和那么大)分解到微服务中,而不会变得过于细粒度或过于单一。最终目标是创建能够独立升级和独立缩放的独立模块。
根据个人经验推荐的最佳实践是什么?
发布于 2016-05-17 03:30:39
经验法则是在有界上下文的基础上打破一元论。定义有界上下文的最常见方法是使用BU (业务单元)。例如,进行实际支付的模块主要是一个单独的BU。
要考虑的第二件事是微型服务带来的间接费用。在完全中断服务之前,您应该分析硬件、监控和子部件。我看到的是人们从monolith中拿出较小的微服务,而不是去写作,比如10项新服务,并对monolith进行贬值。
我的建议是采取渐进的办法。以第一个BU为例,它是从单块石上开始工作的。这也将给整个团队的学习曲线。
发布于 2018-03-04 17:33:08
您应该清楚地区分子域区域(有界上下文)和您的域。
通常(如果您的体系结构很好的话),您已经在您的单核应用程序中有了一些独立的组件,它们负责每个子域。这些组件在一个流程中相互交互(在monolith应用程序中),您应该考虑如何将它们放到不同的进程中。当然,当将一体机的各个部分移动到微服务时,您需要进行大量的重构。
请记住,每个微服务都负责某些子域。
我强烈建议您学习域驱动的设计。
还可以学习CQRS模式
在开始时,您还应该决定您的micservices将如何相互交互。有几种选择:
您可以组合这些选项,例如,可以通过Dispatcher Service处理查询请求,通过消息总线处理命令和事件。
根据我的经验,最大的问题将是离开单一的数据库,该数据库通常使用monolith应用程序。
此外,还有一些良好做法:
一些旅游业应用的子域(有界上下文)的例子。每个有界上下文都可以由一个微服务来服务。
发布于 2018-03-05 06:06:23
我们也开始了一段时间的旅程,我开始为同样的事情写博客系列:https://dzone.com/articles/how-i-started-my-journey-in-micro-services-and-how。
基本上我理解的是用不同的方法解决我的问题。微服务,我需要一个设计框架,领域驱动的设计给(领域驱动的设计蒸馏书Vaugh Vernon)。
然后实现设计(使用CQRS和事件源和.)我需要一个提供上述所有支持的框架。
我觉得拉格姆对此很有好处。(最终,是其他一些选择)。
基于Microsoft的领域驱动设计的Microservices领域分析示例:https://learn.microsoft.com/en-us/azure/architecture/microservices/domain-analysis
另一个分析是:http://cqrs.nu/tutorial/cs/01-design
在阅读了域驱动设计之后,我认为lagom和上面的链接将帮助您构建一个端到端的应用程序。如仍有疑问,请提出:)
https://stackoverflow.com/questions/37213471
复制相似问题