我需要您关于 Java 应用程序的建议。
我有一个应用程序分布在集群上 A 和外部应用程序 B、C、D 等,只有 ~ 50 个。 我的A中是客户请求的流量,总共15个TPS。 对于每个请求,我都会调用应用程序 B、C、D... 但应用程序 B 将速率限制器设置为等于 1 TPS,而应用程序 C 将速率限制器设置为等于 10 TPS。每个应用程序都有自己的TPS
任务是
第 1 部分的实现有两种想法 - Kafka 或数据库。
如果你在Kafka中创建一个公共主题并从中读取消息,根据消息类型对相应的系统进行毒害,那么整个速度将减慢到应用程序B及其1 TPS的速度。
如果你为每个应用程序创建一个单独的主题 - 50 个生产者和 50 个消费者 - 会不会有太多的应用程序资源需要处理?
或数据库 - 写入一个表,其中包含每个应用程序和 50 个调度程序的类型?
告诉我,解决方案、最佳实践、应用示例是什么?
我过去处理过类似的设计任务。这是我的建议。使用数据库表来存储传入的请求而不是排队。在这种情况下,关系数据库比非 SQL 数据库更适合您。在您的请求表中填写以下字段:
new
, in progress
, failed
, success
, ready for retry
)in progress
。请求完成后,将其状态更改为 success
in progress
的请求,如果它们处于该状态的时间超过某个截止时间,则更改请求状态failed
。failed
的所有请求,并且如果重试计数低于最大重试次数(例如 3、4 或 5),则增加重试计数字段并将其状态更改为 ready for retry
。 这是我设计的轮廓。效果非常好。我用这个设计实现的系统在生产中运行得非常可靠。