12月19日很荣幸的参加了CU举办的PHP交流会,可能准备的时间
比较仓促我写的《完全用nosql轻松打造千万级数据量的微博系统
》ppt
,大家可能不能很好的理解。我现在整理一下重新分享给大家,有什么问题,可以加我的QQ或者发mail跟我讨论.
其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量也并不是一千万条微博信息而已,而是千万级订阅关系之间发布。在看我这篇文章之前,大多数人都看过sina的杨卫华大牛的微博开发
大会上的演讲.我这也不当复读机了,挑重点跟大家说一下。
大家都知道微博的难点在于明星会员问题,什么是明星会员问题了,就是刘德华来咱这开了微博,他有几百万的粉丝订阅者,他发一条微博信息,那得一下子把微博
信息发布到几百万的粉丝里去,如果黎明、郭富城等四大天王都来咱来开微博,那咱小站不是死翘翘了.所以这时消息队列上场了。在我的架构里
有一个异步publish集群,publish的任务都去zeromq队列读取队列.zeromq是目前已知开源的消息传递最快的一个。具体关于
zeromq可以自己google
。
zeromq有一个问题是不能持久化数据,这个自己做持久化存储.回过刚才那个话题,
把明星会员的粉丝按照"活跃度"进行分级。"活跃度"是根据登陆频度,时间,发布微博等因素大致分为铁杆粉丝、爱理不理、半死不活三大类分到不同的发布集
群中去. 铁杆粉丝类型的异步发布集群,发布速度肯定是最快的.微博的信息是用handler socket保存到mysql
。这个信息ID,是用rdtsc+2位随机整数拼接而成的 64位整数唯一ID,防止出现自增ID出现的多服务器
id一致性的问题. 在publish的时候,集群只是把微博信息的ID发送给redis的订阅者。所以这个数据是很快的。而且订阅者的list里只保存的是ID.在内存
的占用率上也不是很高.
下面我给大家看一下我的mysql和redis数据结构
在我的结构中还有一个重要角色就是"Key GPS
Server"(简称:KGS)简单来说,这个是分布式数据存储的中心索引服务器.一切数据的存储和获取,都通过KGS来定位.
KGS支持多个服务器,多个机房多重备份存储。KGS是以Tokyo Cabinet的hash db为存储的socket server
。记录key跟服务器之间的对应关系. KGS的任务就是告知key该存储在哪几台服务器上,或者告知该key存储在哪几台服务器上,并不做其他的服务.这样大大的减轻KGS的压力.
再说一下Redis集群,redis是以纯内存形式模式运行,关闭了热备的功能(redis的热备并不是那么好). 自己写了个backend
server.在每台运行redis的机子上都运行着backend socket 进程, backend进程也是以tc的hash
db为存储。备份着当前服务器的redis数据。当redis重启的时候,从本机的bakcend db 加载所有数据. Redis的集群是以用户
水平切分法来分布的
现在该轮到mysql里, 在这个架构中,基本消除了这边缓存 那边缓存的问题。因为在这个集群中的每个服务都是高速运行的.唯一的一处的cache 就是在php
端
的eAccelerator local cache.
eAccelerator是基于共享内存的,所有速度比基于socket类型的cache快多了. eAccelerator 缓存了用户top
N条的微博信息还有从KGS查询的结果。
看到这里有人问了,你把用户信息和微博信息都放在mysql里,怎么能不用cache了.嘿嘿,因为我用了handler socket。HS
是小日本写的一款mysql插件.HS避开了MySQL通讯协议,直接读取MySQL引擎。在多核、大内存、
InnoDB引擎环境,性能直超memcached.HS能以Key-Value方式直接读写mysql引擎
总结
Google首席科学家讲过一句话,就是一个大的复杂的系统,应该要分解成很多小的服务.
我的这个架构也是由一个个小的集群来共同处理大数据量发布数据。有的人为什么不用mongodb了,因为mongodb是一款大众性的分布式nosql
db,我们有自己的key分布策略,不太适合用mongodb. 不理解redis的存储关系的同学,可以先参考一下 Retwis,
Retwis是用纯redis实现的简单微博.
具体的架构图、流程图、ppt文件
。请下载附件来阅读. http://code.google.com/p/php-tok ... &q=#makechanges
我的QQ: 531020471 mail: lijinxing#gmail.com
我的 blog: http://www.cellphp.com/article-r ... s-tokyocabinet.html
分享到:
相关推荐
完全用nosql轻松打造千万级数据量的微博系统
nosql打造千万级微博系统
nosql实验五-HBase数据迁移与数据备份&恢复
Couchbase Lite是一个Android嵌入式轻量级,面向文档(NoSQL),可同步的数据库引擎。
本书由浅入深,全面系统地介绍了NoSQL系统。本书既对NoSQL系统的理论进行了深入浅出的分析,又介绍了每一种NoSQL数据库在业界广泛应用的一个具体系统,理论与实战并重。 本书共分5篇,12章。涵盖的内容有:NoSQL与...
本书在紧贴实用的示例的引导下,介绍Oracle NoSQL数据库的安装、配置、应用程序开发、容量规划、容量调节以及与其他企业级数据中心产品的集成等主题。 本书主要内容 ● 了解Oracle NoSQL数据库架构及其底层数据...
对大数据管理的NoSQL系统最前沿的研究综述,最新的学术研究,广大爱好大数据的珍爱。
它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被等知名网站所...
基于NoSQL的大数据处理的研究
为什么使用NoSQL? 为什么使用NoSQL? NoSQL的分类 NoSQL有什么特点? NoSQL有什么特点? NoSQL是否完美? NoSQL的一些概念——CAP NoSQL的一些概念——ACID NoSQL的一些概念——BASE NoSQL的一些概念——BASE NoSQL...
Nosql6种主流Nosql数据库系统对比-天盾数据恢复中心 6种主流Nosql数据库系统对比-天盾数据恢复中心
Android-NoSql Lightweight, simple structured NoSQL database for Android Download dependencies { compile 'com.github.florent37:android-nosql:1.0.0' } Save your datas as a structured tree noSql....
8种Nosql数据库系统对比 对各种NoSql进行比较
nosql生态系统 如果你正在考虑使用 NoSQL,你应该会马上发现你有很多种选择。 NoSQL系统舍弃了许了传统 关系型数据库的方便之处,而把一些通常由关系型数据库本身来完成的任务交给了应用层来完 成。这需要开发...
#资源达人分享计划#
当数据量达到TB或PB级的时候,传统关系型数据型已力不从心。在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战...
主要内容 大数据概述 大数据的定义 大数据的4V特征 大数据的系统要求 大数据的典型架构 大数据的应用 大数据的发展 大数据与NOSql概述全文共23页,当前为第2页。 主要内容 Nosql概述 什么是NoSQL NoSQL的优势和不足...
nosqlbooster4mongo-4.5.4 NoSQL Manager for MongoDB Pro
随着语义网的发展和RDF(resource description framework,资源描述框架)数据量的快速增长,利用NoSQL数据库存储和管理大规模RDF数据已经成为了当前的研究热点。介绍了NoSQL数据库的种类划分和各类型特点,阐述了...