技术挑战

难点:

协议层

  1. 三方通信,网络层面无法保证消息必达 【可靠性】
  2. 没有全局时钟,确定唯一顺序,且是符合因果顺序的 【时序性】
  3. 多客户端发送消息/多服务端接受消息/多线程多协程处理消息,顺序难以确定 【时序性】
  4. 分布式ID生成 【架构】
  5. 容灾设计
  6. 弱网环境处理

接入层

  1. 客户端如何选择网关IP地址,才能降低延迟,保证连接可靠,负载均衡?
  2. 网关服务如何接受客户端的消息,获得最大的并发度,获得消息的高吞吐,低延迟?
  3. 为了能使用长连接收发消息,需要维护哪些状态,如何使其占用更少的内存,单机承载更多的连接?
  4. 业务层是怎么感知到连接在哪一台网关机器,并把消息分发下去的呢?如何降低网络请求的扇出?
  5. 客户端进入地铁/切换基站/连接wifi等情况下导致连接断开,如何能快速重连,而不影响用户体验?
  6. 如何尽可能等减少长连接服务的崩溃/重启次数,做到永不宕机?
  7. 长连接服务如何做限流/熔断/降级策略?实现对网关的过载保护,提高可靠性?
  8. 长连接服务如何做到通用性,灵活对接各种业务场景?
  9. 如何多数据中心部署长连接网关?
  10. 如何解决业务层回调长连接网关时消息扇出的问题
  11. 如何保证长连接本身的可靠性,降低其断线的影响
  12. 如何提高长连接服务故障恢复的速度
  13. 长连接服务如何做限流/熔断/降级策略