考虑一个基于事件驱动的微服务的web应用程序,它应该具有一些异步web API。AFAIK实现异步http请求/响应的建议方法是用一个say 202 Accepted状态代码和一个location头来响应每个API调用,以便调用者稍后检索结果。
通过这种方式,我们必须为每个请求生成一个唯一的ID (如uuid或guid),并将该id和将来所有相关事件存储在一个持久存储中,以便API调用者可以跟踪其请求的进度。
我的问题是,考虑到我们每秒可能有数万或数十万个请求和响应,应该如何实现这个API层。什么是最有效的架构和工具,使这样一个API的负载?
一种方法是将所有请求和所有相关事件同时存储在数据库和诸如redis的缓存中(仅在特定的有限时间内,如30分钟)。有没有更好的模式/架构/工具?大公司和网站是如何解决这个问题的?在这种情况下,哪个数据库更好?(MongoDB、MySQL、…)
我真的很感谢任何有用的答案,特别是如果你有一些生产经验。
发布于 2018-12-26 19:10:37
非常有效的问题!从架构或工具的角度来看,你应该看看,这是一个开放的分布式跟踪系统,经过Twitter的试验和测试,特别是如果你有一个微服务架构,它真的很有用,跟踪你所有的请求/响应。它还包括存储选项,包括内存、JDBC (mysql)、Cassandra和Elasticsearch。
如果您的微服务使用spring-boot,那么它很容易插拔。
即使你对Zipkin并不完全信服,架构也是值得研究的。从生产经验来看,我用过它,它真的很有用。
https://stackoverflow.com/questions/53920414
复制相似问题