V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dnjat
V2EX  ›  程序员

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

  •  
  •   dnjat · 2023-09-13 21:54:57 +08:00 · 788 次点击
    这是一个创建于 441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境

    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 中,一次请求等待超时问题.
    • 想让大家帮忙分析分析,有没有好的方案.
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.