我正在计划使用事件源的微服务模型。为了实现高可扩展性和高吞吐量处理能力,我将使用Kafka作为微服务的消息代理。
此时,我对模型的实现有疑问,以便能够获得Kafka主题和分区的好处。我的模型需要满足一些要求:
嗯,考虑到这些要求,我已经尝试了一个模型:
我的问题:
修改
我为我的客户提出的新建议:
答案 0 :(得分:2)
这个模型做了一些域的耦合?网关正在验证子资源ID以确保一个Elasticsearch数据库中的数据一致性(A的情况指向B)。
您使用以下句子回答了自己的问题:
所有读取请求均由"微服务网关"
处理
如果确实如此,您的系统根本没有域分离。事实上,你有一个需要了解所有域名的神 - 网关。
网关应该被限制为特定于域的服务无法实现的非常专用的目的(例如安全性,路由/代理,负载平衡,整合,弹性等)。
我不知道这个模型是否适合报告请求,有一些复杂的报告使用来自用户的输入参数处理大量数据,从他的角度来看,操作必须是"同步& #34; (请求/响应REST)
我会将报告视为一项单独的服务,理想情况下使用现有服务来获取所需的任何信息。根据您的域和要求,您可能希望在服务中拥有一些专用的非公共端点,或者您可能希望直接访问数据库(例如,使用图形数据库上的专门查询)。
请求/新状态的验证是否是业务逻辑的一部分(与DDD相关)?如果是这样,我的模型很难将它们分成两个微服务?
这取决于验证的类型。要从域的角度验证正确性,您需要相应的服务。如果您想验证系统其他部分可能负责的其他事情(记录,授权,阻止恶意企图,......)
*为了您的编辑:
- 不要让网关充当微服务的一部分,而是让网关仅用于:路由(微服务发现),平衡和身份验证(调用专用微服务进行身份验证/授权)
醇>
关于这一点很少: