设计用于预订机票的REST API微服务

时间:2019-04-19 02:14:56

标签: microservices

我正在尝试确定与航班预订有关的微服务的总体组件交互和REST API交互。

用户选择一个飞行座位并向微服务API提供详细信息(例如:

bookFlightTickets(FlightBookingRequest request) {
...}

可以说,这项服务需要暂时保留预订X分钟,直到用户完成付款系统为止。

从广义上讲,所需的微服务将是:

1)FlightSystem微服务(返回航班/座位的详细信息) 2)付款微服务 3)航班预订微服务

bookFlightTickets API的外观如何?由于它需要暂时保留保留,因此它将是异步微服务吗?

对整体流程有何建议?谢谢

1 个答案:

答案 0 :(得分:1)

首先,我建议您看一下.NET Microservices: Architecture for Containerized .NET Applications,尽管它是由Microsoft编写的,但它具有许多常规的微服务设计方法以及许多其他书籍的有用链接。

根据您的解释,航班预订微服务应会收到预订并保留一段时间,以便用户可以付款。

我对微服务有机化的想法。

  1. 航班预订微服务可能有POST个预订端点(例如/api/v1.0/reserve
  2. 我认为它也应该向DB写预订,以便FlightSystem微服务返回已占用的预订座位,以防止重复预订。它应在数据库中的预留座位上设置预留日期,以便如果未及时支付座位,它将再次变为空缺。这可以通过background service来实现。我认为将预留的座位放在缓存中是个坏主意。如果重新启动微服务,保留席位可能会显示为空缺,这可能会导致不一致的用户体验
  3. 如果支付不成功,微服务支付可以永久保留预订。

您可以将数据库分为以下几部分(每个微服务都有自己的数据库是个好主意)

  1. 容纳空缺/保留座位的DB。 FlightSystem微服务可以对此负责。
  2. 带有航班预订微服务的临时预订座位DB可以负责
  3. 付款服务可能会保留付款数据库

服务可以establish async link(如AMQP)相互通信。 FlightSystem将要求使用AMQP的航班预订微服务提供临时保留的座位,以正确显示已占用的座位。如果付款成功,付款服务将告知Flight booking microservice永久保留座位。依此类推。