sina weibo架构与关系存储

草草整理的网络的





  • 1.构建可扩展微博架构TimYang 新浪微博技术架构师

  • 2.从博客到微博

  • 3.博客功能 发表 浏览 留言 ContentManager System

  • 4.博客技术 ,LAMP MySQL master/slave Memcached PHP CDN

  • 5.微博微博,产品 Real-time关注关系信息聚合

  • 6.信息聚合

  • 7.信息聚合微博两种信息聚合设计模式 Push()Pull( )

  • 8.Push 把微博看做邮件Inbox:收到的微博Outbox:已发表微博发表:存到所有粉丝 inbox()查看:直接访问Inbox()

  • 9.Push(Figure) User A UpdateAction Inbox (Append to 1’s hometimeline) Inbox (Append to 2’s home timeline) Inbox (Append to 3’shome timeline) Followers of User A = 1, 2, 3

  • 10.Push 优点:实现简单,首选缺点:分发量

  • 11.Pull 发表:存到自己outbox()查看:所有关注对象Inbox()

  • 12.Pull User I Get home_timeline Outbox (statuses sent by A) Outbox(Statuses sent by B) Outbox (Statuses sent by C) User I’sFollowing List = A, B, C

  • 13.Pull 优点:节约存储缺点:计算量大

  • 14.微博是一个消息分发系统可采取推或拉的方式实现

  • 15.架构挑战:峰值-如除夕、春节

  • 16.请求量如果发表量 5,000/天 平均:578/秒设计系统容量: 2,000?

  • 17.IO 瓶颈峰值: 5,000– 10,000? 100,000?

  • 18.后果LatencyDB read timeout 前端timeout(503 error) 解决方案?

  • 19.异步设计不同步等待 将消息存入消息队列 (MessageQueue) 轻量级的发表

  • 20.MQ products Kestrel by twitter RabbitMQ, an Erlang Queue ServerMemcacheq 在新浪微博项目大规模使用

  • 21.Memcacheq 基于Berkeleydb, 稳定可靠Memcachedprotocol, 丰富的clientlibrary 容易监控(statsqueue) 只有2个命令:get/set

  • 22.避免单点故障核心服务,需避免单独故障 方法 使用多个 MemcacheqGet操作:轮询所有服务器Set操作:随机选择一个无需其他复杂“架构”设计

  • 23.MQ 方式通用的优点Offlinework 应用请求量不均衡解耦 异步通讯 原则

  • 24.使用MQ原则计算开销大于消息分发开销

  • 25.架构挑战:实时性

  • 26.越重要的事件,越希望实时性

  • 27.The value of the tweet decreases exponentially with time JohnKalucki, Twitter http://t.sina.com.cn/pub/star#a_ty

  • 28.解决思路Cache中心化Ramis the new the disk

  • 29.Local Cache Memcached Database buffer/cache

  • 30.LAMP 中,cache=可选层Cache中心化后新的问题

  • 31.容量问题TB级思路:压缩 QuickLZLZO 不用gzip

  • 32.单点问题单点故障 ,SIGSEGV 如何应对1.Consistent hash 2. Read-through cache

  • 33.Consistent hash 原理优点 震荡最小

  • 34.Read-through cache

  • 35.Read-through and Write-through Products or projects MySQL memcachedUDF Cache money for Ruby on Rails Or wrap a proxy for the db driver,in any language

  • 36.Evictions 问题Evections:cache 数据被踢性能的噩梦 Latency产生的源头之一

  • 37.如何避免evictions规划cache容量将永久数据与临时数据分开 不使用随机字符作为 key

  • 38.Multiget 问题Whenmemcached servers are CPU bound, adding more memcached serversdoesn't help serve more requests. - Jeff Rothschild, Vice Presidentof Technology at Facebook

  • 39.Cache 挑战:multigethole

  • 40.解决方法Memcachedreplication

  • 41.架构挑战:海量存储

  • 42.架构挑战:国内网络带宽问题

  • 43.地理分布考虑到以下原因,需要分布式部署 访问速度 IDC不可用故障 分布的核心是数据分布

  • 44.数据地理分布原理Master-slaveMaster-master 2PC/3PC Paxos http://timyang.net/data/multi-idc-design/

  • 45.地理分布的方案MySQLmaster/slave Dynamo/Cassandra PNUTS

  • 46.架构挑战:API访问量

  • 47.以新浪微博开放平台为例RESTAPI 编程简单,library丰富可用 curl,javascript 实现一个client缺点单向询问方式如何解决轮询压力

  • 48.解决方案:SinaApp Engine Sina App Engine 应用云平台提供微博API底层支持并可以 host微博app

  • 49.微博,Web 2.0 最核心技术之一还有更多的架构挑战等待解决 欢迎加入新浪微博技术团队

  • 50.Q&A 新浪微博:@TimYang Twitter: @ xmpp Email: iso1600 @ gmail.com



新浪微博至今发言或评论要刷新点按多次才能发出,有时weibo.com都无法访问,这些都是scalable扩展性做得不是非常线性的现象所在。


这里主要从 存储和接口角度来讲

对于大流量系统的架构设计,对于写入方面是特别需要注意的,基本上现在遇到的系统都是对于主数据库的写入,然后对于从数据库实现流量的分发。

对于存储,记得公司老大说过,对于BD的项目的架构如果从设计上可以达到20PB的存储规模不出什么大的问题,就说明这个架构设计是合格的。

对于存储,新浪微博使用了redis的部分功能,主要用在用户信息方面的使用,现在只有单机设计,但是对于现在的单机完全可以提供大量的内存比如32G以上,完全可以达到存储数据的要求。

对于MYSQL这里所涉及到的就是设计规范和分库分表,最大的感触是大家为了便利就直接用自增的ID来进行,对于唯一ID的设计也是我一直注意的,因为唯一的设计是涉及到全局的。

将将自己最近总结的PHP和微博架构方面:

1.进行快速开发的过程中,订好规范,按照规范执行是非常的重要的,涉及到的沟通会比较少,其实和其他人联调是很费时间的。

2.对于性能跟踪方面使用使用xhprof来跟踪PHP的执行过程及性能问题,可以初略的估计出来。

3.对于核心代码的复用程度及核心的代码量的把握,核心要灵活可扩展而且保持小

4.技术选型比如对于使用memcache扩展和memcached的扩展还是很重要的

5.对于代码的目录结构和命名还是挺重要的,phpautoload不要搜索太多的目录会比较好

6.考虑下工具类的复用,一直在造轮子每次都重写一遍,这个不是很郁闷的事情,怎么样让这些类不要耦合的太紧?设计很重要

7.对于有些服务是PHP做起来不合适的,比如spam模块的高危词过滤还是用C/C++模块来处理比较好。

8.微博技术的应用Inbox/Outbox/Timeline/Following/Follows/Feed/MQS

9.推荐算法和消息推送的处理,各种高并发的处理




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值