Suche senden
Hochladen
新浪微博Feed服务架构
•
37 gefällt mir
•
8,123 views
XiaoJun Hong
Folgen
在厦门爱特咖啡分享的新浪微博Feed服务架构
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 65
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
微博cache设计谈
微博cache设计谈
Tim Y
High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011
Tim Y
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)
Tim Y
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
mysqlops
微博架构与平台安全
微博架构与平台安全
Tim Y
Introduction to memcached
Introduction to memcached
Jurriaan Persyn
Etsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
Dan McKinley
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
mumrah
Weitere ähnliche Inhalte
Was ist angesagt?
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
HBase Storage Internals
HBase Storage Internals
DataWorks Summit
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
Redis Labs
MyRocks introduction and production deployment
MyRocks introduction and production deployment
Yoshinori Matsunobu
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability Improvements
DataWorks Summit
Kafka Streams State Stores Being Persistent
Kafka Streams State Stores Being Persistent
confluent
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
confluent
From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.
Taras Matyashovsky
Everything You Always Wanted to Know About Kafka’s Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka’s Rebalance Protocol but Wer...
confluent
KafkaとPulsar
KafkaとPulsar
Yahoo!デベロッパーネットワーク
Disaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache Kafka
confluent
FHIR REST API 導論與使用
FHIR REST API 導論與使用
Lorex L. Yang
初學者都該了解的 HTTP 通訊協定基礎
初學者都該了解的 HTTP 通訊協定基礎
Will Huang
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
NAVER D2
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Thousands of Threads and Blocking I/O
Thousands of Threads and Blocking I/O
George Cao
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
confluent
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
SATOSHI TAGOMORI
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Yuki Morishita
Introduction to Redis
Introduction to Redis
Dvir Volk
Was ist angesagt?
(20)
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
HBase Storage Internals
HBase Storage Internals
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
RedisConf18 - Redis at LINE - 25 Billion Messages Per Day
MyRocks introduction and production deployment
MyRocks introduction and production deployment
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Kafka Streams State Stores Being Persistent
Kafka Streams State Stores Being Persistent
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
Kafka on Kubernetes: Keeping It Simple (Nikki Thean, Etsy) Kafka Summit SF 2019
From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.
Everything You Always Wanted to Know About Kafka’s Rebalance Protocol but Wer...
Everything You Always Wanted to Know About Kafka’s Rebalance Protocol but Wer...
KafkaとPulsar
KafkaとPulsar
Disaster Recovery Plans for Apache Kafka
Disaster Recovery Plans for Apache Kafka
FHIR REST API 導論與使用
FHIR REST API 導論與使用
初學者都該了解的 HTTP 通訊協定基礎
初學者都該了解的 HTTP 通訊協定基礎
[211] HBase 기반 검색 데이터 저장소 (공개용)
[211] HBase 기반 검색 데이터 저장소 (공개용)
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
Thousands of Threads and Blocking I/O
Thousands of Threads and Blocking I/O
Kafka 101 and Developer Best Practices
Kafka 101 and Developer Best Practices
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
Introduction to Redis
Introduction to Redis
Andere mochten auch
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析
isnull
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
孙立
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版
XiaoJun Hong
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010
Tim Y
Replication, Durability, and Disaster Recovery
Replication, Durability, and Disaster Recovery
Steven Francia
Java常见问题排查
Java常见问题排查
bluedavy lin
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
Feng Yu
13 tips for a highly engaging feed
13 tips for a highly engaging feed
Thierry Schellenbach
美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡
美团点评技术团队
分布式Key Value Store漫谈
分布式Key Value Store漫谈
Tim Y
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
Sreenivas Makam
Andere mochten auch
(11)
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010
Replication, Durability, and Disaster Recovery
Replication, Durability, and Disaster Recovery
Java常见问题排查
Java常见问题排查
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
13 tips for a highly engaging feed
13 tips for a highly engaging feed
美团点评技术沙龙14:美团四层负载均衡
美团点评技术沙龙14:美团四层负载均衡
分布式Key Value Store漫谈
分布式Key Value Store漫谈
Service Discovery using etcd, Consul and Kubernetes
Service Discovery using etcd, Consul and Kubernetes
Ähnlich wie 新浪微博Feed服务架构
MySQL设计、优化、运维
MySQL设计、优化、运维
Jinrong Ye
Mysql调优
Mysql调优
ken shin
浅谈 My sql 性能调优
浅谈 My sql 性能调优
thinkinlamp
MySQL应用优化实践
MySQL应用优化实践
mysqlops
大型网站架构的发展
大型网站架构的发展
drewz lin
大型网站架构的发展
大型网站架构的发展
Hesey
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
Jinrong Ye
架構設計-資料存取的選擇
架構設計-資料存取的選擇
國昭 張
分布式缓存与队列
分布式缓存与队列
XiaoJun Hong
mercury
mercury
moonbingbing
新浪微博平台与安全架构
新浪微博平台与安全架构
n716
基于 MySQL 的B2C电商系统前端数据层架构
基于 MySQL 的B2C电商系统前端数据层架构
Sky Jian
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
锐 张
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
jackbillow
大众点评网的技术变迁之路
大众点评网的技术变迁之路
jeffz
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
Shanda innovation institute
java title
java title
lonegunman
构建可扩展的微博系统
构建可扩展的微博系统
lonegunman
豆瓣网技术架构变迁
豆瓣网技术架构变迁
reinhardx
A
A
lonegunman
Ähnlich wie 新浪微博Feed服务架构
(20)
MySQL设计、优化、运维
MySQL设计、优化、运维
Mysql调优
Mysql调优
浅谈 My sql 性能调优
浅谈 My sql 性能调优
MySQL应用优化实践
MySQL应用优化实践
大型网站架构的发展
大型网站架构的发展
大型网站架构的发展
大型网站架构的发展
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
架構設計-資料存取的選擇
架構設計-資料存取的選擇
分布式缓存与队列
分布式缓存与队列
mercury
mercury
新浪微博平台与安全架构
新浪微博平台与安全架构
基于 MySQL 的B2C电商系统前端数据层架构
基于 MySQL 的B2C电商系统前端数据层架构
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
大众点评网的技术变迁之路
大众点评网的技术变迁之路
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
java title
java title
构建可扩展的微博系统
构建可扩展的微博系统
豆瓣网技术架构变迁
豆瓣网技术架构变迁
A
A
Mehr von XiaoJun Hong
大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化
XiaoJun Hong
新浪微博redis技术演化
新浪微博redis技术演化
XiaoJun Hong
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
XiaoJun Hong
突发事件中重点信息的筛选与分类
突发事件中重点信息的筛选与分类
XiaoJun Hong
大规模数据库存储方案
大规模数据库存储方案
XiaoJun Hong
互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践
XiaoJun Hong
Mehr von XiaoJun Hong
(6)
大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化
新浪微博redis技术演化
新浪微博redis技术演化
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
突发事件中重点信息的筛选与分类
突发事件中重点信息的筛选与分类
大规模数据库存储方案
大规模数据库存储方案
互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践
Kürzlich hochgeladen
20151111 - IoT Sync Up
20151111 - IoT Sync Up
Jamie (Taka) Wang
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
NCU MCL
20161220 - domain-driven design
20161220 - domain-driven design
Jamie (Taka) Wang
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
黑客 接单【TG/微信qoqoqdqd】
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
NCU MCL
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
Jamie (Taka) Wang
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
NCU MCL
Entities in DCPS (DDS)
Entities in DCPS (DDS)
Jamie (Taka) Wang
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
NCU MCL
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
NCU MCL
20200226 - AI Overview
20200226 - AI Overview
Jamie (Taka) Wang
20161027 - edge part2
20161027 - edge part2
Jamie (Taka) Wang
20170104 - transaction_pattern
20170104 - transaction_pattern
Jamie (Taka) Wang
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
NCU MCL
20200323 - AI Intro
20200323 - AI Intro
Jamie (Taka) Wang
Kürzlich hochgeladen
(15)
20151111 - IoT Sync Up
20151111 - IoT Sync Up
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
20161220 - domain-driven design
20161220 - domain-driven design
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
Entities in DCPS (DDS)
Entities in DCPS (DDS)
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
20200226 - AI Overview
20200226 - AI Overview
20161027 - edge part2
20161027 - edge part2
20170104 - transaction_pattern
20170104 - transaction_pattern
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
20200323 - AI Intro
20200323 - AI Intro
新浪微博Feed服务架构
1.
新浪微博 洪小军 @XiaoJunHong 厦门爱特咖啡 新浪微博Feed服务架构
2.
新浪微博Feed服务架构 • 个人简介 • 洪小军
@XiaoJunHong • 2009年初加入飞信,互联网业务架构 • 2011年初加入新浪微博,平台架构
3.
新浪微博Feed服务架构 • 讨论范围 • 业务层面: •
内容、关系、 • 用户、计数... • 设计层面: • 缓存、数据库、 • 消息系统...
4.
新浪微博Feed服务架构 • 讨论大纲 • 设计原则 •
设计模式 • 缓存设计 • 数据库设计
5.
新浪微博Feed服务架构 • 讨论大纲 Ø 设计原则 • 设计模式 •
缓存设计 • 数据库设计
6.
新浪微博Feed服务架构 • CAP原则
7.
新浪微博Feed服务架构 • Feed设计原则 • 选择可扩展性和高可用性 •
可扩展性:支撑业务的快速增长 • 高可用性:保证系统处于稳定状态 • 妥协一致性 • 最终一致性:消息最终一致
8.
新浪微博Feed服务架构 • 演化方向 –
前期 • 快速搭建并推进上线 Mysql Web
9.
新浪微博Feed服务架构 • 演化方向 –
中期 • 可扩展性 • Scale Up:硬件升级、性能优化 • Scale Out:分布式 • 路线图 • Scale Up -> Scale Out -> Scale Up
10.
新浪微博Feed服务架构 • 演化方向 –
中后期 • 高可用性 • Failover:避免单点故障 • 快速失败策略:避免系统hang住 • 降级策略:保证核心功能可用 • 隔离性:避免依赖影响
11.
新浪微博Feed服务架构 • 讨论大纲 • 设计原则 Ø 设计模式 •
缓存设计 • 数据库设计
12.
新浪微博Feed服务架构 • 推拉模式 –
推模式 • 写入消息 insert into feeds(user_id, author_id, feed_id) select $user_id, follwer_id, $feed_id from followers • 获取消息 select * from feeds where user_id = $user_id user_id author_id feed_id 10001 20001 1111111111 10002 20001 1111111111 10003 20001 1111111111
13.
新浪微博Feed服务架构 • 推拉模式 –
推模式 • 空间换时间:存储容量瓶颈? • 粉丝越多推送量越大:姚晨5000万粉丝怎么推送 • 延迟推送?延迟是否可接受? • 变更通知成本高:加关注、取消关注、删除 Feed? • 系统复杂度变高?
14.
新浪微博Feed服务架构 • 推拉模式 –
拉模式 • 写入消息 insert into feeds(user_id, feed_id) values($user_id, $feed_id) • 获取消息 select * from feeds where user_id in ( select following_id from following) user_id feed_id 10001 1111111111 10002 222222222
15.
新浪微博Feed服务架构 • 推拉模式 –
拉模式 • 时间换空间 • 动态聚合怎么保证响应时间? • 拉取量太大,带宽容易成为瓶颈 • 并行获取?存储靠近计算?
16.
新浪微博Feed服务架构 • 推拉模式对比 推 拉 获取Feed
简单、高效 实时计算量大,与好友数量 相关 发表Feed 推送给所有粉丝 不推送 变更通知 加关注、取消关注、删除 Feed等都需要变更 不需要 好友多、粉丝少 适合 不适合 好友少、粉丝多 不适合 适合 好友多、粉丝多 ? ?
17.
新浪微博Feed服务架构 • 推拉结合? • 边界设置 •
在线状态? • 粉丝数? • ……
18.
新浪微博Feed服务架构 • 微博的实践 –
推拉结合 • 主体采用拉模式 • 存储靠近计算 • 按时间归档热数据 • 网络部署结构优化 • 并行获取 • 高效聚合算法 • …… • 部分高级功能采用推模式
19.
新浪微博Feed服务架构 • 讨论大纲 • 设计原则 •
设计模式 Ø 缓存设计 • 数据库设计
20.
新浪微博Feed服务架构 • 支撑高并发读取 • 每秒对资源百万级的请求 •
需要保证较低的响应时间 • 假设在内存基础上的架构 • memory cache • memory storage
21.
新浪微博Feed服务架构
22.
新浪微博Feed服务架构
23.
新浪微博Feed服务架构 • 集中式缓存 Mysql Web Memcached
24.
新浪微博Feed服务架构 • 问题出现 • Mysql出现性能瓶颈,读取压力过大 •
缓存命中率较低,大量穿透到后端 • 缓存容量成为瓶颈 • Memcached出现慢查询情况 • 单机吞吐量有限,读压力超过可支撑最大限度 • CPU和网络带宽成为瓶颈
25.
新浪微博Feed服务架构 • 压缩存储 • 一定程度减缓容量瓶颈问题 o Protocol
Buffer o Byte Buffer o QuickLz
26.
新浪微博Feed服务架构 • 分布式缓存 Mysql Web MemcachedMemcached ......
27.
新浪微博Feed服务架构 • 问题出现 • 数据库压力持续过大 •
某台缓存机器硬件或网络故障 • 故障期间缓存命中率持续保持在低位水平不见涨 • 单点故障
28.
新浪微博Feed服务架构 • 一致性hash
29.
新浪微博Feed服务架构 • 一致性hash –
加节点
30.
新浪微博Feed服务架构 • 一致性hash –
减节点
31.
新浪微博Feed服务架构 • 一致性hash –
虚拟节点
32.
新浪微博Feed服务架构 • 问题出现 • 数据库瞬间访问量暴增,出现雪崩现象 •
某台缓存机器硬件或网络故障 • 节点故障瞬间穿透到数据库的请求超过可支撑最大负荷 • 单点故障
33.
新浪微博Feed服务架构 • Master /
Slave 策略 Mysql Web Memcached Master Cluster Memcached Slave Cluster
34.
新浪微博Feed服务架构 • Master/Slave可用性和成本的权衡 • 同城IDC互为Master/Slave •
独立IDC Slave使用成本更低的SSD存储
35.
新浪微博Feed服务架构 • 问题出现 • 出现大量的Memcached慢查询 •
缓存服务器带宽成为瓶颈 • 读取量随着业务的发展在快速增长 • 期望有线性扩容的方案
36.
新浪微博Feed服务架构 • Line Cache
Slave node1 node2 node3 Master node1 node2 node3 Line cache node1 node2 node3 Client (get)
37.
新浪微博Feed服务架构 • 问题出现 • 出现大量的Memcached慢查询 •
缓存服务器hang住 • 所有请求延迟N秒
38.
新浪微博Feed服务架构 • 快速失败策略 • 规划资源的SLA值 •
设置合适的超时时间和合理的重试次数 • 满足不了SLA要求自动摘除以达到快速失败目的
39.
新浪微博Feed服务架构 • 打造高可用缓存 –
容量规划 • 请求量 • 命中率 • 预热、防止雪崩 • 带宽 • 网卡、交换机 • 存储容量 • 预估存储大小 • 过期策略、剔除率 • 连接数
40.
新浪微博Feed服务架构 • 打造高可用缓存 –
容量规划 • 每季度至少一次例行性评估 • 重大活动前容量评估 • 系统变更时评估容量 • 监控系统黄色预警 • 日常30%以上冗余
41.
新浪微博Feed服务架构 • 缓存设计小结 • 扩展性 •
集中式 • 分布式 • Line Cache • 可用性 • Failover:一致性hash、master/slave • 快速失败策略 • 容量规划 • 设计上核心功能只要缓存可用系统就基本可用
42.
新浪微博Feed服务架构 • 缓存设计小结 • 核心业务缓存命中率达到99.9%以上 •
核心系统可在一段时间内仅运行于缓存之上 • 容量规划尤其关键
43.
新浪微博Feed服务架构 • 讨论大纲 • 设计原则 •
设计模式 • 缓存设计 Ø 数据库设计
44.
新浪微博Feed服务架构 • 第一版本Feed快速搭建完成并上线 Mysql Web content id
long content varchar 0meline uid long id long
45.
新浪微博Feed服务架构 • 问题出现 • 读请求很慢,大量mysql慢查询和超时情况 •
前端和缓存层面也都做了扩容,但是问题依旧
46.
新浪微博Feed服务架构 • 优化sql语句 • 使用最简单的sql语句 •
避免join、子查询、游标等复杂操作 • 只返回需要的数据 • 合理的使用索引 • 减少随机读,提高性能 • 避免分布式事务 • BASE原则
47.
新浪微博Feed服务架构 • 数据库就只是作为存储 • 在数据库层面没有任何逻辑 •
业务逻辑应该在应用端处理 • 类似的sql语句 • select id from timeline where uid =? • select id,content from content where id in (?)
48.
新浪微博Feed服务架构 • 问题出现 • Mysql读写再次出现瓶颈 •
出现瓶颈时各业务互相影响
49.
新浪微博Feed服务架构 • 垂直拆分 • 按业务拆分到不同的端口和数据库中 content Web timeline
50.
新浪微博Feed服务架构 • 问题出现 • Mysql读成为瓶颈
51.
新浪微博Feed服务架构 • 读写分离 master Web slave Read Replication Write
52.
新浪微博Feed服务架构 • 问题出现 • Mysql读再次成为瓶颈
53.
新浪微博Feed服务架构 • 添加slave节点 master Web Write slave slave Replication Read
54.
新浪微博Feed服务架构 • 问题出现 • Mysql写成为瓶颈
55.
新浪微博Feed服务架构 • 水平拆分 Web master slave master slave master slave
56.
新浪微博Feed服务架构 • 水平拆分 • 分库 •
物理库和逻辑库 • 分表 • Hash分布和时间分布
57.
新浪微博Feed服务架构 • 一些注意事项 • 拆分为足够多的逻辑库 •
方便后续扩容为物理库 • 避免更改字段 • 亿级数据量的库表更改字段会是怎么样? • 节省存储空间 • 选择合适的数据类型,能选tinyint就不选int… • 合理的压缩存储,如pb替换json等
58.
新浪微博Feed服务架构 • 问题出现 • Mysql出现慢查询 •
更多是发生在查看历史发博量非常大的用户 的微博列表的时候
59.
新浪微博Feed服务架构 • 一级索引按月拆分 • 增加二级索引表 0meline
uid long id long 0meline_si uid long stat_date date count int
60.
新浪微博Feed服务架构 • 一级索引按月拆分 • 通过二级索引获取对应月份
• 通过一级索引获取具体数据 0meline_si uid stat_date count 100001 2013-‐08-‐01 2 100001 2013-‐07-‐01 2 100001 2013-‐06-‐01 1 …… …… …… 0meline_1308 uid id 100001 555555 100001 444444 …… …… 0meline_1307 uid id 100001 333333 100001 222222 …… …… 0meline_1306 uid id 100001 111111 …… ……
61.
新浪微博Feed服务架构 • Sharding小结 • 垂直拆分
• 实现简单 • 扩展能力有限,并且强关联的业务不容易再细拆 • 读写分离 • 主要缓解读压力,读节点可扩展 • 存在主从同步问题,最终体现在一致性问题上 • 水平拆分 • 扩展性强,但是需要预先规划好分库分表策略 • 实现相对比较复杂
62.
新浪微博Feed服务架构 • 问题出现 • 为了抗更大的读写压力,采用更多更好的设备 (ssd等),但是每次扩容都需要扩容整个数 据库(包括所有历史数据),服务器成本非常 高
63.
新浪微博Feed服务架构 • 按年归档-冷热数据分离 Web 2012年 master slave slave slave 2011年 master slave slave 2010年 master slave 2009年 master slave slave slave slave slave
64.
新浪微博Feed服务架构 • 数据库发展历程小结 • 扩展性:Scale
Up -‐> Scale Out -‐> Scale Up • 系统设计:简单 -‐> 复杂 -‐> 简单 – 水平扩展:垂直拆分 -‐> 读写分离 -‐> 水平拆分 -‐>冷热分离
65.
谢谢
Jetzt herunterladen