最近一直在优化行情推送系统,有不少优化心得跟大家分享下。性能方面提升最明显的是时延,在单节点8万客户端时,时延从1500ms优化到40ms,这里是内网mock客户端的得到的压测数据。
对于订阅客户端数没有太执着量级的测试,弱网络下单机8w客户端是没问题的。当前采用的是kubenetes部署方案,可灵活地扩展扩容。
架构图
push-gateway
是推送的网关,有这么几个功能:第一点是为了做鉴权;第二点是为了做接入多协议,我们这里实现了websocket, grpc, grpc-web,sse的支持;第三点是为了实现策略调度及亲和绑定等。
push-server
是推送服务,这里维护了订阅关系及监听mq的新消息,继而推送到网关。
![](https://img-blog.csdnimg.cn/img_convert/5aeb5f755e64950caad89f5a832e5627.png)
问题一:并发操作map带来的锁竞争及时延
推送的服务需要维护订阅关系,一般是用嵌套的map结构来表示,这样造成map并发竞争下带来的锁竞争和时延高的问题。
// xiaorui.cc
{"topic1": {"uuid1": client1, "uuid2": client2}, "