《海量数据推送服务——实时处理架构的演进》

微风

2019/03/24 发布于 技术 分类

文字内容
1. 海量数据推送服务 实时处理架构的演进 许建辉
3. 自我介绍 • 近 10 年开发经验,曾从事财务软件、数字 电视、婚恋社交相关软件研发。 • 赢才骏励 原CTO。 • TD 资深研发工程师,推送服务解决方案专 家,负责 TD 推送服务后端的研发。 • 2015 年初加入 Push 项目,负责后台系统研 发。
4. 演讲内容 • • • • • • Td Push 架构 CSP模型介绍 多元化的Cache 数据库的性能优化 任务分发与调度的演进 网络I/O的优化
5. Td Push 架构 体积小 运维支持 低成本 同时支持公有、 私有云部署 高可用 高性能 部署简单 在线水平扩容 加密支持 安全性高
6. Td Push 架构 前置连接服务器 终端用户 移动终端 集成 推送核心系统 推送 SDK 应用协议 分布式并行处理 运营 支撑 系统 运营管理团队 业务服务器 持久化存储
7. Td Push 架构
8. Td Push 架构 1 2 3 4 5 数据库不堪重负 系统突如其来的请求高峰 系统出现大量的Time Wait 临界区锁保护,性能提升不明显 内存宝贵,如何榨取更多硬件资源
9. Td Push 架构 CSP编程模型 Cache的多元化 数据库程序的优化 负载和调度的算法升级 网络I/O的优化
10. CSP模型介绍 • Communicating Sequential Processes
11. CSP模型介绍 • 模型中,worker之间不直接彼此联系,而 是通过不同channel进行消息发布和侦听。 消息的发送者和接收者之间通过Channel 松耦合,发送者不知道自己消息被哪个接 收者消费了,接收者也不知道是哪个发送 者发送的消息。
12. CSP模型介绍 函数 • • • • 函数是一等公民 函数式编程 利用闭包减少全局变量 go func(){}
13. CSP模型介绍 GoRoutine • 历史悠久,且多种语言均有自己的实现办 法 • 内存占用和线程的区别 • 系统调度的区别
14. CSP模型介绍 Channel • 在CSP模型中,channel是一个数据传输的纽带 • 在申明channel的时候,可以指定channel的只读、只写、读 写权限和buffer大小 • 在对channel进行操作的时候,可以使用阻塞和非阻塞的方式 • 关键字:Select、Range、Default – Select:同时操作多个Channel – Range: 遍历Channel – Default: 当Select里面存在阻塞,则会执行Default • Channel的应用 – – – – 基于Channel返回大量的数据 使用Channel实现超时、心跳等 基于Channel实现Latch,控制并发数 使用Channel实现Recycling memory buffers
15. CSP模型介绍 Channel 基于Channel实现Latch,控制并发数 Latch Acquire Release 基于Channel实现Recycling memory buffers Give Get Give Channel Recycling Buffer Get Channel
16. CSP模型介绍 收益 无锁 Channel 提升 能 性 的 来 ,带 争 竞 稳 锁 减少 系统 , 时 过载 提升 能 的性 发 和并 络 网 升, 鲁 提 棒性 CSP 平 依旧 维护 于 ,易 构 码结 算 来计 带 代 的 清晰
17. 多元化的Cache
18. 数据库的性能优化 OSIV OSIV OSIV OSIV MongoDB MongoDB Proxy Proxy Redis Redis MongoDB MongoDB Aerospike Redis Redis Aerospike Aerospike 直方图监控
19. 数据库的性能优化 Mongo客户端优化 优化连接使用
20. 数据库的性能优化 Mongo客户端优化 • • • • 沿用了OSIV 使用了代理连接 代理连接支持自动打开和重复关闭 在真正操作数据库的时候,建立连接
21. 数据库的性能优化 Aerospike使用优化 4 3 2 1 客户端读写参数调整 运维监控 容量和内存评估 参与开源社区问题反馈
22. 数据库的性能优化 Aerospike使用优化
23. 数据库的性能优化 1 引入Cache,减少读取压力 2 将并发密集写改成CSP模式 3 引入直方图监控,量化性能指标,实现 针对性的优化
24. 任务分发与调度的演进 当一个终端连接上来的时 候,根据Connector当前 的负载和权值,进行连接 地址的指定。 给每个Connector进行全 量的消息发送。 对每个当前不在线的设备, 需要在shuffle后进行第二 次的发送。 需要检查当前Connector 的负载,并记录。
25. 任务分发与调度的演进 3 建立长连接 1 发起请求 2 获取Socket地址 健康检查: 1. 服务的当前负载和权值 2. 检查服务器的健康状况 任务下发: 1. 每个节点全量下发 2. shuffle后离线下发 基于权值和健康检查的路由和分发
26. 任务分发与调度的演进 3 建立长连接 1 发起请求 2 获取Socket地址 一步到位的任务下发 基于一致性哈希算法的路由和分发
27. 网络I/O的优化 优化 1 2 3