mysql handlesocket技术在sns feed存储中的应用

22
开放、动态网络分享、综合性网络服务 2011年3月 1 飞信开放平台项目总监 互联网产品首席架构师 孙朝晖 http://t.sina.com.cn/steadwater

Upload: iammutex

Post on 19-May-2015

4.617 views

Category:

Documents


0 download

DESCRIPTION

Mysql HandleSocket技术在SNS Feed存储中的应用

TRANSCRIPT

Page 1: Mysql HandleSocket技术在SNS Feed存储中的应用

开放、动态网络分享、综合性网络服务

2011年3月 1

飞信开放平台项目总监 互联网产品首席架构师

孙朝晖 http://t.sina.com.cn/steadwater

Page 2: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 2

• 首先希望遭到关注幵通过微薄交流

• 本人职责 – “飞信开放平台”总体技术架构设计

– 飞信互联网相关产品的技术规划

– 飞信技术社区建设,特别欢迎不同仁广泛交流

Page 3: Mysql HandleSocket技术在SNS Feed存储中的应用

• SNS Feed 应用的主要挑戓

• NoSQL在Feed存储中的应用状况

• MySQL HandleSocket的技术架构

• MySQL HandleSocket协议

• MySQL HandleSocket在飞信开放平台中的应用

• Some Open Tips

2011年3月 3

Page 4: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 4

• 首先直观感受,什么是SNS Feed

Page 5: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 5

• 数据量大,增长快 – 估算模型:以飞信空间为例

日活跃用户 100W,平均主动行为1.3次

平均好友20个

产生动态条数 100W * 1.3 * (20+1) =2600W

平均每条动态存储数据量1.5K

数据容量 2600W*1.5KB ≈ 40GB

以关系型数据库估算,占用存储空间100GB左右

Page 6: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 6

• 数据写入操作密集,高频度,小数据量

• 读操作访问压力大,读写比高

• 高活跃用户带来的数据快速失效问题(在微博类应用尤其突出)

• 用户体验要求快速被前端感知

• 数据分区存储成为必然选项

• 数据具有时效性,LRU数据清洗成为必然工作

Page 7: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 7

• 最重要的要求:数据存储量大 – 隐形需求,在数据快速增长前提下RPS –r 和

RPS-w 性能丌能下降

• 方便数据分区管理

• 方便物理分布式部署

• 应用程序需要快速访问分布式存储数据

• CAP原则中,排序P(分区)排老大,A(可靠)排老二,C丌用过分强调

Page 8: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 8

知名互联网 发明创造 小故事

FaceBook Cassandra 经历著名的5小时服务宕机事件;目前已经转移到HBase平台上

Twitter Cassandra主要贡献者

曾经是Cassandra的主要应用

方和贡献者,目前转移到Mysql 数据存储

Mixi Tokyo Cabinet 目前还没听到什么八卦

DeNA Mysql HandlerSocket

有点方兴未艾的意思

新浪 MCDB Redis同样得到了广泛使用

淘宝 TAIR 主要用于数据缓存

Page 9: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 9

飞信连接

绕过了Mysql 最复杂的SQL Parser层

充分利用 InnoDB Buffer Pool

Page 10: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 10

飞信连接

• 江湖传闻Mysql HandleSocket性能强于Memcached – 同样的江湖传闻作用不Redis

– 我的测试结果表明在缓存命中率高的情况下确实可能

• 一切源于 Libevent惹得祸 – 基于Epoll LT的libevent看来在服务器开发模型中要退

伍了

Page 11: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 11

• 构建于InnoDB 存储引擎,可充分利用InnoDB 引擎的BufferPool提高性能

• 最精简的协议不解释引擎,针对NoSQL特点,跳过了Mysql 最复杂的SQL Parser层

• 存储依然基于MySQL,稳定,可靠性高

• DBA 无需与门学习一项NoSQL技术,即可完成备份,性能监视,运维成本低

• 可以利用Mysql 的横向扩展机制

• 基于Perona XtraDB整合的Secondary Buffer Pool(开源项目)可充分利用SSD+SATA的物理存储结构

Page 12: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 12

• 基于索引的访问

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} });

Page 13: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 13

• 采用唯一性索引作为主键

• 打开的index 集合中必须包括主键

• 必须基于不索引访问,丏每次只能使用一种索引进行查询

• 由于绕过了SQL Parser 层,要求必须将bin-log 设置为row模式,以保证复制的实施

Page 15: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 15

• 以综合实施成本最低为原则 – 主要看中运维成本的降低不可靠性

• 由于没有在SSD+SATA配置服务器上测试,性能没有表现到最好,但是已经最后好

Page 16: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 16

Page 17: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 17

功能 Mysql HandleSocket MongoDB

分布式数据库 支持以及InnoDB的 DRDB和Replication

透明分布式

动态扩列 不支持 支持

组合索引查询 不支持,通过中间件实现此目标

内置支持

备份 内置支持 Mysql工具丰富

需要专用的工具

Page 18: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 18

PHP WebSite

APC Local Cache

JAVA 中间件平台

RPC

Redis Session

Redis Queue

Percona 数据库

Page 19: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 19

• Feed操作的永恒主题,处理推和拉的问题,此处主要指好友动态

• 学习Tim Yang的理论,Normal分发,名人合幵

• 名人动态采用基于缓冲区的异步写入

• 个人动态缓存采用LRU Update + 写入频度影响因子

• News Feed间隔性前端聚合方式,Session Service中一定数量Slot位的预取区

Page 20: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 20

• 以综合实施成本最低为原则 – Sharding Key % Slice SegSize

– SliceID Sharding Key

• 以用户索引为分片依据

Page 21: Mysql HandleSocket技术在SNS Feed存储中的应用

2011年3月 21

• 在一个大型的SNS Feed应用中,透明分区管理真的有必要吗?戒者说你真的敢相信它吗?

• 基于数据库查询和筛选和基于中间件的运算中trade-off中您有什么宝贵经验吗?

• 列式存储在哪些具体应用场景上具有明显优势?搜索引擎、数据仓库

Page 22: Mysql HandleSocket技术在SNS Feed存储中的应用

感谢!

2011年3月 22