用于事件驱动架构的 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 云原生分布式事件驱动架构

深度剖析 Apache EventMesh 云原生分布式事件驱动架构

深度剖析 Apache EventMesh 云原生分布式事件驱动架构