- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
《海量数据推送服务——实时处理架构的演进》
展开查看详情
1 .海量数据推送服务 实时处理架构的演进 许建辉
2 .
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 系统出现大量的Time Wait 4 临界区锁保护,性能提升不明显 5 内存宝贵,如何榨取更多硬件资源
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 .数据库的性能优化 客户端读写参数调整 4 Aerospike使用优化 运维监控 3 容量和内存评估 2 参与开源社区问题反馈 1
22 .数据库的性能优化 Aerospike使用优化
23 .数据库的性能优化 1 引入Cache,减少读取压力 将并发密集写改成CSP模式 2 引入直方图监控,量化性能指标,实现 3 针对性的优化
24 . 任务分发与调度的演进 当一个终端连接上来的时 给每个Connector进行全 需要检查当前Connector 候,根据Connector当前 量的消息发送。 的负载,并记录。 的负载和权值,进行连接 对每个当前不在线的设备, 地址的指定。 需要在shuffle后进行第二 次的发送。
25 . 任务分发与调度的演进 3 建立长连接 1 发起请求 2 获取Socket地址 任务下发: 健康检查: 1. 服务的当前负载和权值 1. 每个节点全量下发 2. 检查服务器的健康状况 2. shuffle后离线下发 基于权值和健康检查的路由和分发
26 . 任务分发与调度的演进 3 建立长连接 1 发起请求 2 获取Socket地址 一步到位的任务下发 基于一致性哈希算法的路由和分发
27 . 网络I/O的优化 优化 1 2 3
28 .