用于事件驱动架构的 API 网关
Posted
技术标签:
【中文标题】用于事件驱动架构的 API 网关【英文标题】:API gateway for event-driven architecture 【发布时间】:2017-09-21 18:36:37 【问题描述】:我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如 Kafka)相互连接的新服务。
下一阶段是创建 API 端点,用于通过 Api 网关在移动应用和微服务之间进行通信。
开发 API 网关以将数据传输到微服务/从微服务传输数据的最佳解决方案是什么?
-
使用消息系统作为请求-回复之一(将请求转换为
API网关进入消息命令,等待消息响应
有状态或必要数据的系统)?
在必要的微服务上创建 REST 端点(例如使用REST.li)以发送或
通过网关获取数据;使用消息系统来保证数据的一致性
基于微服务产生的事件?
感谢您的建议和一些想法
【问题讨论】:
面临同样的问题。我有几个服务在rabbitmq上交谈。我需要一个网关来与系统交互。有兴趣了解您的解决方案吗? 【参考方案1】:我想说第二个选项在很多情况下听起来更合理。
事件驱动解决方案主要适用于有多个后续进程的情况,因此创建实体可以通过Rest端点,而该实体的进程可以通过事件异步。
为了说明,支付流程可能如下所示:
1-) API GW -> 支付休息控制器 -> 支付服务 - 创建支付 支付服务创建支付实体,然后发布“payment.created”事件。 2-)队列->支付流控制器->服务-更新支付 支付流控制器使用“payment.created”事件,然后检查余额,并将支付实体更新为已确认。更新实体后,它可以发送“payment.confirmed”事件。 ...
另一方面,我的意思是第一种选择,因为您需要了解所有交换或队列,所以很难维护一个非常解耦的系统。
但是,我认为在某些情况下结合使用两种解决方案可能会更好。例如,您的 API 被一个流量非常大的客户端公开,并且 API 的任务非常明确。在这种情况下,使用 MQ 作为此 API 的缓冲区将是完美的。
【讨论】:
【参考方案2】:这取决于您采用的架构。 如果我理解了这个问题,您已经有了带有 kafka 消息服务器的代理。 我认为您可以使用架构发布/订阅异步消息。
如果在后端架构中遗留系统支持 SLA,在这种情况下,您可以使用集成所需的其余端点。
这是如果在架构中使用 API 网关模式的好处。
非常感谢。
【讨论】:
以上是关于用于事件驱动架构的 API 网关的主要内容,如果未能解决你的问题,请参考以下文章
Chris Richardson微服务翻译:微服务之事件驱动的数据管理
网关技术选型,为什么选择 Openresty ?事件驱动协程...
ASP.NET Core Web API下事件驱动型架构的实现:一个简单的实现
深度剖析 Apache EventMesh 云原生分布式事件驱动架构