任务:注册某些对象,并以一定的频率向它们请求信息,以便随后根据请求输出给用户。
最初的想法是将主题领域划分为 2 个上下文:
- 有关对象的当前信息的上下文;
- 调查背景
轮询微服务将查询数据并使用轮询结果发布事件。反过来,有关对象的当前信息的微服务将获取事件并更新其本地数据库。
但是使用这种方法,以下几点让我感到困惑:上下文之间的数据重复。在轮询上下文中,目标对象可以包含一组稍微不同的属性:轮询间隔、优先级等。但是,关键数据集(被轮询对象返回的内容)仍然与信息上下文(显示相同的数据)相交)。
看了一本关于 msdn 的好书的一部分,其中微服务被视为一种逻辑结构,有时可以由具有共享数据库访问权限的多个服务(物理实现)组成: https ://docs.microsoft.com/en-us/dotnet /architecture/ microservices/architect-microservice-container-applications/logical-versus-physical-architecture
根据这篇文章,建议使用第二种方法:
将上下文组合成一个微服务,包括:
- 显示对象信息的服务
- 轮询服务 - 更新有关对象的信息
问题:根据所描述的,就微服务架构而言,哪种方法更可取?
UPD将来需要显示从请求的对象累积的一段时间内的统计信息(Statistics Service)。但是对于当前的信息服务来说,如此广泛的数据是完全没有必要的。
为了解决您的问题,最好使用事件驱动架构。特别是,该任务非常适合使用 RabbitMQ 之类的消息代理来交换事件。
该架构由以下组件组成:
信息交换过程构建如下:
因此,您将获得以下好处:
我们也有一些缺点: