Domain driven design 微服务和服务粒度

Domain driven design 微服务和服务粒度,domain-driven-design,microservices,Domain Driven Design,Microservices,我以前从未使用过微服务体系结构,在我阅读的内容中,有一些重要的东西仍然不清楚 在微服务体系结构中,服务是单个端点还是具有多个端点的单个模块 端点是细粒度的还是粒度更高的?我一开始认为端点是细粒度的,这就是为什么会有使API过于健谈的风险 我现在发现一些文章说,在微服务体系结构中,服务与“有界上下文”相关联。在我看来,有界上下文在API中需要的不仅仅是一个端点。我建议查看以下两本书- 和。非常适合所有想开始微服务之旅的人。这取决于您希望体系结构的粒度。从理论上讲,为了获得最大的粒度,并根据单一责任

我以前从未使用过微服务体系结构,在我阅读的内容中,有一些重要的东西仍然不清楚

在微服务体系结构中,服务是单个端点还是具有多个端点的单个模块

端点是细粒度的还是粒度更高的?我一开始认为端点是细粒度的,这就是为什么会有使API过于健谈的风险


我现在发现一些文章说,在微服务体系结构中,服务与“有界上下文”相关联。在我看来,有界上下文在API中需要的不仅仅是一个端点。

我建议查看以下两本书-
和。非常适合所有想开始微服务之旅的人。

这取决于您希望体系结构的粒度。从理论上讲,为了获得最大的粒度,并根据单一责任原则,您应该在每个有界上下文中为每个聚合创建一个微服务。这意味着每个命令都应该有一个端点(我假设每个端点都是通过一个URI到达的,即
https://server/place/order

如果您使用CQRS架构,那么对于读取/查询端,您还可以为每个读取模型提供一个微服务;通过这种方式,您可以独立扩展每个读取模型(使用DB复制或整个microservice实例复制)

在微服务体系结构中,服务是单个端点还是具有多个端点的单个模块

从概念上讲,微服务只是服务,也就是说它们只是处理消息的对象。消息传入时,服务决定是否更新自己的内存黑盒,消息传出时

您放在微服务前面的集成层可能有几个不同的“端点”,以帮助您传递要处理的新消息

端点是细粒度的还是粒度更高的

无论哪种方式—使用一个端点向服务发送突发消息基本上没有什么错

我现在发现一些文章说,在微服务体系结构中,服务与“有界上下文”相关联


是的,我也是。我没有看到任何证据表明它们的意思是埃里克·埃文斯(Eric Evans)最初在蓝皮书中描述的“有界上下文”。

微服务体系结构(MSA),这是什么意思?首先,它意味着我们谈论的是架构而不是实现,其次,它意味着我们谈论的是微观层面的东西。在面向服务中,如果一个软件服务的功能非常狭窄,那么它就是一个微型服务。这意味着服务只有一个职责,或者换句话说,服务将足够小(从业务角度来看),可以在没有服务器端状态管理的情况下接收请求和响应。更温和地说,我们的微服务需要有一定的上下文限制。让我用一个简单的例子来说明一下,考虑开发一种支付服务,传统上这种服务将提供信用支付、债务支付、支付PAL、网络货币等,而MSA中的每一个都将是独立的服务。 您可以在我的代码项目文章中阅读更多内容:


看一看这段视频:TBH我并不特别在意命名:微、宏、大、小、soa、balboa。。。不管怎样:)---只要你有合理的部署选项和打包,你就可以开始了。每BC一个端点就可以了。如果您想创建更精细的端点,那么也可以。在它背后,您的所有域仍将围绕BCs构建。例如,RESTAPI是一个集成层,客户端将与之交互。它可能更容易通过进程、BC、AR或函数公开。从部署和客户机的角度来看,任何合理的做法都应该ok@EbenRoux-我仍然认为理解称为微服务的体系结构模式很重要。在您的回答中,您将SOA和微服务放在一起,它们是不同的东西。我正试图更好地理解它们的区别。微服务和SOA只是概念,在这方面相当广泛。如果您的目标是通过一些集成层(如RESTAPI)公开您的业务功能,那么它属于“面向服务”的范畴。理想情况下,解耦和独立版本控制(维护)是我们追求的目标。与SOA一样,您将发现很难为微服务确定一个合适的定义。有许多技术和技巧可以帮助交付SOA,正如微服务的交付一样:)我想我们又回到了“视情况而定”…我读了一本书,书中说微服务架构没有中间件(集成级别)。他们也不交换信息。不过可能有API级别。谢谢你的建议。这两个链接都很有用。但这并不是我问题的答案:)