【问题标题】:Designing REST API microservices for booking a flight ticket设计用于预订机票的 REST API 微服务
【发布时间】:2019-09-09 08:47:15
【问题描述】:

我正在尝试识别处理航班预订的微服务的整体组件交互和 REST API 交互。

用户选择一个航班座位并将详细信息提供给微服务 API(例如:

bookFlightTickets(FlightBookingRequest request) {
...}

比方说,这项服务需要暂时保留预订 X 分钟,直到用户完成支付系统。

从更广泛的角度来看,所需的微服务是:

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

bookFlightTickets API 是什么样的?既然需要临时持有预留,那会是异步微服务吗?

对整体流程有什么建议吗?谢谢

【问题讨论】:

    标签: microservices


    【解决方案1】:

    首先我建议你看看.NET Microservices: Architecture for Containerized .NET Applications尽管它是由微软编写的,它有很多通用的微服务设计方法和一堆有用的其他好书的链接。

    根据您的解释,航班预订微服务应接收预订并将其保留一段时间,以便用户能够付款。

    关于微服务组织的我的想法。

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

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

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

    服务可以establish async link(如AMQP)相互通信。 FlightSystem 将使用 AMQP 向航班预订微服务询问临时预留座位,以正确显示已占用座位。支付成功后,支付服务将告知航班预订微服务永久保留座位。以此类推。

    【讨论】:

    • 感谢您提供详细信息。我一直在阅读有关事件驱动的微服务方法的文章。我不确定它是否在所有地方都非常普遍,或者公司才刚刚开始使用这种方法。 W.r.t 在 DB 中为临时保留设置预订日期,另一种选择是为该行设置一个 TTL,以便如果用户未在给定时间内预订,则该行过期。
    猜你喜欢
    • 2017-12-13
    • 2022-06-28
    • 2019-04-09
    • 2019-04-12
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    相关资源
    最近更新 更多