Kafka + API 服务架构
Kafka + API service Architecture
我正在使用 expressjs 开发 Web 应用程序,并希望利用最新的技术和架构,即 kafka、微服务等 - 前端是 React,正在调用后端微服务来检索数据。
我当前的架构由多个服务组成,作为后端的休息 api 端点,例如用户服务、帐户服务、公司服务等
所有这些服务都运行良好,但必须将 kafka 引入其中,我现在需要在客户端注册帐户时发布一个 'new user' 事件 -> 用户服务发布此事件但是然后现在需要帐户服务来使用它。
我是否应该创建一个单独使用此事件的新订户服务,连接到与帐户服务相同的数据库(尽管这不会破坏每个服务微服务架构 1 个数据库的目的)?或者充当休息 api 端点的帐户服务是否也应该使用 kafka 事件(当有 20 多个微服务时,这是否也会使事情复杂化,花时间检查什么服务正在使用什么事件)?
我想知道在这种情况下最好的方法是什么。
一般来说,微服务将有 rest api 来提供任何 business/CRUD 功能,Kafka 代理将主要用于实现 eventual consistency 以及触发任何操作(由专门的 Kafka 消费者)异步地。
现在回答您的特定问题 -
Should i be creating a new subscriber service individually consume this event, connecting to the same db as the account service (though doesn't this defeat the purpose of1 database per service microservice architecture)?
微服务将拥有自己的数据存储,这可能需要 consistent/in-sync 与属于其他微服务的数据存储。您可以为相关事件创建专门的 Kafka 主题,例如“User_Resource”可能是一个 Kafka 主题,您可以在其中发布与用户资源相关的所有事件(CRUD)。这些主题可以由其他微服务订阅,并且消费者将具有处理这些事件的逻辑(更新帐户服务数据库、触发对其他下游的通知等)。这还将在 CRUD 和业务服务之间创建清晰的分离。
or should the accounts service that is acting as a rest api endpoint also consume the kafka event (doesn't this also then complicate things when theres 20+ microservices, spending time checking what service is consuming what event)?
公开休息端点的服务也可以充当 Kafka producer/consumer。如果您的应用程序是使用 Spring 引导和 spring 云框架构建的,您可以使用 spring-cloud-stream 以最简单的方式处理 Kafka 交互。这些服务不需要担心其他服务的状态,因为它们应该是独立的。
我正在使用 expressjs 开发 Web 应用程序,并希望利用最新的技术和架构,即 kafka、微服务等 - 前端是 React,正在调用后端微服务来检索数据。
我当前的架构由多个服务组成,作为后端的休息 api 端点,例如用户服务、帐户服务、公司服务等
所有这些服务都运行良好,但必须将 kafka 引入其中,我现在需要在客户端注册帐户时发布一个 'new user' 事件 -> 用户服务发布此事件但是然后现在需要帐户服务来使用它。
我是否应该创建一个单独使用此事件的新订户服务,连接到与帐户服务相同的数据库(尽管这不会破坏每个服务微服务架构 1 个数据库的目的)?或者充当休息 api 端点的帐户服务是否也应该使用 kafka 事件(当有 20 多个微服务时,这是否也会使事情复杂化,花时间检查什么服务正在使用什么事件)?
我想知道在这种情况下最好的方法是什么。
一般来说,微服务将有 rest api 来提供任何 business/CRUD 功能,Kafka 代理将主要用于实现 eventual consistency 以及触发任何操作(由专门的 Kafka 消费者)异步地。 现在回答您的特定问题 -
Should i be creating a new subscriber service individually consume this event, connecting to the same db as the account service (though doesn't this defeat the purpose of1 database per service microservice architecture)?
微服务将拥有自己的数据存储,这可能需要 consistent/in-sync 与属于其他微服务的数据存储。您可以为相关事件创建专门的 Kafka 主题,例如“User_Resource”可能是一个 Kafka 主题,您可以在其中发布与用户资源相关的所有事件(CRUD)。这些主题可以由其他微服务订阅,并且消费者将具有处理这些事件的逻辑(更新帐户服务数据库、触发对其他下游的通知等)。这还将在 CRUD 和业务服务之间创建清晰的分离。
or should the accounts service that is acting as a rest api endpoint also consume the kafka event (doesn't this also then complicate things when theres 20+ microservices, spending time checking what service is consuming what event)?
公开休息端点的服务也可以充当 Kafka producer/consumer。如果您的应用程序是使用 Spring 引导和 spring 云框架构建的,您可以使用 spring-cloud-stream 以最简单的方式处理 Kafka 交互。这些服务不需要担心其他服务的状态,因为它们应该是独立的。