Restful API 和事件驱动的微服务
Restful API and Event Driven microservices
在事件驱动的微服务系统中,微服务也是 restful API 是常见的还是最佳实践?
在事件驱动的微服务中,它通常被描述为一些事件被引发,一些其他微服务响应这些事件并执行一些操作。在这种情况下,似乎没有restful API中的“资源”概念。如果一个系统是用restfulAPIs搭建的,这个系统能叫微服务系统吗?
在事件驱动微服务的上下文中,restful 的概念是否仍然适用?当我开始了解更多关于事件驱动的微观知识时,我发现自己对这两者有点混淆,但不确定我是否掌握了正确的概念。
在事件驱动架构中,微服务不通过 REST API 进行通信,而是通过消息传递框架(RabbitMQ、Kafka 等)进行通信。正如您正确指出的那样,微服务会对在他们收听的特定 topic/channel 上收到的消息做出反应。
如果微服务关闭,消息会累积在消息总线中,并由同一个微服务(当它恢复时)或另一个微服务处理。
如果他们要通过 REST API 进行通信并且微服务已关闭,您需要使用指数退避策略重试请求并处理许多其他事情。 This 文章很好地解释了差异。
一个微服务系统完全可以用REST微服务构建。它只是不遵循事件驱动的方法,而更像是一个同步(request/response)模型。您的微服务系统的设计应该与您的应用程序的需求直接相关。
通常使用混合方法:您通过 REST API 与某些微服务通信(例如与 autentication/autorization 微服务),因为您需要尽快从它们那里得到响应。对于其他的,您可以通过事件进行通信,通常是在您有即发即弃事件时,例如日志记录、指标,也许还有存储。
事件驱动和Restful API是两个不同的概念。 Restful API多采用同步通信,事件驱动是异步通信方式。微服务可以是事件驱动的,也可以支持 Restful API,但两者服务于不同的预期。
在事件驱动的微服务系统中,微服务也是 restful API 是常见的还是最佳实践?
在事件驱动的微服务中,它通常被描述为一些事件被引发,一些其他微服务响应这些事件并执行一些操作。在这种情况下,似乎没有restful API中的“资源”概念。如果一个系统是用restfulAPIs搭建的,这个系统能叫微服务系统吗?
在事件驱动微服务的上下文中,restful 的概念是否仍然适用?当我开始了解更多关于事件驱动的微观知识时,我发现自己对这两者有点混淆,但不确定我是否掌握了正确的概念。
在事件驱动架构中,微服务不通过 REST API 进行通信,而是通过消息传递框架(RabbitMQ、Kafka 等)进行通信。正如您正确指出的那样,微服务会对在他们收听的特定 topic/channel 上收到的消息做出反应。
如果微服务关闭,消息会累积在消息总线中,并由同一个微服务(当它恢复时)或另一个微服务处理。
如果他们要通过 REST API 进行通信并且微服务已关闭,您需要使用指数退避策略重试请求并处理许多其他事情。 This 文章很好地解释了差异。
一个微服务系统完全可以用REST微服务构建。它只是不遵循事件驱动的方法,而更像是一个同步(request/response)模型。您的微服务系统的设计应该与您的应用程序的需求直接相关。
通常使用混合方法:您通过 REST API 与某些微服务通信(例如与 autentication/autorization 微服务),因为您需要尽快从它们那里得到响应。对于其他的,您可以通过事件进行通信,通常是在您有即发即弃事件时,例如日志记录、指标,也许还有存储。
事件驱动和Restful API是两个不同的概念。 Restful API多采用同步通信,事件驱动是异步通信方式。微服务可以是事件驱动的,也可以支持 Restful API,但两者服务于不同的预期。