开放、动态网络分享、综合性网络服务2011年3月1飞信开放平台项目总监互联网产品首席架构师孙朝晖年3月2•首先希望遭到关注幵通过微薄交流•本人职责–“飞信开放平台”总体技术架构设计–飞信互联网相关产品的技术规划–飞信技术社区建设,特别欢迎不同仁广泛交流•SNSFeed应用的主要挑戓•NoSQL在Feed存储中的应用状况•MySQLHandleSocket的技术架构•MySQLHandleSocket协议•MySQLHandleSocket在飞信开放平台中的应用•SomeOpenTips2011年3月32011年3月4•首先直观感受,什么是SNSFeed2011年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知名互联网发明创造小故事FaceBookCassandra经历著名的5小时服务宕机事件;目前已经转移到HBase平台上TwitterCassandra主要贡献者曾经是Cassandra的主要应用方和贡献者,目前转移到Mysql数据存储MixiTokyoCabinet目前还没听到什么八卦DeNAMysqlHandlerSocket有点方兴未艾的意思新浪MCDBRedis同样得到了广泛使用淘宝TAIR主要用于数据缓存2011年3月9飞信连接绕过了Mysql最复杂的SQLParser层充分利用InnoDBBufferPool2011年3月10飞信连接•江湖传闻MysqlHandleSocket性能强于Memcached–同样的江湖传闻作用不Redis–我的测试结果表明在缓存命中率高的情况下确实可能•一切源于Libevent惹得祸–基于EpollLT的libevent看来在服务器开发模型中要退伍了2011年3月11•构建于InnoDB存储引擎,可充分利用InnoDB引擎的BufferPool提高性能•最精简的协议不解释引擎,针对NoSQL特点,跳过了Mysql最复杂的SQLParser层•存储依然基于MySQL,稳定,可靠性高•DBA无需与门学习一项NoSQL技术,即可完成备份,性能监视,运维成本低•可以利用Mysql的横向扩展机制•基于PeronaXtraDB整合的SecondaryBufferPool(开源项目)可充分利用SSD+SATA的物理存储结构2011年3月12•基于索引的访问1打开索引Pindexiddbnametablenameindexnamecolumns2基于索引查询indexidopvlenv1...vnlimitoffset3Update/Delete数据indexidopvlenv1...vnlimitoffsetmopm1...mkmop=D标示删除4Insert数据indexid'+'vlenv1...vn功能简单,不支持MongoDB式的组合索引查询db.things.find({j:{$ne:3},k:{$gt:10}});2011年3月13•采用唯一性索引作为主键•打开的index集合中必须包括主键•必须基于不索引访问,丏每次只能使用一种索引进行查询•由于绕过了SQLParser层,要求必须将bin-log设置为row模式,以保证复制的实施2011年3月14•项目地址(含C++客户端/Perl客户端)–•JAVA客户端–•PHP客户端–•Python客户端–年3月15•以综合实施成本最低为原则–主要看中运维成本的降低不可靠性•由于没有在SSD+SATA配置服务器上测试,性能没有表现到最好,但是已经最后好2011年3月162011年3月17功能MysqlHandleSocketMongoDB分布式数据库支持以及InnoDB的DRDB和Replication透明分布式动态扩列不支持支持组合索引查询不支持,通过中间件实现此目标内置支持备份内置支持Mysql工具丰富需要专用的工具2011年3月18PHPWebSiteAPCLocalCacheJAVA中间件平台RPCRedisSessionRedisQueuePercona数据库2011年3月19•Feed操作的永恒主题,处理推和拉的问题,此处主要指好友动态•学习TimYang的理论,Normal分发,名人合幵•名人动态采用基于缓冲区的异步写入•个人动态缓存采用LRUUpdate+写入频度影响因子•NewsFeed间隔性前端聚合方式,SessionService中一定数量Slot位的预取区2011年3月20•以综合实施成本最低为原则–ShardingKey%SliceSegSize–SliceIDShardingKey•以用户索引为分片依据2011年3月21•在一个大型的SNSFeed应用中,透明分区管理真的有必要吗?戒者说你真的敢相信它吗?•基于数据库查询和筛选和基于中间件的运算中trade-off中您有什么宝贵经验吗?•列式存储在哪些具体应用场景上具有明显优势?搜索引擎、数据仓库感谢!2011年3月22