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打造千万级微博系统
### 构建高性能的微博系统 #### 概述 在当今快速发展的互联网环境中,构建一个高性能、可扩展的微博系统是至关重要的。新浪微博作为中国领先的社交媒体平台之一,其技术架构经历了多次迭代与优化,旨在为用户提供...
NoSQL技术在气象传感器数据处理中的应用 一、NoSQL技术概述 NoSQL技术是指一种新的数据存储和处理技术,它不同于传统的关系数据库管理系统(RDBMS)。NoSQL技术的主要特点是其 schema-free 的设计、分布式存储、...
3. **数据库管理**:数据库是存储用户信息、微博内容等关键数据的地方,可能采用了MySQL、Oracle或PostgreSQL等关系型数据库,也可能使用NoSQL数据库如MongoDB。 4. **源代码分析**:源代码是理解项目工作原理的...
2. 数据存储与处理:微博系统的数据量庞大,需要高效的数据存储和检索机制。常见的解决方案包括使用分布式数据库(如MySQL集群)、NoSQL数据库(如HBase、MongoDB)以及搜索引擎(如Elasticsearch)来处理海量的用户...
- **横向扩展**:NoSQL 数据库支持通过增加更多的服务器来水平扩展,以应对不断增长的数据量和访问量。 - **高性能**:NoSQL 数据库针对特定的用例进行了优化,因此在处理大量数据时往往表现出更高的性能。 - **高...
1. 分布式NoSQL数据库技术:该系统采用分布式NoSQL数据库技术,旨在解决大数据量下的数据检索问题。NoSQL数据库可以处理大量数据,并提供高效的数据检索功能。 2. 医疗大数据管理:医疗大数据管理是指对医疗机构中的...
例如,使用 NoSQL 数据库可以提高系统的性能,而使用缓存机制可以提高系统的可用性。 NoSQL 数据库学习之路涵盖了 NoSQL 数据库的实现原理、设计思想和应用场景,旨在帮助读者更好地了解 NoSQL 数据库,并能够更好...
数据类型的转换是指在SQL数据库中使用的数据类型与NoSQL数据库中使用的数据类型之间的转换。查询语言的差异是指SQL语言与NoSQL数据库使用的查询语言之间的差异。 本文将深入探讨SQL与NoSQL数据库间的数据查询转换...
在微博系统中,我们可以用MongoDB来存储用户信息、微博内容、评论等数据。 三、数据模型设计 在MongoDB中,我们通常会为微博系统设计如下的数据模型: 1. 用户(User):包含用户名、密码(加密存储)、头像等信息。 ...
最后,为了处理实时性,微博可能使用了消息队列(MQ),如Kafka或RabbitMQ,来异步处理和分发新的微博数据,确保系统的高并发处理能力。 通过深入理解微博数据结构,开发者可以更好地设计和优化相关工具,例如爬虫...
本项目聚焦于一个微博系统的开发,利用先进的Web开发技术——Node.js、Express4框架以及NoSQL数据库MongoDB,构建了一个高效、灵活的微博应用。本文将详细阐述这三大技术在项目中的应用及其核心知识点。 首先,Node...
2. **内容发布与存储**:微博发布功能涉及前端表单提交,后端接收到请求后将内容存储到数据库,可能使用了关系型数据库(如MySQL)或NoSQL数据库(如MongoDB)。 3. **数据结构设计**:每个微博可能包含文字、图片...
"NoSQL 在国内使用的案例" NoSQL 数据库技术是指非关系型数据库的统称,它们设计的初衷是解决关系型数据库在大规模数据存储和高并发读写方面的局限性。随着互联网的发展,各种类型的应用层出不穷,对技术提出了更多...
基于 NoSQL 的现在管理系统是指在现在管理系统中使用 NoSQL 数据库技术来存储和管理大量数据的系统。NoSQL 数据库技术可以处理超大量的数据,可以运行在便宜的 PC 服务器集群上,具有高性能和高可扩展性的特点。 在...
尤其是在Web 2.0时代,互联网应用对数据处理的需求日益增长,NoSQL数据库以其灵活的数据模型、水平可扩展性、高性能和高可用性等优势,成为众多大型网站和企业级应用的首选。 NoSQL数据库主要分为四大类:键值存储...