互联网公司技术架构资料.新浪微博.微博架构与平台安全.pdf
- 文件大小: 1.52MB
- 文件类型: pdf
- 上传日期: 2025-08-17
- 下载次数: 0
概要信息:
演讲者 @TimYang
微博架构与平台安全
微博架构发展
• 新浪微博从 0 ~ 50,000,000 用户
• 技术架构经历了 3 个阶段
第 1 版
技术特点
• 微博本质是解决发表/订阅问题
• 第 1 版采用推消息模式,将发表/订
阅简化成 insert / select 问题
技术细节
• 典型 LAMP 架构
• MySQL:单库单表, MyISAM
• MPSS (Multi-Port Single Server)
快速成长
• 用户快速增长
• 出现发表延迟现象,尤其是明星用
户
架构演变
• 分发推送是造成发表延迟首因
• 模式改进
• 数据规模增大也带来一定延迟
• 规模增大:数据拆分
• 锁表问题:更改引擎
• 发表过慢:异步方式
第 2 版
投递模式优化
• 推模式改进,不需要推送到所有用
户
• 存储及发表峰值压力减轻
• 投递延迟减小
数据拆分
• 优先按时间维度拆分
• 内容和索引分开存放
• 内容使用 key-value 方式存储
(NoSQL)
• 索引由于分页访问,拆分有挑战
异步处理
• 发表异步化
• 发表速度及可靠性得到提高
• 使用 MemcacheQ
• 增加 stats queue,适合大规模运维
技术细节
• InnoDB 引进,避免锁表烦恼
• PHP 中 libmemcached 代替
memcache
• 在高并发下稳定性极大提高
高速发展
• 系统问题
• 单点故障、“雪崩”
• 访问速度,国内复杂网络环境
• 数据压力及峰值
• MySQL 复制延迟、慢查询
• 热门事件微博发表量,明星评论及粉丝
如何改进
• 系统方面
• 允许任意模块失败
• 静态内容 CDN 加速
• 数据压力及峰值
• 将数据、功能、部署尽可能拆分
• 提前容量规划
平台化需求
• Web 系统
• 有用户行为才有请求
• API 系统
• 轮询请求
• 峰值不明显
• 用户行为很难预测
• 系统规模持续增大
• 平台化需求
• 新的架构如何设计?
• “Break large complex systems
down into many services...
google.com search touches 100s
of services (ads, web search,
books, news, spelling correction...)”
• - Jeff Dean, Google Fellow
服务化
•服务→接口→应用
第 3 版
平台服务
• 平台服务和应用服务分开,模块隔离
• 新微博引擎,实现 feed cache 分层
• 关系多维度索引结构,性能极大提高
• 计数服务改成基于偏移,更高的一致
性、低延迟
基础服务
• DB 冷热分离等多维度拆分
• 图片等存储去中心化
• 动态内容支持多 IDC 同时更新
高性能架构
• 50,000,000 用户使用新浪微博
• 最高发表 3,000 条微博 / 秒
• 姚晨发表一条微博,会被 3,689,713
粉丝读到(11 月 10 日 数据)
问题本质
• 解决高访问量、海量数据规模下
• 易于扩展、低延迟
• 高可用
异地分布能力
• 每天数十亿次Web及接口请求
• 请求内容随时变化,结果无法
cache
• 如何扩展?
思路
• 去状态,可请求服务单元中任意节点
• 去中心化,避免单点及瓶颈
• 可线性扩展,如
• 100 万用户,10 台服务器
• 1000 万用户,100 台服务器
• 减少模块耦合
实时性
高性能系统具备低延迟、高实时性
实时性核心是让数据离 CPU 最近,避
免磁盘 IO
“CPU 访问 L1 就像从书桌拿一本书,L2 是
从书架拿一本书,L3 是从客厅桌子上拿一本
书,访问主存就像骑车去社区图书馆拿一本
书。”
- 余锋 @ ecug 2010
淘宝网核心系统专家,Erlang技术专家
微博 cache 设计
高可用
• 好的架构具有高可用性
• 业界
• Amazon S3: 99.9%
• Amazon EC2: 99.95%
• Facebook: n/a
• 微博平台 ~ 99.95% (5 小时 / 年)
如何达到
• 容量规划
• 图表
• 监控及 admission control...
• 接口及资源监控, 7x24
• 业务回环测试, 监测业务逻辑有效性
• 集成测试
图表
通过图表
了解系统容量
接口监控
• curl / 各地请求情况及响应时间
• 流量异常 / access log
• non-200 结果 / 失败率 / exceptions
• 将监控指标量化
• 类似 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.
• Designing for automation.”
• - James Hamilton, VP of Amazon
自动化
• 大规模互联网系统运作需要尽可能自动化
• 发布及安装
• 服务启用、停止
• 故障处理
• 前提,去状态化,允许单点故障及重启
• “System administration at Google
usually have 1 week of "on call"
duty, and the other 5 weeks are
spent making improvements to
make the on call portion more
optimized, automated, and trouble-
free”
• - Tom Limoncelli @ Everything Sysadmin
• Lumeta Corporation总监,贝尔实验室专家
微博系统运转依赖大量自动化工具
工具在持续改进并增加中⋯⋯
• 高可用性还有异地分布的需求
• 在国内网络环境下,IDC 灾难、机
房检修维护会导致服务中断
• 用户就近访问可提高速度
• 静态内容分布采用 CDN 技术,成
熟
• 动态内容分布是业界难点
• 核心是数据的分布式存储
• 理想的分布式存储产品
• 支持海量规模、可扩展、高性能、低
延迟、高可用性
• 多机房分布,异地容灾
• 调用简单,具备丰富数据库特性
分布式存储
需要解决多对多的数据复制同步
及数据一致性
复制策略
• Master / Slave
• 实现简单,master 有单点风险
• Multi-Master
• 合并多处写,异步,最终一致性
• 需要应用避免冲突
• Paxos:强一致性,延迟大
• Multi-Master
• Web 应用多地区同步的最佳策略
• 没有现成成熟的产品
微博方案
• 通过消息广播方式将数据多地分
布
• 类似 Yahoo! Message Broker
• “We use YMB for replication for 2
reasons.
• 1. YMB ensure msgs are not lost
before they are applied to the db.
• 2. YMB is designed for wide-area
replication. This isolates individual
PNUTS clusters from dealing with
update between regions”
• PNUTS: Yahoo!’s Hosted Data Serving Platform
新推送架构
现状
• API 大部分请求都是为了获取最新
数据
• 重新思考 Rest API
• 大部分调用都是空返回
• 大部分时间在处理不必要的询问
• 无法实时投递
• 存在请求数限制(rate limit)
如何解决
• 新一代推送接口(Stream API)
• 采用推送的方式
• 有新数据服务器立即推送给调用方
• 无数据则不消耗流量
• 客户端实现更简单
技术特点
• 低延迟,从发表到客户端接收1秒内完成
• 高并发长连接服务
推送架构
• 为什么先持久化
• KISS,Keep It Simple and Stupid
• 测试表明持久几乎不增加延迟开销
• batch insert
• cursor read
内部细节
• Stream Buffer
• 保存用户最近数据
• 保存客户端断线重连之间下行数据
平台安全
• 由于接口开放,需要防范各种恶意
行为
• 垃圾内容
• 垃圾粉丝
• 恶意行为
内容安全
• 微博平台需要
• 为用户提供安全及良好体验的应用
• 为开发者营造公平的环境
• 接口需要清晰的权限控制及安全规
则
接口安全
• Auth层
• 访问需要 AppKey
• 需要 OAuth 授权
• 权限层
• 流量控制、权限
• 架构就是将复杂问题抽象简单并
解决
• 下一代微博架构,期待您的参与
• Join us! @TimYang
当前页面二维码