我正在设计一个React式微服务系统,其中服务之间的通信(请求处理管道)是异步的(使用kafka)。系统将管理虚拟机集群。平移以使用springwebflux作为框架。
例如,创建新vm的请求可能如下所示:
api网关
安全验证
在用户空间中创建虚拟机
为vm安排资源
成功/失败后向用户发送通知
多亏了Kafka,所有的步骤都是顺序的,但都是异步的。步骤由单独的微服务处理。
除此之外,客户机将(可能)想要发出get请求,比如get VM列表,或者关于集群状态的信息。我只是不知道怎么做。我可以想出以下解决办法:
make(同步)获取从api网关到其他服务的请求,聚合数据并返回。
给用户的通知已经包含了所有必需的数据,因此我可以在专用服务中聚合所有用户可查询的数据(保存到数据库),并转发来自api网关的get请求。
1条答案
按热度按时间okxuctiv1#
实际上,我建议不要在这样的服务之间使用管道,而是让一个服务来管理这个传奇并跟踪传奇的状态。
api网关将请求转发给saga管理服务
saga管理服务通知安全验证服务
安全验证服务发布事件
基于来自3的事件,saga管理可以通知vm创建服务
虚拟机创建服务在用户空间中创建虚拟机,发布事件
基于来自5的事件,saga管理可以通知资源调度器服务
资源调度程序服务调度资源,发布事件
根据7中的事件,saga管理层发送通知
saga管理器可以对失败做出响应(例如,如果无法调度资源,则回滚vm创建,或者戳服务以确定关闭它们是否有意义),并有效地解释事件以发布其他服务的额外丰富事件(例如,可以列出vm的服务可能对涉及vm的事件感兴趣)创建和资源调度,而不仅仅是通知),并响应交互式请求。