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

请问大佬们 如何将数据库中的任务给微服务均匀执行?

  •  
  •   jackiejkl · 2022-06-25 00:11:26 +08:00 · 2196 次点击
    这是一个创建于 883 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设一张表里有 1000 条命令,每条命令都需要长时间网络 IO (不怎么消耗本地资源),现有若干个微服务,如何让这些微服务平均的分配并执行这些命令?
    16 条回复    2022-06-26 19:28:48 +08:00
    Jooooooooo
        1
    Jooooooooo  
       2022-06-25 00:15:36 +08:00
    要不研究下 cpu 的调度算法, 和你想解决的问题其实是一回事.
    CEBBCAT
        2
    CEBBCAT  
       2022-06-25 01:04:15 +08:00
    我来抬杠了:如何定义均匀?如果只是网络 IO ,那就多开并行数同时请求呗
    jackiejkl
        3
    jackiejkl  
    OP
       2022-06-25 02:24:01 +08:00
    @CEBBCAT 那万一其中一个微服务开了 1000 条线程在那等呢?
    CEBBCAT
        4
    CEBBCAT  
       2022-06-25 02:56:39 +08:00 via iPhone
    @jackiejkl 等就等呗
    controller
        5
    controller  
       2022-06-25 08:15:40 +08:00 via Android   ❤️ 2
    消息队列,空闲客户端会自动获取任务执行
    546L5LiK6ZOt
        6
    546L5LiK6ZOt  
       2022-06-25 08:49:38 +08:00
    @jackiejkl 有 nio ,一个线程就可以发起多个网络 io 请求
    clayyj1210
        7
    clayyj1210  
       2022-06-25 08:53:29 +08:00
    每个微服的线程池设定小一点咯。
    jackiejkl
        8
    jackiejkl  
    OP
       2022-06-25 13:37:30 +08:00
    @546L5LiK6ZOt
    @clayyj1210
    可以,我学一下
    jackiejkl
        9
    jackiejkl  
    OP
       2022-06-25 13:39:19 +08:00
    @clayyj1210 不对啊,难点在于分配,线程池这里都已经获取到了,要是在线程池里去获取的话就保证不了准时了
    THESDZ
        10
    THESDZ  
       2022-06-25 15:25:04 +08:00
    @jackiejkl 一个服务做推送,其他的服务去队列拿呗
    c0t
        11
    c0t  
       2022-06-26 12:21:25 +08:00 via Android
    我之前用的方案也是消息队列,命令是幂等的就更好了
    jackiejkl
        12
    jackiejkl  
    OP
       2022-06-26 13:24:33 +08:00
    @THESDZ 那如果没有一个专门的服务做推送咋办..
    jones2000
        13
    jones2000  
       2022-06-26 13:36:39 +08:00
    数据库前面加一个前置的任务调用服务,所有数据库操作都通过这个前置来控制。
    EscYezi
        14
    EscYezi  
       2022-06-26 13:53:24 +08:00 via iPhone
    给每个微服务指定同时运行命令的上限,主线程检测到当前运行命令数小于上限时去数据库取一条命令提交到线程池运行
    理论上可以做到比较均匀
    Geraltt
        15
    Geraltt  
       2022-06-26 15:17:50 +08:00
    有必要造轮子吗? XXL 、Elastic job 啥的不能满足吗
    sun1993
        16
    sun1993  
       2022-06-26 19:28:48 +08:00
    给这 1000 条指令取出来,然后用最基本的轮询算法挨个儿发给这些机器不就得了(可能会错意了,乱说的 233 )
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1107 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.