整理自,GO实现千万级WebSocket消息推送服务
主要有三个:内核瓶颈、cpu瓶颈和锁瓶颈
在线用户达百万时实时数据量非常之大,linux内核发送tcp的极限包频率是100万/秒
优化:消息合并,减小網络小包推送同一秒内的多条消息合并成1条推送,减小内核压力
1)浏览器与服务器通常采取json格式通讯
2)json编码特别消耗cpu资源
优化:编码前置:1次编码+100万次推送
1)需要维护在线用户(100万在线)通常是个哈希字典结构
2)推送消息遍历整个集合,顺序发送消息耗时极长
3)推送期间,客户端正常上下线集合面临不停的修改,需要上锁这期间客户端拿不到锁会无法正常上下线
a)大锁拆小,把长连接打散到多个集匼每个集合有自己的锁,每个集合独立锁之间没竞争关系,
可多线程并发推送不同的集合
维护海量长连接会花费不少的内存
消息推送瞬时会消耗大量的cpu资源
消息推送瞬时带宽占用高达400-600MB(4-6Gbits)万兆网卡才能满足需求是主要的技术瓶颈