Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LeanMessage Architecture Highlights

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →
Avatar for Ning Sun Ning Sun
October 29, 2014

LeanMessage Architecture Highlights

Introduction to LeanCloud realtime messaging service, functions, abstractions and implementation.

Avatar for Ning Sun

Ning Sun

October 29, 2014

Other Decks in Programming

Transcript

  1. 实时消息 Vs REST API REST API 实时消息 拉模型(外部触发刷新或轮 询) 支持推、拉两种模型(实时反

    应更新) 短连接 持久连接 无状态或模拟状态(编程简 单) 维护状态(编程复杂) 同步 异步 高延迟 低延迟
  2. RTM from scratch • 服务端 – 异步持久连接服务器 (nodejs) – 系统参数调优

    – 可用性,扩展性 – 运维、监控 • 客户端 – 状态维护 – 重连策略
  3. 客户端抽象 • Session – 属性 • appId • selfId –

    行为 • open/close • watch/unwatch • send – 事件 • open • pause/resume • message • presence (上下线通知)
  4. 客户端抽象隔离 • Session – Bare metal • 连接创建和重用、管理 • 自动重连,永远在线

    – 检测网络条件变化 – 心跳,保持连接 • 保证消息到达,去重 • 隔离下层传输协议 – websocket – socketio – 应用层协议分帧
  5. 构建持久连接的客户端 • Android – 后台运行 Service • iOS, Windows Phone

    – 应用在前台时建立连接 – 应用在后台时主动断开,通过平台推送通知 • HTML5 – Websocket 或降级方案
  6. 服务器端 • 功能模块 连接管理 会话管理 消息收发 推送消息 关注 关系 点对点消息

    群组消息 离线消息 群组 管理 历史记录 敏感信息过滤 权限认证 统 计 服 务 监 控 报 警 配 置 管 理 / 持 续 集 成
  7. 技术栈 • Clojure • Netty NIO • core.async, SEDA pipeline

    • Slacker cluster RPC • Zookeeper • Kestrel
  8. 微服务架构 • Microservice • 细粒度,针对功能和性质拆分 • 传输 : 消息队列和 RPC

    • 元编程 : 实现本地和远程调用 API 一致 • 服务作为一层抽象独立于进程
  9. 服务发现 • 利用 Zookeeper 注册服务 • ephemeral 节点 • watch

    – 自动 failover – 自动引导流量到新的部署 • 动态配置管理
  10. Push Service Push Server RPC REST MQ RPC Push Lookup

    ZK Push Server Push Server Push Server Push Server Push Lookup Push Service Push Service Push Service Storage API Client Censorship RPC MQ Watchdog RPC HTTP WebSocket
  11. 负载均衡 • 应用层的负载均衡 – DNS 负载均衡不够灵活 – REST 无状态服务 •

    根据长连接服务器的负载分配新连接 – 支持其他业务规则:灰度上线 • 自动更新可用列表