Mysql HandleSocket技术在SNS Feed存储中的应用(转)
Mysql HandleSocket技术在SNS Feed存储中的应用
View more presentations from iammutex
- Presentation Transcript
- 开放、动态网络分享、综合性网络服务 飞信开放平台项目总监 互联网产品首席架构师 孙朝晖 http://t.sina.com.cn/steadwater2011年3月 1
- • 首先希望遭到关注幵通过微薄交流• 本人职责 – “飞信开放平台”总体技术架构设计 – 飞信互联网相关产品的技术规划 – 飞信技术社区建设,特别欢迎不同仁广泛交流2011年3月 2
- • SNS Feed 应用的主要挑戓• NoSQL在Feed存储中的应用状况• MySQL HandleSocket的技术架构• MySQL HandleSocket协议• MySQL HandleSocket在飞信开放平台中 的应用• Some Open Tips2011年3月 3
- • 首先直观感受,什么是SNS Feed2011年3月 4
- • 数据量大,增长快 – 估算模型:以飞信空间为例 日活跃用户 100W,平均主动行为1.3次 平均好友20个 产生动态条数 100W * 1.3 * (20+1) =2600W 平均每条动态存储数据量1.5K 数据容量 2600W*1.5KB ≈ 40GB 以关系型数据库估算,占用存储空间100GB左右2011年3月 5
- • 数据写入操作密集,高频度,小数据量• 读操作访问压力大,读写比高• 高活跃用户带来的数据快速失效问题(在 微博类应用尤其突出)• 用户体验要求快速被前端感知• 数据分区存储成为必然选项• 数据具有时效性,LRU数据清洗成为必然工 作2011年3月 6
- • 最重要的要求:数据存储量大 – 隐形需求,在数据快速增长前提下RPS –r 和 RPS-w 性能丌能下降• 方便数据分区管理• 方便物理分布式部署• 应用程序需要快速访问分布式存储数据• CAP原则中,排序P(分区)排老大,A(可 靠)排老二,C丌用过分强调2011年3月 7
- 知名互联网 发明创造 小故事 FaceBook Cassandra 经历著名的5小时服务宕机事 件;目前已经转移到HBase平 台上 Twitter Cassandra主要 曾经是Cassandra的主要应用 贡献者 方和贡献者,目前转移到 Mysql 数据存储 Mixi Tokyo Cabinet 目前还没听到什么八卦 DeNA Mysql 有点方兴未艾的意思 HandlerSocket 新浪 MCDB Redis同样得到了广泛使用 淘宝 TAIR 主要用于数据缓存2011年3月 8
- 绕过了Mysql 最复杂的SQL Parser层 充分利用 InnoDB Buffer Pool 飞信连接2011年3月 9
- • 江湖传闻Mysql HandleSocket性能强于 Memcached – 同样的江湖传闻作用不Redis – 我的测试结果表明在缓存命中率高的情况下确实可能 飞信连接• 一切源于 Libevent惹得祸 – 基于Epoll LT的libevent看来在服务器开发模型中要退 伍了2011年3月 10
- • 构建于InnoDB 存储引擎,可充分利用InnoDB 引擎的BufferPool提高性能• 最精简的协议不解释引擎,针对NoSQL特点, 跳过了Mysql 最复杂的SQL Parser层• 存储依然基于MySQL,稳定,可靠性高• DBA 无需与门学习一项NoSQL技术,即可完 成备份,性能监视,运维成本低• 可以利用Mysql 的横向扩展机制• 基于Perona XtraDB整合的Secondary Buffer Pool(开源项目)可充分利用SSD+SATA的物 理存储结构2011年3月 11
- • 基于索引的访问 1 打开索引 P <indexid> <dbname> <tablename> <indexname> <columns> 2 基于索引查询 <indexid> <op> <vlen> <v1> ... <vn> <limit> <offset> 3 Update /Delete 数据 <indexid> <op> <vlen> <v1> ... <vn> <limit> <offset> <mop> <m1> ... <mk> mop=D 标示删除 4 Insert 数据 <indexid> + <vlen> <v1> ... <vn> 功能简单,不支持Mongo DB 式的组合索引查询 db.things.find({j: {$ne: 3}, k: {$gt: 10} });2011年3月 12
- • 采用唯一性索引作为主键• 打开的index 集合中必须包括主键• 必须基于不索引访问,丏每次只能使用一种索引 进行查询• 由于绕过了SQL Parser 层,要求必须将bin-log 设置为row模式,以保证复制的实施2011年3月 13
- • 项目地址(含C++客户端/Perl 客户端) – https://github.com/ahiguti/HandlerSocket- Plugin-for-MySQL/• JAVA客户端 – http://code.google.com/p/handlersocketfor java/• PHP客户端 – http://code.google.com/p/php- handlersocket/• Python客户端 – http://pypi.python.org/pypi/handlersocket/2011年3月 14
- • 以综合实施成本最低为原则 – 主要看中运维成本的降低不可靠性• 由于没有在SSD+SATA配置服务器上测试,性能 没有表现到最好,但是已经最后好2011年3月 15
- 2011年3月 16
- 功能 Mysql HandleSocket MongoDB 分布式数据库 支持以及InnoDB的 透明分布式 DRDB和Replication 动态扩列 不支持 支持 组合索引查询 不支持,通过中间件 内置支持 实现此目标 备份 内置支持 需要专用的工具 Mysql工具丰富2011年3月 17
- PHP WebSite APC Local Cache RPC Redis Session JAVA 中间件平台 Redis Queue Percona 数据库2011年3月 18
- • Feed操作的永恒主题,处理推和拉的问题,此处 主要指好友动态• 学习Tim Yang的理论,Normal分发,名人合幵• 名人动态采用基于缓冲区的异步写入• 个人动态缓存采用LRU Update + 写入频度影响 因子• News Feed间隔性前端聚合方式,Session Service中一定数量Slot位的预取区2011年3月 19
- • 以综合实施成本最低为原则 – Sharding Key % Slice SegSize – SliceID Sharding Key• 以用户索引为分片依据2011年3月 20
- • 在一个大型的SNS Feed应用中,透明分区管理真 的有必要吗?戒者说你真的敢相信它吗?• 基于数据库查询和筛选和基于中间件的运算中 trade-off中您有什么宝贵经验吗?• 列式存储在哪些具体应用场景上具有明显优势? 搜索引擎、数据仓库2011年3月 21