gRPC (https://grpc.io) 是一个由Google开发的高性能、开源、跨多种编程语言和通用的远程过程调用协议(RPC) 框架,用于客户端和服务器端之间的通信,使用HTTP/2协议并将 ProtoBuf (https://developers.google.com/protocol-buffers)作为序列化工具。
双向数据流模式(Bidirectional streaming RPC),是客户端和服务端都可以向对方发送数据流,这个时候双方的数据可以同时互相发送,实现了实时交互。我们想利用这个模式,简单替代长连接管理,让App具备在线用户感知并且可以随时触达任意在线客户端。
该服务通过gRPC进行了连接和用户ID的管理,以下简称双向流。在第一个版本上线后,如下图发现内存占用较大,UID和连接总数并不是一一对应。在关闭链接开关后,连接也未能如期望立刻释放。若再次开启,内存占用仍会持续增长,并不随活跃用户数而波动。
由此开始了前前后后多次的优化,终于实现了内存占用的大幅下降和内存的稳定,平均1W链接大约占用50