消费服务哪种结构,可以提高消费速度与效率

查看 14|回复 0
作者:dnjat   
环境
springboot, rocketmq, nacos, feign
定义
  • [消费服务 A], rocketmq 消费服务, 触发任务处理
  • [数据服务 B], 本地数据库, 相关业务逻辑
  • [分析服务 C], 对接三方服务, 发送本地数据, 返回结果. 三方结果有同步, 有异步.

    流程
  • [消费服务 A]触发事件, [数据服务 B]提供数据, 状态更新. [分析服务 C]通过第三方处理数据, 返回结果写入[数据服务 B].

    关键因素
  • 一次任务,由[数据服务 B]提供任务数据列表(多条), [分析服务 C]因三方接口限制, 数据不能一次性发送给第三方, 需要多次发送. 总请求是 数据条数*n, [分析服务 C]处理一条数据总体时间长.
  • [消费服务 A]需要等待任务执行完, 确定是消费重试, 还是消费成功.

    迷惑
  • 结构 1 [消费服务 A]触发事件调用[数据服务 B], [数据服务 B]读取数据, 发送给[分析服务 C], [分析服务 C]处理数据, 返回结果给[分析服务 C]

    ([消费服务 A] -> [数据服务 B] -> [分析服务 C])
  • 结构 2 [消费服务 A]触发事件从[数据服务 B]拉取任务数据, [消费服务 A]将数据发送给[分析服务 C], [分析服务 C]将结果返回给[消费服务 A], [消费服务 A]将结果回写给[数据服务 B].

    ([消费服务 A]  [数据服务 B], [消费服务 A]  [分析服务 C], [消费服务 A]  [数据服务 B])
    想法
  • 根据[数据服务 B]的数据列表, 开启线程, 并行处理, 提高[分析服务 C]处理速度.
  • 结构 1, 内聚强一点, 但需要处理[消费服务 A]的超时情况, 因为一个请求超过设定的时间, 会直接返回超时, 实际[数据服务 B]还在执行. 需考虑幂等性.可能上次任务还在执行,因为超时, [消费服务 A]再次触发任务.
  • 结构 2, [消费服务 A]通过在[数据服务 B]获取的数据(本地拉取数据快), 开启多线程, 调用[分析服务 C]处理数据,避免结构 1 中,一次请求等待超时问题.
  • 想让大家帮忙分析分析,有没有好的方案.
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部