`
he_wen
  • 浏览: 239366 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

微博基本架构思路

阅读更多

该文章是转载链接是:http://www.cellphp.com/article-read-nosql-20-handlersocket-nosql-zeromq-micro-blog-gps-tokyocabinet.html在强调不是本人创新 ,只是感觉写的好用来借鉴一下经验
    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引擎

 

 

里面有一个附加关于流程图

分享到:
评论

相关推荐

    java 简单微博系统

    这个系统适合初学者进行学习和实践,以理解Web应用的基本架构和流程。 1. **JavaEE技术栈**:JavaEE(企业版Java)是用于构建分布式、多层的企业级应用程序的框架,包括Servlet、JSP、JPA、EJB、JSF等组件。在这个...

    Java+Jsp+MySql微博开发

    下面我们将详细探讨其中的关键技术点和设计思路。 首先,Java作为后端开发语言,负责处理业务逻辑和与数据库的交互。在该项目中,开发者可能采用了Servlet进行HTTP请求的响应,以及控制流程的管理。Servlet是Java ...

    微博 源代码

    首先,我们需要了解的是微博的基本架构。微博作为一种社交媒体平台,其后端通常涉及到大量的数据处理,包括用户信息管理、动态发布、评论互动、推荐算法等。前端则涉及用户界面的设计,提供友好的交互体验。源代码中...

    简单微博系统

    7. 文档:提供的文档可能包含了系统的设计思路、技术选型、架构图、数据库模型、部署指南等内容,帮助读者理解并运行这个项目。 通过学习和实践这个“简单微博系统”,开发者不仅可以掌握JSP和Servlet的基本用法,...

    简版微博模板

    下面将详细讨论该模板涉及的关键技术点、设计思路以及实现过程。 一、界面设计与用户体验 1. **响应式布局**:为了适应不同设备的屏幕尺寸,模板采用响应式设计,确保在手机、平板和电脑上都能提供良好的浏览体验。...

    Android 源码实例项目 口袋微博

    1. **Android架构设计**:口袋微博可能采用了MVP(Model-View-Presenter)或MVVM(Model-View-ViewModel)架构模式,这两种模式在现代Android应用中广泛应用,有助于提高代码的可测试性和可维护性。 2. **UI组件与...

    jquery高仿新浪微博图片显示插件

    这个插件的设计思路主要包括以下几个关键点: 1. **图片预加载**:为了保证用户在浏览图片时不会因为等待加载而感到卡顿,插件会预先加载图片,利用jQuery的事件监听和异步处理来实现。这涉及到浏览器的内存管理和...

    android应用源码(精)新浪微博客户端源码.zip源码资源下载

    通过分析这个源码,开发者不仅可以学习到Android应用的基本架构和组件使用,还能了解到实际项目中的一些最佳实践和技术解决方案。这对于提升个人的编程技巧,理解Android系统的工作原理,以及解决实际问题都有着重要...

    ASP源码—简洁碎碎念简单的轻微博系统v1.1.zip

    【ASP技术介绍】 ASP(Active Server Pages)是微软公司推出的一种服务器端脚本环境,用于创建动态交互式网页。...通过深入研究,不仅可以提升ASP编程技能,还能了解到轻微博系统的架构和设计思路。

    微博系统(Java源码,servlet+jsp),适用于初学者

    5. **MVC设计模式**:尽管这个系统可能没有严格的MVC架构,但初学者可以从中体会到模型-视图-控制器模式的基本思想。 6. **数据库操作**:学习如何使用JDBC(Java Database Connectivity)连接MySQL等数据库,执行...

    新浪微博客户端源码

    1. Android应用的基本架构和组件设计,如如何利用Activity管理用户界面,如何通过Service处理后台任务。 2. 使用Android SDK进行网络请求,通常会用到HttpURLConnection、OkHttp或者Retrofit等库来实现与服务器的...

    微博集群行为舆情感知大数据挖掘机制研究.pdf

    研究首先介绍了微博集群行为大数据挖掘的基本概念,包括其定义和分类,强调了微博数据的特征和舆情挖掘的难点。由于微博数据的海量和动态特性,传统的文本挖掘方法难以应对,因此研究者提出了基于舆情语义感知的数据...

    微博系统毕业设计论文及源代码(SSH)

    【描述】提到这是一个“优秀毕业设计”,意味着该设计不仅完成了基本的功能实现,还可能在用户体验、性能优化或系统架构上有出色的表现。毕业设计通常包括需求分析、系统设计、编码实现、测试以及论文撰写等多个环节...

    Android应用源码之微博客户端源代码.zip

    通过对这份源码的解析,我们可以深入了解Android应用的设计思路、架构模式以及具体实现细节,对于提高自己的Android开发技能大有裨益。 首先,让我们从整体上理解这个项目的结构。在"复件 weiboSina"这个压缩包中,...

    腾讯微博android源代码

    1. **Android应用程序框架**:腾讯微博Android应用是基于Android SDK构建的,它遵循Android应用程序的基本架构,包括Activity、Service、BroadcastReceiver、ContentProvider等组件。这些组件是Android应用的核心,...

    基于Android系统微博客户端的设计与实现.pdf

    首先,Android系统是基于Linux内核的开源操作系统,其架构包括应用程序层、应用框架层、系统运行层和Linux内核层。应用程序层主要是Java语言编写的应用程序,应用框架层提供了丰富的API供开发者使用,系统运行层包含...

    javaEE_SSM_MySql基于BS架构微博系统(源码+数据库sql+lun文+视频齐全).rar

    该压缩包文件“javaEE_SSM_MySql基于BS架构微博系统(源码+数据库sql+lun文+视频齐全).rar”是一个全面的学习资源,涵盖了JavaEE开发中的关键技术和实践,特别是针对构建微博系统的实现。这里我们将深入探讨其中涉及...

    移动信息(微博)发布系统分析与概要设计

    移动信息发布系统设计方案撰写于2007年,尽管最终未能实现商业化,但该方案的理念与后来流行的“微博”模式高度相似。该文档提供了对系统架构、功能需求及用户群体等方面的详细描述,对于了解早期移动互联网应用设计...

    jquery简单实现微博广场下滑效果

    同时,随着前端技术的发展,现代的解决方案可能会使用Intersection Observer API或者Vue、React等框架来实现这种效果,但基本的思路是相同的。 总的来说,jQuery为我们提供了强大的工具来轻松实现这种动态加载效果...

    【计算机毕业设计】基于SSM的仿微博系统的设计与实现【源码+lw+部署文档+讲解】

    能学到什么:①学习SSM框架的基本原理和应用;②了解社交网络平台的开发流程和技术选型;③掌握Web应用程序开发过程中的技术选型和开发实践。 阅读建议:本资源旨在帮助学生通过实践项目来掌握Web应用程序的开发...

Global site tag (gtag.js) - Google Analytics