`
lxm3033
  • 浏览: 20008 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用nosql轻松打造千万级数据量的微博系统

 
阅读更多

其实微博是一个结构相对简单,但数据量却是很庞大的一种产品.标题所说的是千万级数据量也并不是一千万条微博信息而已,而是千万级订阅关系之间发布。在看 我这篇文章之前,大多数人都看过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-tokyocabinet/downloads/detail?name=micro-blog-qiye.tar.bz2&can=2&q=#makechanges

分享到:
评论

相关推荐

    完全用nosql轻松打造千万级数据量的微博系统

    完全用NoSQL轻松打造千万级数据量的微博系统 在本篇文章中,我们将介绍如何使用NoSQL数据库轻松打造千万级数据量的微博系统。微博系统是一个复杂的系统,需要处理海量的数据和高并发的用户请求。传统的关系型数据库...

    nosql打造千万级微博系统

    nosql打造千万级微博系统

    .新浪微博.构建高性能的微博系统

    - **消息队列中间件**:如RabbitMQ、Kafka等,用于异步处理数据流,减轻系统压力并提高系统的响应速度和吞吐量。 #### 协议层 - **JSON与Protocol Buffers**:新浪微博在不同层次上采用了不同的数据交换格式。对于...

    NoSQL技术在气象传感器数据处理中的应用.pdf

    NoSQL技术是指一种新的数据存储和处理技术,它不同于传统的关系数据库管理系统(RDBMS)。NoSQL技术的主要特点是其 schema-free 的设计、分布式存储、水平扩展等特点,使其在处理海量非结构化数据时具有很强的读写...

    基于BS架构微博系统.zip

    3. **数据库管理**:数据库是存储用户信息、微博内容等关键数据的地方,可能采用了MySQL、Oracle或PostgreSQL等关系型数据库,也可能使用NoSQL数据库如MongoDB。 4. **源代码分析**:源代码是理解项目工作原理的...

    互联网公司技术架构资料.新浪微博.构建高性能的微博系统

    2. 数据存储与处理:微博系统的数据量庞大,需要高效的数据存储和检索机制。常见的解决方案包括使用分布式数据库(如MySQL集群)、NoSQL数据库(如HBase、MongoDB)以及搜索引擎(如Elasticsearch)来处理海量的用户...

    Nodejs + mongoDB实战开发微博系统源码.zip

    在微博系统中,我们可以用MongoDB来存储用户信息、微博内容、评论等数据。 三、数据模型设计 在MongoDB中,我们通常会为微博系统设计如下的数据模型: 1. 用户(User):包含用户名、密码(加密存储)、头像等信息。 ...

    基于分布式NoSQL的医疗大数据档案检索系统设计.pdf

    1. 分布式NoSQL数据库技术:该系统采用分布式NoSQL数据库技术,旨在解决大数据量下的数据检索问题。NoSQL数据库可以处理大量数据,并提供高效的数据检索功能。 2. 医疗大数据管理:医疗大数据管理是指对医疗机构中的...

    NoSQL学习之路

    例如,使用 NoSQL 数据库可以提高系统的性能,而使用缓存机制可以提高系统的可用性。 NoSQL 数据库学习之路涵盖了 NoSQL 数据库的实现原理、设计思想和应用场景,旨在帮助读者更好地了解 NoSQL 数据库,并能够更好...

    微博系统。使用nodejs+express4+mongodb技术进行开发。.zip

    本项目聚焦于一个微博系统的开发,利用先进的Web开发技术——Node.js、Express4框架以及NoSQL数据库MongoDB,构建了一个高效、灵活的微博应用。本文将详细阐述这三大技术在项目中的应用及其核心知识点。 首先,Node...

    nosql生态系统.txt

    - **横向扩展**:NoSQL 数据库支持通过增加更多的服务器来水平扩展,以应对不断增长的数据量和访问量。 - **高性能**:NoSQL 数据库针对特定的用例进行了优化,因此在处理大量数据时往往表现出更高的性能。 - **高...

    微博数据结构

    最后,为了处理实时性,微博可能使用了消息队列(MQ),如Kafka或RabbitMQ,来异步处理和分发新的微博数据,确保系统的高并发处理能力。 通过深入理解微博数据结构,开发者可以更好地设计和优化相关工具,例如爬虫...

    菜鸟级新浪微博源码

    2. **内容发布与存储**:微博发布功能涉及前端表单提交,后端接收到请求后将内容存储到数据库,可能使用了关系型数据库(如MySQL)或NoSQL数据库(如MongoDB)。 3. **数据结构设计**:每个微博可能包含文字、图片...

    NoSQL在国内使用的案例.pdf

    国内知名的互联网公司也在大量应用 NoSQL 型数据库,例如新浪微博、淘宝数据平台、视觉中国网站等。这些公司面临着海量数据的存储和高并发读写的需求,NoSQL 数据库的应用使得他们能够更好地满足这些需求。 新浪...

    基于nosql的现在管理系统.doc

    基于 NoSQL 的现在管理系统是指在现在管理系统中使用 NoSQL 数据库技术来存储和管理大量数据的系统。NoSQL 数据库技术可以处理超大量的数据,可以运行在便宜的 PC 服务器集群上,具有高性能和高可扩展性的特点。 在...

    nosql研发之路

    尤其是在Web 2.0时代,互联网应用对数据处理的需求日益增长,NoSQL数据库以其灵活的数据模型、水平可扩展性、高性能和高可用性等优势,成为众多大型网站和企业级应用的首选。 NoSQL数据库主要分为四大类:键值存储...

    nosql数据库的应用探讨

    以新浪微博为例,用户每天发布的微博数量高达百万甚至千万级别,这使得传统的关系型数据库难以承受如此庞大的数据量。通常情况下,一台MySQL服务器只能支持几百万到几千万的数据规模,因此,需要不断添加服务器来...

    Android-CouchbaseLite是一个Android嵌入式轻量级可同步的NoSQL数据库引擎

    Couchbase Lite作为面向文档的NoSQL数据库,采用了JSON文档格式来存储数据,这种格式易于理解和操作,且适合于移动设备上的轻量级处理。JSON文档可以包含复杂的数据结构,如键值对、数组和嵌套对象,使得数据模型...

Global site tag (gtag.js) - Google Analytics