【问题标题】:Efficient architecture/tools for implementing async web API用于实现异步 Web API 的高效架构/工具
【发布时间】:2019-05-24 00:41:59
【问题描述】:

考虑一个基于事件驱动的微服务的 Web 应用程序,它应该具有一些异步 Web API。 AFAIK 实现异步 http 请求/响应的建议方法是使用202 Accepted 状态代码和位置标头响应每个 API 调用,以便调用者稍后检索结果。

这样,我们必须为每个请求生成一个唯一的 ID(如 uuidguid),并将该 ID 和所有相关事件存储在一个持久存储中,以便 API 调用者可以跟踪其请求的进度。

我的问题是考虑到我们每秒可能有数万或数十万个请求和响应,应该如何实现这个 API 层。在这种负载下制作此类 API 的最有效架构和工具是什么?

一种方法可能是将所有请求和所有相关事件存储在数据库和像 redis 这样的缓存中(仅限于某个有限的时间,比如 30 分钟)。 有没有更好的模式/架构/工具?大公司和网站如何解决这个问题? 哪种数据库更适合这种情况? (MongoDB、MySQL、……)

如果您有一些生产经验,我真的很感激任何有用的答案。

【问题讨论】:

    标签: rest asynchronous database-design architecture microservices


    【解决方案1】:

    非常有效的问题!在架构或工具方面,您应该查看zipkin,这是一个由 Twitter 尝试和测试的开放分布式跟踪系统,特别是如果您有微服务架构,跟踪您的所有请求/响应非常有用.它还包括存储选项,包括内存、JDBC (mysql)、Cassandra 和 Elasticsearch。

    如果您将 spring-boot 用于您的微服务,那么它很容易插入。
    即使您不完全相信 Zipkin,架构也值得研究。从生产经验来看,我用过它,它真的很有用。

    【讨论】:

    • 感谢@Yogendra 的回答。 Web API 客户端可以使用 zipkin 来获取他们过去请求的结果吗?我认为它已被用于出于管理目的记录和分析请求。
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2017-05-07
    • 2012-12-16
    • 2015-06-26
    • 2013-08-06
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多