《完全用nosql轻松打造千万级数据量的微博系统.ppt》由会员分享,可在线阅读,更多相关《完全用nosql轻松打造千万级数据量的微博系统.ppt(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、完全用完全用nosqlnosql轻松打造千万级轻松打造千万级数据量的数据量的微博系统微博系统七夜七夜(李锦星李锦星)2010.12.17Your company sloganYour company slogan重要小提示重要小提示架构说明架构说明架构说明架构说明 本架构只是起着抛砖引玉的作用本架构只是起着抛砖引玉的作用,只介绍大概的架构只介绍大概的架构.本架构注重的是可以动本架构注重的是可以动态扩展集群种的服务器。关于图片附件态扩展集群种的服务器。关于图片附件,数据备份等架构数据备份等架构,今天不作介绍今天不作介绍.有兴趣的话可以找我讨论有兴趣的话可以找我讨论.已有类似本架构的微博系统已经在
2、实际运用已有类似本架构的微博系统已经在实际运用IDID一致性的一致性的一致性的一致性的问题问题 通常通常IDID是由是由mysqlmysql自增来产生的自增来产生的.但是在分布式集群里这样的自增但是在分布式集群里这样的自增IDID就带来各就带来各个服务器之间的一致性的问题。在本架构中的唯一个服务器之间的一致性的问题。在本架构中的唯一IDID是由是由rdtsc+rdtsc+两位随机两位随机整数拼接而成的整数拼接而成的6464位整数位整数 唯一唯一IDIDKey GPS ServerKey GPS Server KGSKGS是本架构重要组成部分是本架构重要组成部分.GPS.GPS大家都知道是定位的
3、意思大家都知道是定位的意思.发送一条数据的发送一条数据的IDID过去。过去。KGSKGS就会告诉你该就会告诉你该IDID所对应的数据存放在哪几台服务器上所对应的数据存放在哪几台服务器上.KGS.KGS是基是基于于TokyoCabinetTokyoCabinet存储存储,epoll,epoll 事件驱动的单进程事件驱动的单进程socketsocket serverserverYour company sloganYour company slogan 所使用的开源工具所使用的开源工具 LVS+LVS+NGINX+PHPNGINX+PHPNGINX+PHPNGINX+PHP1 1 MySQL+ha
4、ndlersocketMySQL+handlersocketMySQL+handlersocketMySQL+handlersocket2 2 RedisRedisRedisRedis、Tokyo Cabinet Tokyo Cabinet Tokyo Cabinet Tokyo Cabinet 3 3 zeromq(zeromq(消息队列消息队列消息队列消息队列)4 4Your company sloganYour company slogan整整体体的的架架构构图图架构架构图原图请见 架构.pngYour company sloganYour company slogan架构具体讲解架构具
5、体讲解访问流程图访问流程图看了架构图,到处都是线,是不是觉的很乱,眼花缭乱的.不要着急,现在我要以流程图慢慢的引领大家看清楚这个框架Your company sloganYour company slogan名词解说名词解说Handler socketHandler socketHandler socketHandler socket大家刚才可能比较奇怪大家刚才可能比较奇怪,我的主题讲的是完全用我的主题讲的是完全用nosqlnosql打造微博系统打造微博系统,怎么会又出现怎么会又出现了了mysqlmysql了了?现在给大家介绍现在给大家介绍 Handler socketHandler sock
6、et。HS HS 是小日本写的一款是小日本写的一款mysqlmysql插件插件.HS.HS避开了避开了MySQLMySQL通讯协议通讯协议,直接读取直接读取MySQLMySQL引擎。在多核、大内存、引擎。在多核、大内存、InnoDB InnoDB引擎引擎环境环境,性能直超性能直超memcached.HSmemcached.HS能以能以Key-ValueKey-Value方式直接读写方式直接读写mysqlmysql引擎引擎ZeroMQZeroMQ ZMQZMQ是高性能的消息队列服务器是高性能的消息队列服务器.单纯的发简单的小文本消息和单纯的发简单的小文本消息和pythonpython的函数调用的
7、函数调用一样快一样快.publish.publish操作是个很耗时的操作操作是个很耗时的操作.所以让所以让publishpublish集群从集群从ZMQZMQ取发布信息,取发布信息,在后台并行在后台并行publish,publish,大大的提高发布效率大大的提高发布效率.当当publishpublish速度跟不上的时候速度跟不上的时候,只要增只要增加加publishpublish服务器就行服务器就行.Key GPS ServerKey GPS Server 刚才简单的介绍过刚才简单的介绍过KGS,KGS,我再稍微深入一点介绍一下我再稍微深入一点介绍一下KGS.KGSKGS.KGS是用是用TCT
8、C来做物理存储来做物理存储的的.把把KeyKey跟服务器的关系记录在跟服务器的关系记录在TCTC的的 hashdbhashdb里里.这样做到多个服务器备份存储、这样做到多个服务器备份存储、权重、最小存储量优先级等一系列操作权重、最小存储量优先级等一系列操作.Your company sloganYour company slogan数据分布结构数据分布结构RedisRedisRedisRedis主要存储的是发布者和订阅者之间的关系。关系结构主要是以队列主要存储的是发布者和订阅者之间的关系。关系结构主要是以队列+各种信各种信息的息的6464位唯一位唯一IDID组成组成,所以存储量是很小的所以存储
9、量是很小的.虽然存储量很小虽然存储量很小,但是操作量很大但是操作量很大.所以放在所以放在redisredis上上,redis,redis以纯内存的方式运行以纯内存的方式运行,不启用不启用redisredis自身的热备份自身的热备份.在运在运行行RedisRedis服务器上,同时运行着服务器上,同时运行着backend backend 同步进程。同步进程。BackendBackend的用的用TCTC来存储的来存储的.在在信息发送给信息发送给RedisRedis的同时的同时,也发送给也发送给backendbackend进行存储进行存储.当当redisredis重启的时候重启的时候,从从backen
10、dbackend加载用户的结构关系加载用户的结构关系.Redis.Redis的集群方式是以水平方式切换的集群方式是以水平方式切换.简单来说就简单来说就是每台是每台RedisRedis服务器存储着各自服务器存储着各自5w5w用户量用户量.这个数值可以根据各自的情况定义这个数值可以根据各自的情况定义MySQLMySQL mysqlmysql存储的是实际信息内容存储的是实际信息内容,比如微博信息,和用户信息比如微博信息,和用户信息.把操作很密集的数据把操作很密集的数据,放在放在RedisRedis里里,相对小一点的就放在相对小一点的就放在mysqlmysql里里Your company slogan
11、Your company sloganMySQLMySQL表结构表结构Your company sloganYour company sloganRedis listRedis list数据结构数据结构example4example4Redis 数据结构 list1.Following(有多少人订阅我的微博的列表)2.Followers(我订阅谁的微博的列表)3.Publish(我发布的微博消息列表)4.Subscribe(我订阅的消息包括我发布的信息)Your company sloganYour company slogan总结总结明星会员问题明星会员问题明星会员问题明星会员问题所谓的明星
12、会员问题所谓的明星会员问题,就是刘德华来咱微博开了个微博。他有成千上万个订阅就是刘德华来咱微博开了个微博。他有成千上万个订阅者者.他发布一条微博消息。那得一下子发布到成千上万个订阅者那。多来他发布一条微博消息。那得一下子发布到成千上万个订阅者那。多来几个刘德华这样的明星微博几个刘德华这样的明星微博,咱们服务器不是要死翘翘了。所以我这里有咱们服务器不是要死翘翘了。所以我这里有个个publishpublish集群集群,根据订阅者分为活跃用户,一般用户,半死不活用户根据订阅者分为活跃用户,一般用户,半死不活用户.根根据活跃度分到不同的快速据活跃度分到不同的快速publishpublish服务器或慢速
13、服务器或慢速publishpublish服务器里去服务器里去.因为因为是纯内存的只是在是纯内存的只是在redis listredis list里加个信息里加个信息IDID。还是很快的。还是很快的理解不了本架构理解不了本架构理解不了本架构理解不了本架构 对于本架构理解的同学对于本架构理解的同学,请先阅读一下请先阅读一下Retwis.RetwisRetwis.Retwis是完全用是完全用redisredis写的简写的简单微博系统单微博系统,再结合本架构,多看几次就懂了。很快的再结合本架构,多看几次就懂了。很快的集群集群集群集群 本架构讲究的是高可用本架构讲究的是高可用,稳定,可动态扩展的架构稳定,可动态扩展的架构.谢谢大家谢谢大家