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

Post on 19-May-2015

4.617 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

2011年3月 1

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

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

2011年3月 2

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

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

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

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

• SNS Feed 应用的主要挑戓

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

• MySQL HandleSocket的技术架构

• MySQL HandleSocket协议

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

• Some Open Tips

2011年3月 3

2011年3月 4

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

2011年3月 5

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

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

平均好友20个

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

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

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

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

2011年3月 6

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

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

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

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

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

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

2011年3月 7

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

RPS-w 性能丌能下降

• 方便数据分区管理

• 方便物理分布式部署

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

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

2011年3月 8

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

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

Twitter Cassandra主要贡献者

曾经是Cassandra的主要应用

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

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

DeNA Mysql HandlerSocket

有点方兴未艾的意思

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

淘宝 TAIR 主要用于数据缓存

2011年3月 9

飞信连接

绕过了Mysql 最复杂的SQL Parser层

充分利用 InnoDB Buffer Pool

2011年3月 10

飞信连接

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

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

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

伍了

2011年3月 11

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

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

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

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

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

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

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

2011年3月 13

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

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

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

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

2011年3月 15

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

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

2011年3月 16

2011年3月 17

功能 Mysql HandleSocket MongoDB

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

透明分布式

动态扩列 不支持 支持

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

内置支持

备份 内置支持 Mysql工具丰富

需要专用的工具

2011年3月 18

PHP WebSite

APC Local Cache

JAVA 中间件平台

RPC

Redis Session

Redis Queue

Percona 数据库

2011年3月 19

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

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

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

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

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

2011年3月 20

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

– SliceID Sharding Key

• 以用户索引为分片依据

2011年3月 21

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

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

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

感谢!

2011年3月 22

top related