分布式系统怎么控制调用并发,我们为入口系统,总是流量一大就把对接系统搞死了,对接系统并发都不是很大。

2016-10-19 22:42:47 +08:00
 ixiaohei
分布式系统怎么控制调用并发,我们为入口系统,总是流量一大就把对接系统搞死了,对接系统并发都不是很大。系统用的 java 语言,现在是用信号量控制的,但是只能单 jvm ,怎么做到分布式控制?用 zookeeper ?或者别的工具框架,或者思路。暂时系统有 50 个实例,只有 20 个实际再跑?后面可能越来越多。每个实例应该内存都是 256g 这样样子, cpu 不记得是 32 核还是 64 核。
3537 次点击
所在节点    程序员
14 条回复
clino
2016-10-19 22:58:07 +08:00
好奇对接系统的瓶颈是什么? 数据库还是 cpu?
enenaaa
2016-10-19 23:01:06 +08:00
什么意思, 你是说对接系统吞吐量不能满足你们的需求吗。 那就算好吞吐量, 各程序间按量分配呀, 有额度的才能发送请求, 没有就排队等着。
ixiaohei
2016-10-19 23:01:49 +08:00
@clino 一般都是数据库,金融系统数据大多数落地数据库。比如其中最差的一个金证卖基金的系统。
ixiaohei
2016-10-19 23:02:43 +08:00
@enenaaa 怎么控制排队?消息队列?如果这样改造大的要死不显示,最好就是想分布式信号量那个控制最好了
enenaaa
2016-10-19 23:13:26 +08:00
@ixiaohei 这种应该要求不很精细, 搞个控制服务端,监控对接系统状态, 每隔一点时间向任务程序分发额度就好了。
billlee
2016-10-19 23:22:51 +08:00
redis 就可以做分布式的信号量
ryd994
2016-10-20 08:54:25 +08:00
楼上的办法是一种,或者你可以根据用到的接口,写一个代理
如果用的是 TCP 或者 HTTP 协议的话,用 Nginx 就能很好的处理了
如果是直接调用的库或者对象,那就做一个全局共享的代理对象,由代理进行控制
ryd994
2016-10-20 08:56:29 +08:00
其实 TCP 流控和你这个是类似的,而你还有个优势是可以请对方做个负载监控的接口
jeffersonpig
2016-10-20 09:21:00 +08:00
@ixiaohei 换成恒生的吧哈哈哈哈哈哈
GeekGao
2016-10-20 13:52:51 +08:00
可以在 API 网关上搞个 Token Bucket 算法的过滤器做限流
aboutyang
2016-10-20 14:25:32 +08:00
基于分布式缓存扩展 Semaphore
ixiaohei
2016-10-20 20:06:48 +08:00
@billlee 怎么做?
billlee
2016-10-20 21:32:25 +08:00
ixiaohei
2016-10-20 23:38:14 +08:00
@enenaaa 这个估计改造很大,我们一般都是同步的,异步一般 都是处理任务什么的干。做个活动绝对还好多系统遭殃

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

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

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

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

© 2021 V2EX