【问题标题】:Kafka + API service ArchitectureKafka + API 服务架构
【发布时间】:2021-05-19 03:35:02
【问题描述】:

我正在使用 expressjs 开发一个 Web 应用程序,并希望利用最新的技术和架构,即 kafka、微服务等 - 前端是 React,并正在调用后端微服务来检索数据。

我目前的架构,由多个服务组成,作为后端的 REST API 端点,例如用户服务、帐户服务、公司服务等

所有这些服务都运行良好,但必须将 kafka 引入组合中,我现在需要在客户注册帐户时发布“新用户”事件 -> 用户服务发布此事件但现在需要使用它的帐户服务。

我是否应该创建一个新的订阅服务单独使用此事件,连接到与帐户服务相同的数据库(尽管这不会破坏每个服务微服务架构一个数据库的目的)?或者充当rest api端点的帐户服务也应该消耗kafka事件(当有20多个微服务时,这难道不会使事情复杂化,花时间检查什么服务正在消耗什么事件)?

我想知道在这种情况下最好的方法是什么。

【问题讨论】:

    标签: express apache-kafka microservices


    【解决方案1】:

    一般来说,微服务将具有用于提供任何业务/CRUD 功能的 rest api,而 Kafka 代理将主要用于实现eventual consistency 以及异步触发任何操作(由专门的 Kafka 消费者)。 现在回答您的特定问题 -

    我是否应该创建一个新的订阅服务单独使用此事件,连接到与帐户服务相同的数据库(尽管这不会破坏每个服务微服务架构一个数据库的目的)?

    微服务将拥有自己的数据存储,可能需要与属于其他微服务的数据存储保持一致/同步。您可以为相关事件创建专用的 Kafka 主题,例如“User_Resource”可以是一个 Kafka 主题,您可以在其中发布与用户资源相关的所有事件(CRUD)。这些主题可以被其他微服务订阅,消费者将拥有处理这些事件的逻辑(更新帐户服务数据库,触发其他下游的通知等)。这还将在 CRUD 和业务服务之间建立清晰的分离。

    或者,作为 rest api 端点的帐户服务是否也应该使用 kafka 事件(当有 20 多个微服务时,这是否也会使事情复杂化,花时间检查什么服务正在消耗什么事件)?

    一个暴露了一个 rest 端点的服务也可以作为一个 Kafka 生产者/消费者。如果您的应用程序是使用 Spring Boot 和 Spring Cloud 框架构建的,则可以使用 spring-cloud-stream 以最简单的方式处理 Kafka 交互。这些服务不需要担心其他服务的状态,因为它们应该是独立的。

    【讨论】:

    • 非常感谢您抽出宝贵时间撰写一篇内容丰富的文章! @nakulshukla
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2015-08-12
    • 2023-03-04
    • 2019-11-09
    • 2020-06-25
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多