Lean Message Architecture Highlights
description
Transcript of Lean Message Architecture Highlights
LeanMessage通信云架实时 构
About
● 孙宁● [email protected]● wechat:try-another● twitter.com/sunng● github.com/sunng87
什么是实时通信?什么是实时通信云?
普通应用● Pull to refresh
实时应用● 聊天, IM
实时应用● 互动游戏
实时应用● 协同编辑
实时消息 Vs REST API
REST API 实时消息
拉模型(外部触发刷新或轮询)
支持推、拉两种模型(实时反应更新)
短连接 持久连接
无状态或模拟状态(编程简单)
维护状态(编程复杂)
同步 异步
高延迟 低延迟
实时通信的典型部署
Client Agent Client Agent
Async server
User S
pace
RTM from scratch
● 服务端– 异步持久连接服务器 (nodejs)
– 系统参数调优– 可用性,扩展性– 运维、监控
● 客户端– 状态维护– 重连策略
实时通信云
SDK
Client
SDK
Client
Cloud Infrastructures
Service P
rovider
User SpaceREST Client
实时通信云● 服务端
– 0
● 客户端– Session 抽象
客户端抽象● Session
– 属性● appId● selfId
– 行为● open/close● watch/unwatch● send
– 事件● open● pause/resume● message● presence (上下线通知)
客户端抽象隔离● Session
– Bare metal● 连接创建和重用、管理● 自动重连,永远在线
– 检测网络条件变化– 心跳,保持连接
● 保证消息到达,去重● 隔离下层传输协议
– websocket– socketio– 应用层协议分帧
构建持久连接的客户端● Android
– 后台运行 Service
● iOS, Windows Phone– 应用在前台时建立连接– 应用在后台时主动断开,通过平台推送通知
● HTML5– Websocket或降级方案
服务器端● 功能模块
连接管理
会话管理 消息收发
推送消息
关注关系
点对点消息 群组消息
离线消息群组管理
历史记录
敏感信息过滤
权限认证
统计服务
监控报警
配置管理/
持续集成
技术栈● Clojure● Netty NIO● core.async, SEDA pipeline● Slacker cluster RPC● Zookeeper● Kestrel
微服务架构● Microservice● 细粒度,针对功能和性质拆分● 传输 :消息队列和 RPC● 元编程 :实现本地和远程调用 API一致● 服务作为一层抽象独立于进程
服务发现● 利用 Zookeeper注册服务● ephemeral节点● watch
– 自动 failover
– 自动引导流量到新的部署● 动态配置管理
Push Service
Push Server
RPC
REST
MQ
RPC
Push Lookup ZK
Push ServerPush ServerPush ServerPush Server
Push Lookup
Push ServicePush ServicePush Service
Storage API
Client
CensorshipRPC
MQ
WatchdogRPC
HTTP
WebSocket
负载均衡● 应用层的负载均衡
– DNS负载均衡不够灵活– REST无状态服务
● 根据长连接服务器的负载分配新连接– 支持其他业务规则:灰度上线
● 自动更新可用列表
Wrap up
● 降低有状态服务端的开发运维成本● 简化客户端编程● 可伸缩架构支撑业务量扩展● 报表、预警系统增强用户控制
Thanks !
Thanks!