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

2022-06-25 00:11:26 +08:00
 jackiejkl
假设一张表里有 1000 条命令,每条命令都需要长时间网络 IO (不怎么消耗本地资源),现有若干个微服务,如何让这些微服务平均的分配并执行这些命令?
2197 次点击
所在节点    Java
16 条回复
Jooooooooo
2022-06-25 00:15:36 +08:00
要不研究下 cpu 的调度算法, 和你想解决的问题其实是一回事.
CEBBCAT
2022-06-25 01:04:15 +08:00
我来抬杠了:如何定义均匀?如果只是网络 IO ,那就多开并行数同时请求呗
jackiejkl
2022-06-25 02:24:01 +08:00
@CEBBCAT 那万一其中一个微服务开了 1000 条线程在那等呢?
CEBBCAT
2022-06-25 02:56:39 +08:00
@jackiejkl 等就等呗
controller
2022-06-25 08:15:40 +08:00
消息队列,空闲客户端会自动获取任务执行
546L5LiK6ZOt
2022-06-25 08:49:38 +08:00
@jackiejkl 有 nio ,一个线程就可以发起多个网络 io 请求
clayyj1210
2022-06-25 08:53:29 +08:00
每个微服的线程池设定小一点咯。
jackiejkl
2022-06-25 13:37:30 +08:00
@546L5LiK6ZOt
@clayyj1210
可以,我学一下
jackiejkl
2022-06-25 13:39:19 +08:00
@clayyj1210 不对啊,难点在于分配,线程池这里都已经获取到了,要是在线程池里去获取的话就保证不了准时了
THESDZ
2022-06-25 15:25:04 +08:00
@jackiejkl 一个服务做推送,其他的服务去队列拿呗
c0t
2022-06-26 12:21:25 +08:00
我之前用的方案也是消息队列,命令是幂等的就更好了
jackiejkl
2022-06-26 13:24:33 +08:00
@THESDZ 那如果没有一个专门的服务做推送咋办..
jones2000
2022-06-26 13:36:39 +08:00
数据库前面加一个前置的任务调用服务,所有数据库操作都通过这个前置来控制。
EscYezi
2022-06-26 13:53:24 +08:00
给每个微服务指定同时运行命令的上限,主线程检测到当前运行命令数小于上限时去数据库取一条命令提交到线程池运行
理论上可以做到比较均匀
Geraltt
2022-06-26 15:17:50 +08:00
有必要造轮子吗? XXL 、Elastic job 啥的不能满足吗
sun1993
2022-06-26 19:28:48 +08:00
给这 1000 条指令取出来,然后用最基本的轮询算法挨个儿发给这些机器不就得了(可能会错意了,乱说的 233 )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862046

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX