新浪架构师谈微博架构

合集下载

微博架构ppt

微博架构ppt
微博cache设计谈
@TimYang 新浪内部培训资料
Agenda
微博Cache设计 微博架构经验谈
Feed架构简介
微博技术的核心
数据的分发、聚合及展现 每条微博, 在技术上也称为status或feed 如
Feed架构
微博两种feed设计模式 Push(推) Pull(拉) 复合型
Pull
优点:节约存储 缺点:计算量大,峰值问题
共同的难题
峰值挑战 我们使用异步处理方式
Cache
memory is the new disk, and disk is the new tape. for "real-time" web applications, and systems that require massive scalability - Jim Gray
cache经验谈
流量、带宽 hot keys 规划 mutex
流量
以打开首页时候获取Content cache为例 multi get n 条feed(n = items/页, e.g. 50) cache 大小 = n * (feed长度 + 扩展字段,
e.g. 2k)
并发请求,如 1,000次/秒 总流量 = 50 * 2k * 1,000 / sec = 100MB
带宽
1,000并发,需要800Mbps带宽 1万并发,需要8Gbps 内网流量
带宽
在1G内网,只能压力到 300~400Mbps 需要优化 将热门数据加载到local cache 压缩 复制
hot keys
content cache of 姚晨 create local cache
技术交流 code review流程 技术交流方式

新浪微博架构与平台安全演讲稿

新浪微博架构与平台安全演讲稿
数据
• 重新思考 Rest API
• 大部分调用都是空返回 • 大部分时间在处理不必要的询问 • 无法实时投递 • 存在请求数限制( limit) (rate
如何解决
• 新一代推送接口(Stream API) (Stream • 采用推送的方式
• 有新数据服务器立即推送给调用方 • 无数据则不消耗流量 • 客户端实现更简单

数据压力及峰值
• •
将数据、功能、部署尽可能拆分 部署尽可能拆分 提前容量规划
平台化需求
• Web 系统
• 有用户行为才有请求
• API 系统
• 轮询请求 • 峰值不明显 • 用户行为很难预测
• 系统规模持续增大 • 平台化需求 • 新的架构如何设计 新的架构如何设计?
• “Break large complex systems
• 类似 mysql seconds behind master
• “Many services are written to alert
operations on failure and to depend upon human intervention for recovery, about 20% of the time they will make mistakes.
• 2. YMB is designed for wide wide-area
replication. This isolates individual PNUTS clusters from dealing with update between regions”
新推送架构
现状
• API 大部分请求都是为了获取最新
微博方案

微博架构方案

微博架构方案
-采用分布式搜索引擎,如Elasticsearch;
-提供微博内容全文搜索,优化用户体验;
-实现实时搜索,提高搜索效率。
四、网络安全与数据保护
1.网络安全
-部署防火墙、入侵检测系统,防止恶意攻击;
-使用安全协议,如HTTPS,保障数据传输安全;
-实施严格的权限管理,防止内部数据泄露。
2.数据保护
-对用户敏感数据进行加密存储和传输;
-分析监控数据,优化系统性能。
六、实施与验收
1.实施计划
-制定详细的项目实施计划,明确时间节点、责任人和验收标准;
-按照实施计划,分阶段推进项目实施;
-组织技术培训,确保项目团队具备实施能力。
2.验收标准
-系统稳定性:确保99.99%的在线时间;
-性能指标:满足业务需求,响应时间不超过500ms;
-数据安全:无数据泄露事件发生;
微博架构方案
第1篇
微博架构方案
一、项目背景
随着互联网的快速发展,社交媒体已经成为人们日常生活中不可或缺的部分。微博作为国内领先的社交媒体平台,为广大用户提供了一个实时信息分享、互动交流的场所。为了满足日益增长的用户需求,保障平台稳定、高效运行,现需对微博平台架构进行优化升级。
二、方案目标
1.提高系统稳定性:确保平台在高并发、高负载情况下,仍能稳定运行,降低故障率。
(2)采用分布式设计,提高系统性能,确保高并发场景下的稳定运行。
(3)引入负载均衡技术,合理分配请求,提高资源利用率。
2.数据库设计
(1)采用关系型数据库存储用户数据,如MySQL、Oracle等。
(2)采用NoSQL数据库存储非结构化数据,如MongoDB、Redis等。
(3)建立合理的索引策略,提高数据查询速度。

新浪微博整体分析

新浪微博整体分析

新浪微博分析微博又叫微博客 (micro blog),是微型博客的简称,基于web2.0技术的即时信息发布系统。

是一个基于用户关系的信息分享、传播以及获取平台,用户可以通过WEB、WAP以及各种客户端组件个人社区,以140字左右的文字更新信息,并实现即时分享。

与传统博客相比,以“短、灵、快”为特点。

140字左右的文字更新信息,并实现即时分享。

微型博客可分为两大市场,一类是定位于个人用户的微型博客,另外一类是定位于企业客户的微型博客。

微博客是信息日益碎片化的必然结果。

“围脖”是微博客的谐音,所以微博也称围脖。

微博客的代表性网站是美国的Twitter,是最早也是最著名的微博,这个词甚至已经成为了微博客的代名词。

新浪作为中国最大的门户网站之一,2009年八月新浪推出新浪微薄测试版,成为门户网站第一家提供微薄服务的网站,微薄正式进入中文上网人群视野!一、新浪微薄发展背景Web2.0时代。

新的媒体形态层出不穷,每一个新媒体形式的出现都意味着Web2.0的普及和网络的进步。

进入2010年,Web2.0更是狂飙突进,中国网民的参与度和活跃呈现爆炸式增长,这一情况的出现,与一种新媒体形态的诞生不无关系—微博。

网络与传统的博客相比,微博发布更便利、传播更迅速,发布字数限制在140字之内,方便用户通过电脑、手机等多平台浏览发布,所发布信息是传达,并可一键转发。

微博相比传统博客那种需要考虑文题、组织语言修辞来叙述的长篇大论,以“短、灵、快”为特点的“微博”几乎不需要很高成本,无论你是用电脑还是手机,只需三言两语,就可记录下自己某刻的心情、某一瞬的感悟,或者某条可供分享和收藏的信息,这样的即时表述显然更加迎合我们快节奏的生活。

微博微博客草根性更强,且广泛分布在桌面、浏览器、移动终端等多个平台上,有多种商业模式并存,或形成多个垂直细分领域的可能。

微博更符合现在人的生活节奏和习惯。

而新技术的运用使得用户更容易对访问者者留言进行回复,从而形成良好的互动关系。

新浪微博服务治理框架

新浪微博服务治理框架

SID
PSID Annotation
span ID,调用链中的一个节点,从请求开始到请求结束,生成方式同ReqID。
Caller spanID 该调用节点的类别,有API client/API server/RPC Client/RPC Server/其他中间件定 义 接口名称 开始时间和请求时间
Service Name Start/Process Time
服务化框架
监控平台
监控指标UI呈现 报警子系统 流量切换 服务治理平台 服务扩容 服务发布
RPC 数据聚合平台 Motan Registry 上报 资源日志 Push Motan Client
Cache Service … Config Server
上报
接口日志
上报 RPC日志
Push
Client
调用链标准化日志
ReqID SID PSID Annotation Service Name InterfaceNa me Start Time Process time Node IP 16位UUID RPC Node IP
Field ReqID
Description 请求序列号,在调用链入口生成,考虑使用节点IP地址+IDC机房编码+序列号生 成
10.5.2.1 IDC1: Motan Registry IDC2: 10.6.2.1 10.6.2.2 10.6.2.1 10.5.2.1 10.5.2.2 Push Motan Client 切换后数据流 10.5.2.1
10.6.2.1
问题:基于IDC的流量切换策略是否够用?是否需要增加按20/80比例的流量分发策略?
微博平台服务化框架
卫向军

新浪技术保障部运维架构师 王关胜 《构建高效的防御体系》

新浪技术保障部运维架构师 王关胜 《构建高效的防御体系》

微博平台护城河构建高效的防御体系@王关胜大纲微博平台业务介绍平台防御体系框架设计平台层实践新浪故障管理小结&QA1.微博平台业务介绍用户8亿注册用户8000万+DAU 1.75亿MAU系统200+集群3000+设备日均6百亿Hits运维99.99%Docker:53%变更:15次/周2.面临的挑战●产品功能迭代快,系统变更及代码上线次数多●突发的热点事件#周一见##且行切珍惜##马航370##刘翔摔倒#●每日不定时段的Push内容●业务上复杂的依赖关系●基于微博的大型运营活动:让红包飞,随手拍…●每年一度的三节保障&春晚大考3.突发流量峰值●热门事件:最大30倍瞬间峰值◆微博,转发,评论,赞◆长微博◆话题●典型案例:日常Push◆落地页:业务模块,如话题,热门微博◆下发速度:快,中,慢◆用户模型:全量,高中低频,地区,灰度模型(如尾号)◆用户互动时间:<1h◆分类:应用内Push,应用外Push,运营及活动Push大纲微博平台业务介绍平台防御体系框架设计平台层实践新浪故障管理小结&QA1.什么是防御体系架构容量监控干预实时性&报警快误报少&报警准无遗漏&覆盖全防御体系四要素性能好&冗余够快速动态扩容压测&容量预警极简的架构稳健的架构美丽的架构预案全&手段多操作快&方案细干预行之有效.快.全.准.简.美.稳.多.效.细.够.警.动2.防御体系框架四层七层Web RPCProcessor 规范业务日志Http MC(Q)资源层MySQL Redis Hbase 平台架构运维四化建设全链路SLA 运维数据接口分工&职责&KPI 标准流程规范监控容量架构干预定期巡检&演练7x24小时轮班定期培训知识管理防御标准化防御制度服务隔离快速失败大纲微博平台业务介绍平台防御体系框架设计平台层实践新浪故障管理小结&QA1.防御架构设计之防单点●防单点◆调用链路上避免单点无状态:前端,队列处理,RPC 支持503机制◆线性扩容,平滑上下线,在线调整业务代码层支持,运维只需改配置◆核心资源设计为分层访问缓存分级10G 10G 10G 10G Maste r 10G10G10G10GSlaveWebL1L1L1L1DB(1)select one of L1 cache (include master ),get from it(2) if L1 exist,return;if not exist,get from master.(3) if master exist, return, and set L1; else if not exist, get from slave(4) if slave exist, return,set master and L1;else if not exist,get from db(5) if db exist,return,set master,slave and L1;else throw exception(6)if has new data (mcq process),update all of L1,master, slave访问逻辑防御架构设计之隔离●隔离:80-20原则◆业务层:基于SLA的快速失败代码分层与服务化异步解耦合◆部署层:核心链路独立部署多机房容灾◆基础架构层:核心服务设备网络层隔离交换机上联容灾微博平台部署架构多机房部署核心服务独立域名,上下行分开七层独立部署核心服务独立服务池Tomcat线程保护快速失败服务化及独立部署核心资源独立部署外部依赖异步解耦隔离方法防御架构设计之多机房实践多机房组件●核心问题◆机房间延时:用户的请求应该在本机房内完成◆专线质量◆部署范围:核心业务路径本地部署依赖业务数据同步◆数据异地多写:部署业务消息化多机房同步组件(MytriggerQ,WMB)◆七层规则:非核心路径穿透北京◆数据一致性◆配置基础设施◆技术改造对线上业务的影响2.主动防御-监控体系新浪综合运维平台SinaWatchJpool_agentLogtailer SinaScri pt基础资源应用程序业务监控运维数据load cpu memswapNet disk inodepingIo proc threadtcp_c Message cs pgmf端口监控线程Jvm & GC Nginx 状态资源线程池&分布耗时接口稳定性(99.95%)Profile &WatchMan 集群单机健康状态部署层数据业务层数据资源层数据核心模块数据Diy Dashboard移动APP 联系人分组合并报警配额WEB警铃邮件短信私信同比&环比面积图趋势函数节点监控数据API平台业务监控实践●业务日志标准化:profile.log◆监控分类:7大类◆指标项:API 举例C-计数T-时间单位:ms指标total_countslowThresholdslow_countavg-timeival1ival2ival3ival4ival5说明调用量SLA 慢请求平台耗时<500<500-1s><1s-2s><2s-4s>>4s类型CTCTC C C C C资源层APIMC&MCQ MySQL 依赖SERVICEHTTP 依赖Hbase 依赖Redis 依赖API 日志样例:{"type":"API ","name":"/statuses/friends_timeline","slowThreshold":0,"total_count":0,"slow_count":0,"avg_time":"00.00","interval1":0,"interval2":0,"interval3":0,"interval4":0,"interval5":0}业务监控方案●监控选型:Logtailer+Statsd+Graphite●Logtailer封装◆Python实现的agent◆分布式1存储(一致性Hash)◆打包发送(UDP协议)◆本地Cache(10s)●Graphite优化◆高可用部署◆接入Memcached◆Whisper I/O优化(合并写)●监控数据量◆Metrics:Statshd:90k/s Carbon:1800k/s◆指标项:1000+◆报警:<300LogtailerStatsdNginxHAproxycarbon-relaywhispercarbon-cachewhispercarbon-cachewhispercarbon-cachecarbon-relay graphite-webweb app基于Graphite的方案业务监控Dashboard●Graphite Dashboard◆丰富的函数操作及聚合规则◆定制用户自己的Dashboard◆移动端APP◆强大的接口业务模块DashboardAPP端Dashboard APP端报警通知业务监控-完善方案改进版业务监控集群App logJvm loglogstashKibanaElasticSearchStatsDMfiter Graphite资源依赖Http 依赖服务依赖RPC依赖层4/7层Sina WatchSina ScriptsSina Atp用户日志查询报警平台DashboardSpark HbaseWatchManTrace UI部署线日志查询报警平台业务Dashboard Trace单机健康状态监控●集群单机健康状态监控◆指标定义◆实现方案◆数据通道:agent(Python)->SinaWatch ->API ->Dashboard ◆健康状态判断:算法(区间权重+优先级+硬性指标)◆数据展示:异常的节点可获取异常数据分类影响因素好-正常坏-亚健康糟糕-异常系统Load <1212<X<24>24Cpu_idle <30%10%<X<30%<10%Iowait <20%20%<X<35%>50%Swap<500M 1G<X<2G >2G 业务5xx 错误比率<1%1%<x<5%>5%接口平均耗时<100ms100-500ms>1s产品展示图3.主动防御-容量评估●平台容量评估实践◆压力测试方式:集群容量数据一览图 单接口压测:模拟请求(http_load)单机压测:✓线上引流:Tcpcopy(放大/多台引至一台)✓调整Nginx权重:平台自动化化压测系统服务池压测:全链路压测✓机房间流量切换(核心服务)✓Nginx upstream自动变更ps:粒度:1/单IDC Nginx集群数量资源容灾与压测:Touchstone(基于tc)◆容量评估产出:基于Python的自动化压测工具水位预警工具容量报表4.主动防御-干预手段 有效的干预手段是快速解决问题&故障的基石异常处理预案重启/回滚/紧急上线服务降级/封禁流量切换干预手段限流Docker 机动池数据修复快慢定期循检故障演练7x24小时轮班重大事件响应流程&制度操作方案扩容应急预案-服务降级降级Web UI●预案:100+◆日常&应急预案◆重大活动,三节等预案手册●服务降级:5000+◆原则:覆盖全,开关避免手输◆方案:业务代码框架层实现,动态修改运行时环境Tomcat监听端口,支持check/on/off/status集成运维工具系统◆范围:大纲微博平台业务介绍平台防御体系框架设计平台层实践新浪故障管理小结&QA1.新浪故障管理制度●组织形式◆实体故障管理组--跟进故障业务方及运维核心人员--解决故障◆虚拟:TDO-各部门专家支持故障Review,深入挖掘故障本因◆沟通方式:在线:电话,QQ及群,其他IM通知:短信,邮件●管理制度◆拥抱故障◆KPI--故障记分运营KPI与产品良好的用户体验挂钩处理故障能力与KPI挂钩◆奖惩制度:设立运维季度奖,涵盖面广人为故障,责任到人,通告及罚钱2.新浪故障处理流程•接收报障•判断是否为故障•启动故障通报流程•跟进处理进展•判断及启动升级策略•确认解决•发出恢复通报•故障讨论会•发送报告•跟进改进措施故障管理组流程•与报障来源部门确认具体现象确认故障现象故障通知•与TDO协调相关部门处理•每30分钟通报一次进展协调跟进•技术方向升级•故障管理方向升级•客服方向升级级别预判升级•第一时间通知主要工程师及TDO•10分钟内发出短信及邮件•确认故障恢复•5分钟内发出短信•召开故障讨论会故障解决•第一版报告故障4小时后发•故障报告最终版2个工作日内发出故障报告故障管理组主要工作运维&开发故障处理流程数据修复流程•周知相关领导及服务台•初步判断问题并定解决方案•如有上线及变更优先回滚•多方方案并行推进•以停止故障影响为目的•提交数据修复变更申请•主管审批并确定负责人•数据修复方案review•周知各相关方关注服务•实施数据修复3.新浪故障报告●故障定级◆级别:5级,E级为重要问题◆指标:6类,每类细化指标每个产品线指标不同,每类多级重要产品按功能模块划分多级,赋分◆公式:故障级别计算公式●故障原因◆原则:每一个故障及问题追查本因◆分类:研发类和产品线◆分级:一级分类和二级分类一级分类:✧网络类✧局方故障✧应用软件✧硬件设备✧系统类✧人为因素微博故障定级规则A级:85分以上B级:71-84分C级:61-70分D级:41-60分E级:41及分以下(备案不发)权重值衡量指标衡量指标级别30%1、影响微博功能220%2、影响服务时长315%3、影响用户范围415%4、用户投诉级别110%5、影响服务程度210%6、影响用户时段1故障评分64.5故障级别:C级微博故障报告单(要点)故障标题故障描述所属产品线影响功能故障级别影响时长开始时间发现时间恢复时间发现途径故障原因根本原因触发原因影响用户影响用户数计算方法投诉情况责任部门责任人故障分类处理过程改进措施服务影响时长=服务恢复时间-故障开始时间故障定级规则故障故障报告单。

微博系统架构的可信性研究

微博系统架构的可信性研究
2 1年 第 O 期 01 8
■ d i1 .9 9 . s 6 1 12 0 10 0 o : 03 6  ̄i n1 7 . 1 22 1 80 7 s
的可信性研究
庆 轩
( 清华大学 ,北 京 1 0 8 0 0 4)
摘 要 :文章 对微博 系统 架构进行 了介绍 ,提 出了新 产生的 问题 及改善 方案。 关 键 词 :微 博 系统;改善 方案 ;可信性
第一版微博服务一经推出,受到了中国广大网民的充分 认可,最早 的人人 网、开心网、博客和播客等各种社会 网络与交互方
式都没有受 到国内大众 的广泛参与,而微博这个 新事物 ,以它小巧灵便 、快捷 时尚的身姿挤入了继 Q Q、飞信后,国人参与人数
最多的网络服务。随着用户迅速攀升,原先 的 L MP架构已经不堪重负,最初的微 博发放 的推拉模式也受到了挑 战。 A
‘ \ \
旺三圊 E三 五 回 臣三
据 ,更 新的策略是 L U( 近最少使用 ) R 最 ,以及每 个 K V对的 有效时限。K V对存储有效 时限是在 me 由 A p 置并作为 端 p设
参数传给 ms 的。同时 m 采用是 偷懒替代法,HS s I 不会 开额外 的进程 来实时监测过时的 K V对并删除 ,而是 当且仅 当,新来

图1 me a h 的 应 用 mc c e
需要注 意的是,Me a h d使用内存管理数 据,所 以它 mc c e
是易失 的,当服务 器重 启,或者 Me a h d进程 中止 时,数 mc c e 据便会 丢失,所以 Me a h d不能用来保存持久数据。有很 mc c e 多人都 有错 误理解 ,认为 Me a h d的性 能非常好 ,相 对于 mc c e

新浪微博用户重新激活策略-构架新的微博骨架

新浪微博用户重新激活策略-构架新的微博骨架

了解一个公司的运营能力,可以单纯从骨骼角度分析。

来看下新浪微博过去几年于运营方面的骨骼结构:从几个并列维度来看,新浪微博主要依靠明星、名人、草根段子帐号、媒体新闻帐号、及微博达人等等产品推动。

但是:明星,在微博世界已然过气。

随着粉丝饱合,他们接触到了天花板然后一路下滑,相信你已经很久没有看到微博女王姚晨的微博转发到你的界面上。

名人:打击大 V 事件给了名人重大打击。

媒体新闻帐号:微博发展了这么些年了,媒体官号运营能力还是良莠不齐,除了抄与雷同之外,难得有新意。

财经类的帐号成千上万个。

关注某一个与关注所有没有太大差别。

微博达人:阿猫阿狗都可以冠以此名。

原来备受诟病的草根段子帐号,却在驱动着相当用户。

可见,驱动新浪微博用户的关键节点,也就是骨骼,出现了严重的问题。

导致依附在上面的用户纷纷流失:在 2009 年开始维持新浪微博大功率运行的骨骼系统,已经不能驱动用户获得新鲜的感觉或者信息。

原来的骨骼老化了。

新浪需要进化——构建新的骨骼系统。

进化原理基于新浪微博特征,可以将骨骼系统想像为重要信息传播节点。

整个新浪微博就是由无数个“重要信息传播节点”构成的。

新浪原来本意上的“重要信息传播节点”是由名人明星官微等构成。

综上所述,原来模式下的新浪微博的“重要信息传播节点”,全部出现问题。

我这里指的“新构架下的重要信息传播节点”,不是仅指粉丝多的大号,而是能为用户提供在“报纸,在腾讯或者搜狐新闻首页,在新浪首页,在报纸杂志上”看不到的信息的微博。

只有他们,能让微博用户看到在别处看不到的信息。

这些微博博主在源源不断的创造着。

就像是新的血液,他们滚动出来的信息让用户感觉到新鲜,增加了用户对新浪微博的粘性,反过来用户的追捧又进一步刺激他们的创造热情。

这是才是一个良好的生态系统。

现形式下微博用户的逻辑是这样的:多数微博用户还是时不时的要回微博看下,这个平台对他们的吸引力还在。

但关键是,他们隔 2 天再登陆微博后,所看到的信息还是平淡的信息流:重复的新闻帐号滚动。

新浪微博整体分析

新浪微博整体分析

新浪微博分析微博又叫微博客 (micro blog),是微型博客的简称,基于web2.0技术的即时信息发布系统。

是一个基于用户关系的信息分享、传播以及获取平台,用户可以通过WEB、WAP以及各种客户端组件个人社区,以140字左右的文字更新信息,并实现即时分享。

与传统博客相比,以“短、灵、快”为特点。

140字左右的文字更新信息,并实现即时分享。

微型博客可分为两大市场,一类是定位于个人用户的微型博客,另外一类是定位于企业客户的微型博客。

微博客是信息日益碎片化的必然结果。

“围脖”是微博客的谐音,所以微博也称围脖。

微博客的代表性网站是美国的Twitter,是最早也是最著名的微博,这个词甚至已经成为了微博客的代名词。

新浪作为中国最大的门户网站之一,2009年八月新浪推出新浪微薄测试版,成为门户网站第一家提供微薄服务的网站,微薄正式进入中文上网人群视野!一、新浪微薄发展背景Web2.0时代。

新的媒体形态层出不穷,每一个新媒体形式的出现都意味着Web2.0的普及和网络的进步。

进入2010年,Web2.0更是狂飙突进,中国网民的参与度和活跃呈现爆炸式增长,这一情况的出现,与一种新媒体形态的诞生不无关系—微博。

网络与传统的博客相比,微博发布更便利、传播更迅速,发布字数限制在140字之内,方便用户通过电脑、手机等多平台浏览发布,所发布信息是传达,并可一键转发。

微博相比传统博客那种需要考虑文题、组织语言修辞来叙述的长篇大论,以“短、灵、快”为特点的“微博”几乎不需要很高成本,无论你是用电脑还是手机,只需三言两语,就可记录下自己某刻的心情、某一瞬的感悟,或者某条可供分享和收藏的信息,这样的即时表述显然更加迎合我们快节奏的生活。

微博微博客草根性更强,且广泛分布在桌面、浏览器、移动终端等多个平台上,有多种商业模式并存,或形成多个垂直细分领域的可能。

微博更符合现在人的生活节奏和习惯。

而新技术的运用使得用户更容易对访问者者留言进行回复,从而形成良好的互动关系。

新浪架构师谈微博架构

新浪架构师谈微博架构

微博(Micro‎-Blog)顾名思义是‎微型博客,是一种基于‎用户关系的‎信息分享和‎传播平台,用户可通过‎浏览器、手机、及时通讯软‎件(MSN、QQ、Skype‎等)及外部AP‎I接口等多‎种渠道发布‎140字以‎内信息[1]。

支持跨平台‎交流、与移动设备‎无缝连接的‎技术优势,饱含Web‎2.0特质。

有这么一道‎题- 微博数据库‎设计:有A,B,C3个用户‎,A关注C,C关注A和‎B;A,B更新后C‎会收到信息‎提示,比如:2010-11-16 22:40 用户A 发表a1;2010-11-16 22:41 用户A 发表a2;2010-11-16 22:42 用户A 发表a32010-11-16 23:40 用户B 发表b1;2010-11-16 22:40 用户B 发表b2;问题1:如何设计数‎据表和查询‎?问题2:如果C关注‎了1000‎0个用户,A被10万‎个人关注,系统又该如‎何设计?问题1,我的解答是‎:设计两张表‎,一张用于表‎示用户us‎e r,有ID,用户名(usern‎a me),发布内容(messa‎g e),发布时间(time)等字段;另一张表用‎于表示用户‎之间关注,有ID,用户名(usern‎a me),关注的用户‎名,开始关注时‎间等字段。

回去想了想‎,发现如果数‎据表照我这‎样设计的话‎,问题2的情‎况就会产生‎大量的数据‎,但如果把关‎注的用户都‎写在一个记‎录里那样字‎符串可能会‎更大。

所以想听听‎诸位达人的‎意见,如果是你们‎会怎样设计‎数据表呢?问题1简单‎而且随意,直接跳过,估计面试的‎人都不会看‎。

问题2的困‎难在于:第一点.C关注的用‎户太多,设计上必须‎在显示C的‎页面的过程‎中,避免去数据‎库查询所有‎被关注的用‎户是否有更‎新。

第二点.第二点.A被关注的‎人太多,设计上必须‎在A更新的‎时候,避免去通知‎所有关注……为避免不必‎要的复杂连‎接关系,最好还是设‎计符合第三‎范式的关系‎数据。

杨卫华谈新浪微博架构

杨卫华谈新浪微博架构

在2010年的QCon北京大会上,InfoQ的编辑对杨卫华进行了采访,其中谈到了关于新浪微博系统平台应对各种问题的解决方案,以及正在开发中的新浪云。

杨卫华,新浪产品部技术经理,目前工作以新浪微博技术平台为主,曾负责过新浪IM等通讯服务端架构设计。

对互联网后端技术,分布式,网络编程,XMPP即时通讯等领域感兴趣。

曾组织多次广州及珠三角技术沙龙活动。

个人blog 为:/。

InfoQ:大家都知道,在美国有一个非常有名的信息分享平台叫做Twitter,而在中国,我们也有同样的方式,就是现在非常流行的新浪微博,它还有个非常温馨的名字,叫做围脖。

而新浪微博的架构就是杨卫华先生主持开发的。

今天我有幸采访到杨卫华先生,让他来给大家谈一谈,在新浪微博的技术架构方面,他们是如何为用户提供更好的性能、更好的服务的。

卫华先生你好,我的第一个问题是,在新浪微博上有很多名人,名人的微博一般都是非常热的,对它们的访问量也特别高,那么对于这些微博,您采用了什么样的方式来支持这种大数据量的访问呢?杨卫华(以下简称卫华):对于这个问题,我们做过专门的分析。

因为最近新浪微博有名人扎堆的现象,我们根据这个现象,从以下几个角度来进行解决。

首先根据中国的网络现状,比如说网通和电信,之间的网络访问速度会比较慢,我们考虑让用户能够访问就近的服务器,这样使用体验、速度都能达到要求。

我们根据新浪以往的经验,在全国部署了大量服务器,这样就为微博提供了硬件上的保证。

第二个方面,在程序优化的方面,在产品上线之前,我们进行了全方面的压力测试,如果系统在某个方面可能会出现瓶颈,比如名人的访问量比较高的话,我们就从那个角度去优化。

比如说Cache是否够用,数据库访问是不是瓶颈,这方面我们预先都有对压力的估计,然后会针对那些方面去做优化。

第三个方面,对于那些静态资源,比如图片、视频、JS脚本,我们有专业的CDN 来解决的,这样就能够保证全国的用户在访问新浪微博时都能够得到比较好的体验。

新浪微博的架构发展历程By杨卫华

新浪微博的架构发展历程By杨卫华

Push
• 优点:实现简单,首选 优点:实现简单, • 缺点:分发量 缺点:
Pull
• 发表:存到自己 发表:存到自己outbox(轻) 轻 • 查看:所有关注对象 查看:所有关注对象Inbox(重) 重
Pull
User I Get home_timeline
User I’s Following List = A, B, C
- Jeff Rothschild, Vice President of Technology at Facebook
Cache挑战:multiget 挑战: 挑战 hole
Application Max RPS of application < (A and B and C)
Multiget
Multiget (keys…)
Memcacheq
• 基于 基于Berkeley db, 稳定可靠 • Memcached protocol, 丰富的 client library • 容易监控(stats queue) 容易监控 • 只有 个命令:get/set 只有2个命令 个命令:
避免单点故障
核心服务, 核心服务,需避免单独故障 方法
地理分布的方案
• MySQL master/slave • Dynamo/Cassandra • PNUTS
架构挑战: 架构挑战:API访问量 访问量
以新浪微博开放平台为例
• REST API
–编程简单,library丰富
• 可用curl, javascript实现一个client
–缺点单向询问方式
异步设计
• 不同步等待 • 将消息存入消息队列 将消息存入消息队列(Message Queue) • 轻量级的发表

千万级规模高性能、高并发的网络架构

千万级规模高性能、高并发的网络架构

千万级规模高性能、高并发的网络架构经验分享本文通过介绍新浪微博的平台架构以及核心技术难点,对于大型网站的发展历程提出一系列理论和实际相结合的经验总结。

主要介绍:1.架构以及我理解中架构的本质;2.新浪微博整体架构是什么样的;3.在大型网站的系统架构是如何演变的;4.微博的技术挑战和正交分解法解析架构;5.微博多级双机房缓存架构;6.分布式服务追踪系统;7.总结。

在开始谈我对架构本质的理解之前,先谈谈个人对千万级规模的网站的理解,对这个数量级我们战略上要藐视视,战术上要重视。

先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右。

对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 。

为什么我们又不能说轻视它?第一,我们看它的数据存储,每天一百万的话,一年数据量的规模是多少?其次,刚才说的订单量,每一个订单要推送给附近的司机、司机要并发抢单,后面业务场景的访问量往往是前者的上百倍,轻松就超过上亿级别了。

我想从架构的本质谈起,希望大家理解在做架构设计的时候,从什么出发点开始,解决的什么样的问题。

架构,刚开始的解释是我从知乎上看到的。

什么是架构?有人讲,说架构并不是一个很悬乎的东西,实际上就是一个架子,放一些业务和算法,跟我们的生活中的晾衣架很像。

更抽象一点,说架构其实是对我们重复性业务的抽象和我们未来业务拓展的前瞻,强调过去的经验和你对整个行业的预见。

我们要想做一个架构的话需要哪些能力?我觉得架构师一个最重要的能力就是你要有战略分解能力。

这个怎么来看呢,第一,你必须要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中体现在方方面面,从定义一个函数,到定义一个类,到提供的一个服务,以及模板,背后都是要去重提高可复用率。

第二,分类能力。

做软件需要做对象的解耦,要定义对象的属性和方法,做分布式系统的时候要做服务的拆分和模块化,要定义服务的接口和规范。

新浪微博架构猜想

新浪微博架构猜想

新浪微博架构猜想定时轮询服务端,获得几分钟之后:采用Jsonp的方式STK_*****这些js中的callback的方法是动态生成的进入页面:直接获得html代码,应该是采用了全页面缓存这里面缓存的是页面的feed,不缓存好友数,头像这些,这些还是通过XHR来获得的动态页面部分静态化点击微博:出现的也是通过content cache过的这里面没有显示粉丝数,关注数,以及每个feed的评论、转载数,根据新浪微博架构的描述,这些是动态变化的,如果这个也缓存,用户体验以及准确度都达不到要求,老是变动会失去缓存的意义,所以,这些是通过XHR去服务端请求的,如下图:点击粉丝:点击关注采用的技术和点击微博一样,全页面缓存PS:为什么新浪微博更新(新发表,评论,好友数等),需要手工去点击?因为新浪微博采用了全页面缓存的方式,点击的动作刚好触发去做整个页面缓存。

评论:直接返回的是评论内容的HTML,避免页面渲染轮询feed轮询回来的结果通过STK这个方法,来判断是否有更新,如果都为0,则不更新,否则提示有新的更新,然后让用户点击。

返回的是是否有新的评论,新的feed数,可见服务端肯定保存了我当前获得的那条最新记录数,应该是放在vector cache(feed id list)中,架构:To Push or to pull It’S a question新浪采用了什么技术来实现这个最核心的问题的呢?Feed架构Push:简单,但是当量打的时候,则分发到所有粉丝那边就变得比较麻烦,如小潘同学这种微博控,粉丝数有250w+,他发一条消息,如果采用push,简直就是自虐嘛Pull:存储量少,但是要在线进行计算,比如我有40个关注的对象,那我每次需要把40个人的feed都拿出来,然后根据时间进行排序,而且翻页也有问题,所以基本上纯pull不太靠谱新浪应该是采用复合型的方式,push+pullRead:首先读inbox,然后在获取关注列表,然后读取关注列表中的outbox,最后信息进行聚合,生成新的inbox的vector cache当第一次的时候,inbox的hot cache为空,则从所有关注列表的outbox的vector cache中获得id,然后进行聚合,最后生成一个新的inbox 的hot cacheWrite:每个在线用户生成一个inbox,然后当关注的人发表一条微博的时候,会向这个人的inbox中插入一个id,格式如:feed{1,2,3,4…100},这样可以减少所有用户那边插入数据,又可以减少计算的代价Cache前面的Inbox和outBox和索引比较类似,只存储了feed的id列表Social graph这个就是列表和用户的资料最后一个是内容缓存,比如热门的那些内容放到hotCache中,还有就是全页面缓存以及预热生成json和xml给openAPICache 结构第一部分就是inbox:微博我的首页开始的ID列表,完全是内存里面,但是有一个缺点,我们要添加元素需要先GET再SET第二部分outbox发出微博有存储最新ID在于聚合(key为自己)。

新浪微博技术架构分析

新浪微博技术架构分析

新浪微博技术架构分析-中国首届微博开发者大会在举行,这是国微博行业的首场技术盛宴。

作为国微博市场的绝对领军者,新浪微博将在此次大会上公布一系列针对开发者的扶持政策,以期与第三方开发者联手推动微博行业的整体发展。

图为微博平台首席架构师卫华演讲。

以下为演讲实录:大家下午好,在座的大部分都是技术开发者,技术开发者往往对微博这个产品非常关心。

最晚的一次,是12点多收到一个说想了解一下微博底层是怎么构架的。

很多技术人员对微博的构架非常感兴趣,就是一个明星他有300万粉丝,这个技术怎么来实现?今天在这里跟大家分享一下微博的底层机构,让大家对微博的底层技术有更好的了解。

另外不管是做客户端、1.0、2.0、论坛、博客都要考虑架构的问题,架构实际上是有一些共性的。

今天我通过讲解微博里面的一些架构,分析一下架构里面哪些共性大家可以参考。

首先给大家介绍一下微博架构发展的历程。

新浪微博在短短一年时间从零发展到五千万用户,我们的基层架构也发展了几个版本。

第一版就是是非常快的,我们可以非常快的实现我们的模块。

我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。

我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版的架构实际上就是这两行字。

第一版本的技术细节,典型的LAMP架构,是使用Myisam 搜索引擎,它的优点就是速度非常快。

另外一个是MPSS,就是多个端口可以布置在服务器上。

为什么使用MPSS?假如说我们做一个互联网应用,这个应用里面有三个单元,我们可以由三种部署方式。

我们可以把三个单元部署在三台服务器上,另外一种部署模式就是这三个单元部署在每个服务器上都有。

这个解决了两个问题,一个是负载均衡,因为每一个单元都有多个结点处理,另外一个是可以防止单点故障。

如果我们按照模式一来做的话,任何一个结点有故障就会影响我们系统服务,如果模式二的话,任何一个结点发生故障我们的整体都不会受到影响的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微博(Micro-Blog)顾名思义是微型博客,是一种基于用户关系的信息分享和传播平台,用户可通过浏览器、手机、及时通讯软件(MSN、QQ、Skype等)及外部API接口等多种渠道发布140字以内信息[1]。

支持跨平台交流、与移动设备无缝连接的技术优势,饱含Web2.0特质。

有这么一道题- 微博数据库设计:有A,B,C3个用户,A关注C,C关注A和B;A,B更新后C会收到信息提示,比如:2010-11-16 22:40 用户A 发表a1;2010-11-16 22:41 用户A 发表a2;2010-11-16 22:42 用户A 发表a32010-11-16 23:40 用户B 发表b1;2010-11-16 22:40 用户B 发表b2;问题1:如何设计数据表和查询?问题2:如果C关注了10000个用户,A被10万个人关注,系统又该如何设计?问题1,我的解答是:设计两张表,一张用于表示用户user,有ID,用户名(username),发布内容(message),发布时间(time)等字段;另一张表用于表示用户之间关注,有ID,用户名(username),关注的用户名,开始关注时间等字段。

回去想了想,发现如果数据表照我这样设计的话,问题2的情况就会产生大量的数据,但如果把关注的用户都写在一个记录里那样字符串可能会更大。

所以想听听诸位达人的意见,如果是你们会怎样设计数据表呢?问题1简单而且随意,直接跳过,估计面试的人都不会看。

问题2的困难在于:第一点.C关注的用户太多,设计上必须在显示C的页面的过程中,避免去数据库查询所有被关注的用户是否有更新。

第二点.第二点.A被关注的人太多,设计上必须在A更新的时候,避免去通知所有关注……为避免不必要的复杂连接关系,最好还是设计符合第三范式的关系数据。

我想至少应该设计三张表,分别是:用户表user:ID,username...;关注关系表attention: ID->ID;发布信息表in fo:ID->message;三张表的设计是比较规范的,至于用户和关注之间的关联要看需求,做join也可以,做DataMap也可以。

个人觉得,需要的逻辑关系在哪儿,而且要进数据库,想不数据量大都不行。

当然关注可以不做在一张表中也是一个选择,按关系类型分开走,可以减少特定需求的查询量。

这玩意得丢内存里头吧memcached 发新的话题的话丢队列里头写数据库去user{befollow[0...n];post[0...n];topics[0..n];}然后,user[befollow[k]].topics=current_user.topics[j];用户只要检查topics就好了要不每次上来来个join什么的,估计数据库就挂了是直接写到数据库的,不能用join,发贴后就丢队列里,向每一个follow我的人的tweet写数据不能用纯粹的关系数据库来解决问题,因为数据量和访问量都很大。

所以设计必须首要考虑性能问题。

我假定前提,1、一个用户不经常更改他的关注对象,2、用户添加关注对象的操作远多于移除关注对象的操作。

3、用户发微博的频率是比较高的,要比更改关注用户操作的频率高。

4、消息的通知到达时间用户是不敏感的有了这些前提,我们做平衡处理。

我们可以忍受1、较慢的删除关注用户操作2、比删除操作快但比发微博操作慢的添加关注用户操作。

3、快的微博提交操作4、慢的消息通知我们每一个用户建立一个InBo x和OutBox,InBo x包含关注我的用户ID,OutBox是我关注的用户ID。

Box分为三个部分,一个是基准Box,一个是添加Bo x,一个是删除Bo x,实际的Box数据是基准Bo x和添加Box的并集和删除Bo x做差集后得到的集合。

1、用户插入关注用户,在用户的OutBox的添加Bo x加入一条,同时在被关注用户的InBo x的添加Bo x也加入一条添加2、用户删除关主用户,在用户的OutBox的删除Bo x加入一条,同时在被关注用户的InBo x的删除Bo x也加入一条添加3、微博产生后发送消息,将发送微博的用户的InBox(其中含基准Box,插入Bo x和删除Box)连同微博操作连接一起发送给消息处理器。

4、消息处理器合并Box,并把Bo x的内容回写到发送微博用户的InBo x的基准Box中。

5、在后台添加一个Bo x合并进程,缓慢的合并用户的Box数据。

6、前台在展示的时候,因为没有合并,展示列表展示OutBox的基准Bo x和我新添加用户的Bo x以及删除用户的Box内容。

前台展示是需要商榷的,看PUM是否接受这种方式,如果不接受,我们只能在刷新时预测查询基准表,并且在页面合并。

因为前台展示通常是分页的,这样会比较难获得准确的分页量,每页的显示量会不同。

如果需要更高的要求,我们只能再添加其他数据结构。

如果需要更快的算法,我们必须抛弃关系数据库,将用户用B+树做索引,对于Box进行另外处理,需要论述的话,能写一个论文了。

更正一下,抛弃关系数据库可能更好的方式是,用用户ID做Hash索引,因为用户不删除,只增加。

同时,我们可以采用的物理架构和产品,我们需要找到一个轻量级的数据库存储引擎,例如我们可以用BDB,操作系统可以用vxWorks,然后专门针对消息发送和Bo x做一套系统。

更正设计,InBox可以不需要,采用客户端拉的机制,可以去掉InBox,带来的问题就是你必须在线才能得到通知。

InBox会很大,需要平衡,像姚晨这样的,会把消息处理器累死,所以,需要筛选,消息处理器的需要另外设计。

消息处理器可以去掉,当用户上线时,查阅关注博主的博文变更记录,根据阅读标志,阅读标志为每个用户建立一组。

进行伪消息通知。

消息处理器存在于需要主动推送的场合。

例如,短信和邮件。

不是所有的用户都会进行短信订阅的,所以消息处理器的负载可以减轻。

陆兄的意思是不是:用DBMS底层的数据库引擎或相关数据结构(比如哈希,B+树等)重新设计一个适合微博应用环境的数据库,而不是利用现有的DBMS进行设计?数据库是需要的,但不应该是关系型的。

自己做数据库是可行的,在这个应用中,或者说需要高速处理的“热”数据中,是不需要关系的,也不应该用关系数据库的设计范式来约束设计。

对于Box这样的数据结构,是不需要保存在一个关系数据库的数据表中的。

做成Hash表会很好,当然可以采用现有的数据库产品,把Box的索引类型定义为Hash的。

很多数据库产品是可以这样处理的。

但是,这样会有麻烦,因为Box和用户紧密关联的,不可能为一个用户去建立一个Hash索引的表,这样你又不得不回到关系数据库的老路上去了。

你可能会说,我可以定义在Hash主键中包含用户的账号,这样Bo x的数据自然会按照用户分开了。

但是,需要获取用户整个Box数据的时候又碰到麻烦,没有和用户关联的索引去快速检索。

能做的就是把Bo x保存在内存或者独立的文件中,在这种应用中对数据完整性的要求是很低的,Box应该在内存中保存,在适当的时机脱水持久化。

而且活跃的Bo x可能很少很少。

所以我的建议是分别处理,持久化一块,“热”的实时播发一块,持久化为了简便采用传统的关系数据库是可以的。

为了性能,需要特别处理。

全部的设计,会很复杂,作为面试题,太难了!为了提高处理能力,并行是不可避免的,需要把Bo x这样的结构分解分发在不同的机器上处理。

但是在这样的应用中,事务又是不需要的,数据完整性也是不需要的,甚至不需要日志来恢复数据,并行处理的时候用传统的RDBMS又会有瓶颈。

所以这不是一个数据库设计问题。

靠做关系数据库的设计是完成不了这样的任务的。

就是一个查询时间换空间的问题本人认为在10万条以内,直接的标准关系型数据库设计就好更大的话可以考虑做空间换时间的设计具体可以做内存空间缓存,文件缓存,数据库缓存都可以就数据库缓存来说,除了标准的关系型数据库外,另外需要加个表做个用户-》关注信息的表每次有被关注的用户发布信息,就把其信息的ID写入被关注用户的用户关注信息表,对这个表可以优化,把比较老的数据及时删除。

还有一种折中的做法就是分别对关注关系的关注用户字段和用户信息的用户字段和时间字段做索引,问题就基本能解决,百万级没有问题如果数量再大,需要对用户信息做时间的分表,保证每个表的信息数量在千万数量级当然,每次访问都读取数据表就是一种愚蠢的做法,短期内数据不更新的情况下应当从内存读取数据或者文件缓存来读取数据缓存的更新又是另外一个话题啦问题2的困难在于:第一点.C关注的用户太多,设计上必须在显示C的页面的过程中,避免去数据库查询所有被关注的用户是否有更新。

第二点.A被关注的人太多,设计上必须在A更新的时候,避免去通知所有关注他的人自己更新了(也就是数据库中为每个人设置标志或者增加记录)。

这两点其实是矛盾的,因为你总需要在某个时候交流“A更新了”这条信息。

就需要在系统设计的时候进行折衷和权衡。

甚至对不同的用户分类采用不同的方案。

可以采用以下的方案:普通用户放到一张表中,视为B类。

假设绝大多数用户都是B类,即关注的人不太多,被关注也不太多。

进一步假设绝大多数的微博记录来自于普通的B类用户。

对那些关注别人太多的,分为C类。

专门为C类用户增加一个表,他关注的人如果不是A类,则每次更新都在这张表里面推送一条记录。

这样显示C的主页时,只用先查询这张表,再在A类人的专属表中查找A类人的更新即可。

因为C类的人数比较少,所以这张表应该会比较小,查找起来会比较快。

对A类的人,则独立出来成为单独的一张表,供别人查询,因为A类的人数较少,所以这张表应该会比较小,查找起来比较快。

这就是一个简单的设计,足以表示你针对问题进行考虑,并给出了有一定效果的解决方案。

当然,这是按照楼上要求的只通过表的设计来实现。

而实际构建系统的时候,该用视图的用视图,该建立索引的建立索引,花样会更多,效果会更好。

以下设计以sqlserver2005为例记录用户信息的用户表Users(uid bigint identity(1000,1) primary key,uname varchar(50) not null unique);记录A对B的关注信息的关注表Attention(byuser bigint foreign key references Users(uid),touser bigint foreign keyreferences Users(uid) primary key(byuser,touser));注:byuser 发起关注者,touser 被关注者记录某人发表文章信息的文章表Article(aid bigint identity(1000,1) primary key,uid bigint foreign key references Users(uid),title varchar(100) not null,context ntext not null,publishDate datetime not null);由于需要获取更新信息,所以要能记录哪些文章是查看过,那些不是的文章状态,并且此状态不是文章的状态,而是每一个文章对于每一个关注者的状态。

相关文档
最新文档