我们开始将现有项目迁移到微服务架构中。经过大量的视频/讲座后,我们得出的结论是,服务应该完成一项任务而且只需要完成一项任务,并且应该做得很好。服务应围绕Noun
和Verb
设计。
我们有一个基本上有CRUD操作的实体。现在添加,更新和删除是最少使用的操作,但GET请求与这些操作相比过高。通常,更新/添加/删除由管理员完成。
我们想到的是将CRUD实体分解为两个服务
现在这两个服务都指向mongo中的相同集合或者说一些SQL。
现在,如果EntityCUDService
对集合/表做了一些更改,则EntityLookupService
会失败。
我们听说保持语义版本控制,听起来不错但我们也听说过微服务不应该共享模型/数据源。那么处理这个问题的最佳解决方案是什么呢?我们有大量的获取但是相同实体的数十次更新/添加
非常感谢任何帮助。
答案 0 :(得分:1)
通常,微服务应该管理单个实体。因此,在您的情况下,您可以使用一个微服务来管理实体(用于实体上的各种操作)。现在,如果要在读取和写入操作的基础上再次拆分服务,那么您将遵循CQRS模式。在CQRS中,您可以在读写操作的基础上拆分微服务。所以现在你将有2个服务,一个叫做命令服务,另一个叫同一个实体的被叫查询服务。我建议首先使用一个服务来管理实体,然后根据需要将其拆分为单独的服务以进行读写操作。如果您打算使用CQRS,那么请看一下事件采购,因为它非常适合微服务设计中的CQRS。