求助,想找一个发起高并发的 demo Java 项目参考一下

183 天前
 FONG2
需求是
7000 个用户,每 5s 请求外部接口更新一下用户信息,更新用户信息的 API 每次只能查 1 个用户

关联多线程、调度、失败重试
1806 次点击
所在节点    Java
15 条回复
pota
183 天前
这压力不是在外部接口吗?
FONG2
183 天前
@pota 发起方同样存在吧,收到数据要入库的,要怎么写这个多任务才能满足每秒 1400 次发起请求
burymme11
183 天前
5 秒完成 7000 次 API 调用,一次完整的请求分配的时间 1ms 都不到,你确定这个设计合理?如果真要这么设计,那你首要任务应该是如何混进对方的机房。
vacuitym
183 天前
弄个大点的线程池去跑。不过对方的 api 只给你使用吗,你这个对他们的压力可不低
sdhjl2000
182 天前
使用 redis
pota
182 天前
@FONG2 #2 发起方反而好解决,多几台机器分流就行了。问题是在被调用方。
FONG2
182 天前
@pota 道理我都懂,我就想看看别人怎么写 少走弯路
FONG2
182 天前
@burymme11 我也觉得不合理,但是无能无力
@vacuitym 对只给我用,并且每一次的调用的信息 对方都是实时计算生成的
反正我只管我自己,对方压力怎么样 不归我管,到时候 5s load 不完 锅不在我
ihuotui
182 天前
计算每个环节的延时,tps ,然后合理取舍 cap
stinkytofu
182 天前
这根本就不是高并发, 而且你 5s 内也不可能完成 7000 个用户的刷新, 要么你这边延长时间, 要么让接口改成批量用户刷新
buliugu
182 天前
java 的话可以考虑一下 Quasar ,直接起 7k 协程干碎丫的(逃
litchinn
182 天前
感觉这不是虚拟线程的典型使用场景吗
lsk569937453
182 天前
假设外部接口可以支持的并发没有上限,接口调用耗时 10ms 以内。假设更新用户信息到数据库(缓存)的耗时在 5ms 以内。

1.方案一:
xx-job 配置定时任务 5 秒一次,单机在 5 秒发起 7000 次请求,并且更新信息到数据库(缓存)。
缺点:单机一秒内要完成 1400 次网络请求,用最新的 java 的虚线程还是有压力的。用户量增加的时候无法横向扩展机器,只能继续优化代码。


2.方案二:
使用 zk/etcd/redis 等工具,将所有在线的机器注册到一个节点上,每 5 秒定时启动时去该节点上拉取所有在线的机器信息,根据本机器的位置来均分任务。如果 10 台机器在线,每台机器则需要均分 700 个用户,然后发起请求去更新用户的信息。
优点:可以横向扩展机器,理论上机器越多,可发起的请求数越多,方便用户增加后,直接加机器即可。

缺点:多个机器的当前运行定时任务怎么保证是一个批次的(机器时间不一致的情况需要考虑)?
lsk569937453
182 天前
顺便补充下,非必要,不重试。你都 5 秒去更新一次了,频率非常高,失败后不需要重试。
night98
181 天前
你这个五秒是怎么规定的,我觉得完全可以把 7000 个用户平摊到五秒内分别请求,这样每秒只需要 1400 个用户同步,算你起一百个线程,那么同时只需要处理十四个用户的发起请求,相对来说就简单多了,我觉得你还是问问清楚为什么要这么做吧。

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

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

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

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

© 2021 V2EX