Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
完美时空 北美研发中心 陈浩
12/5/2010 SH
• 实战 架构的演变 及使用技术 (今天)
• 理论 大型系统的核心目标 高可用、易扩展与高性能
• 其他相关
• 研发、测试与部署
• 监控
• 架构的演变
一个典型LAMP站点由小到大的成长过程
• 由简单到复杂
• 各阶段面对的技术挑战与处理办法
任何大型站点都有一个成长过程;同时,任何大型站点都可以拆
分成若干成子系统。架构师必须深刻理解每一阶段的架构异同点
及可能的瓶颈所在。
架构的演变 - 单机 One Box
简单WEB应用
访问量小
 Apache/PHP/MySQL 在同一主机上
瓶颈
• 通常先出现在数据库,然后才是
Apache/php
•硬盘 I/O (Innodb) 或MyISAM锁等
待
架构的演变 - 双机 Two Box
访问量逐渐增大
 Apache/PHP在Server A;MySQL 在
Server B
瓶颈
•硬盘 I/O (Innodb) 或MyISAM锁等
待
•网络I/O
架构的演变
• 多机 Many Boxes with Replication
访问量继续增大
 MySQL主从复制及读写分离 (master 负责IN/UP/DEL, slave负责
SELECT)
SELECT, IN/UP/DEL可以...
架构的演变 -多机 Many Boxes with Replication
架构的演变 -阶段性成果
恭喜!
你终于拥有了一个可以(勉强?)称得上“大型”的网站!
100w PV/day?
挑战才刚刚开始!
架构的演变 –遇到新问题
MySQL
1. Slave Lag 每台Slave数据完全一样。有
的忙,有的闲
2. 数据量越来越大,单表过大,查询效率
太低;
综合1.2. 通常采用
• memcached数据缓存
• MySQL水平扩展(库表...
架构的演变 – 系统分层
WEB Tier
Cache Tier
DB Tier File Tier
整理思路,总结一下系统架构
架构的演变 – 系统分层 – Web Tier
M
C
V
D
一个常见的PHP应用程序结构
• V: View 视图
• C: Controller 控制器
• M: Model 业务逻辑
• D: Data Access Layer 数据访...
架构的演变 – 系统分层 – Web Tier
架构的演变 – 系统分层
WEB Tier
Cache Tier
DB Tier File Tier
架构的演变 – 系统分层 – Cache Tier
Memcached最常见,Redis等也慢慢开始被广泛使用
架构的演变 – 系统分层 – Cache Tier
架构的演变 – 系统分层 – Cache Tier
两种典型的Memcached数据分布
• 余数分布式算法
新加节点导致数据重新分布,对数据库造成瞬间冲击
• 一致性哈希
也被其他分布式系统使用
解决数据分布不均匀问题
1. 物理节点中添加多...
架构的演变 – 系统分层 – Cache Tier
Memcached同步
序列化算法
架构的演变 – 系统分层
WEB Tier
Cache Tier
DB Tier File Tier
架构的演变 – Db Tier - MySQL数据库集群
• Replication
– Master -> Master
– Master -> Slave
架构的演变 - MySQL库表散列
• 读一条Blog内容 散列分布前
<?php
$db = DB::getInstance();
// fetch a database instance
$db->prepare("SELECT title...
架构的演变 - MySQL库表散列
• 读一条Blog内容 散列分布后
<?php
$db = DB::getInstance($userID);//注意这里
// fetch a database instance, specific for...
架构的演变 - MySQL库表散列
• 分布算法
1. 取余
对数据增长要有充分估计
2. MD5
<?php
$hash = md5($userID); //98f13708210194c475687be6106a3b84
$getFromS...
架构的演变 - MySQL库表散列
• MySQL存在问题
1. 数据自动分布需要在应用层实现 (官方的Sharding功能目前很少在
产品环境使用) 麻烦
2. 读写效率低
NoSQL? Distributed NoSQL?
架构的演变 – Db Tier - NoSQL
• Wide Column Store / Column Families
 Hadoop / HBase
 Cassandra
 Hypertable
• Document Store
...
架构的演变 – File Tier
• 分布式存储
• Hadoop/HDFS
• MogileFS
实例
架构的演变 -跨机房 Cross the datacenters
• 电信 网通
• 或… 美国东西部 或…欧美机房
架构的演变 -跨机房 Cross the datacenters
• 代码发布
• 静态内容分布 (Global CDN)
• MySQL同步
• Memcached同步 (repcached / mcproxy)
• Cassandra同步 ...
其他需要注意的:
• 前端优化 常被忽视,但实际上极为重要
 如果每个页面减少一个http请求,随着时间推移,将产生很可观的成本节约;同时
让页面加载更好,提高用户体验
 推荐阅读《高性能网站建设指南》
• 应用程序设计与架构的配合
 数...
架构师
• 高可用
• 可扩展
• 监控
• 成本控制
推荐阅读
• Scalable Internet Architectures
• Building Scalable Web Sites *
• High Performance Web Sites *
• High Performance M...
谢谢!
• MSN: haohappy@php.net
• QQ: 48730696
Upcoming SlideShare
Loading in …5
×

大型互联网应用架构设计 The Evolvement of Scalable Architectures for Internet Applications

451 views

Published on

2010年给团队内部作的分享。内容有点老,但即使今天仍然很实用。 This slide is a bit out of date since it was done in 2010 , but most of the contents are still useful as of today. If you want to build a mid-size and scalable website, it could be of some help.

Published in: Internet
  • Be the first to comment

大型互联网应用架构设计 The Evolvement of Scalable Architectures for Internet Applications

  1. 1. 完美时空 北美研发中心 陈浩 12/5/2010 SH
  2. 2. • 实战 架构的演变 及使用技术 (今天) • 理论 大型系统的核心目标 高可用、易扩展与高性能 • 其他相关 • 研发、测试与部署 • 监控
  3. 3. • 架构的演变 一个典型LAMP站点由小到大的成长过程 • 由简单到复杂 • 各阶段面对的技术挑战与处理办法 任何大型站点都有一个成长过程;同时,任何大型站点都可以拆 分成若干成子系统。架构师必须深刻理解每一阶段的架构异同点 及可能的瓶颈所在。
  4. 4. 架构的演变 - 单机 One Box 简单WEB应用 访问量小  Apache/PHP/MySQL 在同一主机上 瓶颈 • 通常先出现在数据库,然后才是 Apache/php •硬盘 I/O (Innodb) 或MyISAM锁等 待
  5. 5. 架构的演变 - 双机 Two Box 访问量逐渐增大  Apache/PHP在Server A;MySQL 在 Server B 瓶颈 •硬盘 I/O (Innodb) 或MyISAM锁等 待 •网络I/O
  6. 6. 架构的演变 • 多机 Many Boxes with Replication 访问量继续增大  MySQL主从复制及读写分离 (master 负责IN/UP/DEL, slave负责 SELECT) SELECT, IN/UP/DEL可以在应用程序内指定访问不同服务器 (如使用不 同的handle或Db Adapter) WEB Server可能需要使用负载均衡
  7. 7. 架构的演变 -多机 Many Boxes with Replication
  8. 8. 架构的演变 -阶段性成果 恭喜! 你终于拥有了一个可以(勉强?)称得上“大型”的网站! 100w PV/day? 挑战才刚刚开始!
  9. 9. 架构的演变 –遇到新问题 MySQL 1. Slave Lag 每台Slave数据完全一样。有 的忙,有的闲 2. 数据量越来越大,单表过大,查询效率 太低; 综合1.2. 通常采用 • memcached数据缓存 • MySQL水平扩展(库表拆分) Web Server 负载过高 • 提高PHP代码执行效率 Opcode Cache • 静态文件缓存 Squid/Varnish / CDN • 负载均衡 Cache Tier Web Tier DB Tier
  10. 10. 架构的演变 – 系统分层 WEB Tier Cache Tier DB Tier File Tier 整理思路,总结一下系统架构
  11. 11. 架构的演变 – 系统分层 – Web Tier M C V D 一个常见的PHP应用程序结构 • V: View 视图 • C: Controller 控制器 • M: Model 业务逻辑 • D: Data Access Layer 数据访问 层 Web Tier
  12. 12. 架构的演变 – 系统分层 – Web Tier
  13. 13. 架构的演变 – 系统分层 WEB Tier Cache Tier DB Tier File Tier
  14. 14. 架构的演变 – 系统分层 – Cache Tier Memcached最常见,Redis等也慢慢开始被广泛使用
  15. 15. 架构的演变 – 系统分层 – Cache Tier
  16. 16. 架构的演变 – 系统分层 – Cache Tier 两种典型的Memcached数据分布 • 余数分布式算法 新加节点导致数据重新分布,对数据库造成瞬间冲击 • 一致性哈希 也被其他分布式系统使用 解决数据分布不均匀问题 1. 物理节点中添加多个虚拟节点 (Dynamo) 2. 节点移动实现负载均衡 (Cassandra)
  17. 17. 架构的演变 – 系统分层 – Cache Tier Memcached同步 序列化算法
  18. 18. 架构的演变 – 系统分层 WEB Tier Cache Tier DB Tier File Tier
  19. 19. 架构的演变 – Db Tier - MySQL数据库集群 • Replication – Master -> Master – Master -> Slave
  20. 20. 架构的演变 - MySQL库表散列 • 读一条Blog内容 散列分布前 <?php $db = DB::getInstance(); // fetch a database instance $db->prepare("SELECT title, message FROM BLOG_MESSAGES WHERE userid = {userID}"); $db->assignInt('userID', $userID); $db->execute(); $results = $db->getResults(); ?>
  21. 21. 架构的演变 - MySQL库表散列 • 读一条Blog内容 散列分布后 <?php $db = DB::getInstance($userID);//注意这里 // fetch a database instance, specific for this user $db->prepare("SELECT title, message FROM BLOG_MESSAGES WHERE userid = {userID}"); $db->assignInt('userID', $userID); $db->execute(); $results = $db->getResults(); ?>
  22. 22. 架构的演变 - MySQL库表散列 • 分布算法 1. 取余 对数据增长要有充分估计 2. MD5 <?php $hash = md5($userID); //98f13708210194c475687be6106a3b84 $getFromServerId = substr($hash, 0,1); //9 $getFromDbId = substr($hash, 1,2); //8 ?> 分成16服务器,256个表 3. 日期 不建议使用 如果有大量历史数据需要按时间分析,最好使用 分布式计算系统
  23. 23. 架构的演变 - MySQL库表散列 • MySQL存在问题 1. 数据自动分布需要在应用层实现 (官方的Sharding功能目前很少在 产品环境使用) 麻烦 2. 读写效率低 NoSQL? Distributed NoSQL?
  24. 24. 架构的演变 – Db Tier - NoSQL • Wide Column Store / Column Families  Hadoop / HBase  Cassandra  Hypertable • Document Store  CouchDB  MongoDB • Key Value / Tuple Store  Redis  Tokyo Cabinet / Tyrant • Eventually Consistent Key Value Store  Amazon Dynamo Google BigTable
  25. 25. 架构的演变 – File Tier • 分布式存储 • Hadoop/HDFS • MogileFS
  26. 26. 实例
  27. 27. 架构的演变 -跨机房 Cross the datacenters • 电信 网通 • 或… 美国东西部 或…欧美机房
  28. 28. 架构的演变 -跨机房 Cross the datacenters • 代码发布 • 静态内容分布 (Global CDN) • MySQL同步 • Memcached同步 (repcached / mcproxy) • Cassandra同步 (内置很好的机制。机架感知,注 意网络规划的配合) • 挑战
  29. 29. 其他需要注意的: • 前端优化 常被忽视,但实际上极为重要  如果每个页面减少一个http请求,随着时间推移,将产生很可观的成本节约;同时 让页面加载更好,提高用户体验  推荐阅读《高性能网站建设指南》 • 应用程序设计与架构的配合  数据访问,存储方式 甚或程序逻辑都可能随架构改变 • 完善的产品环境监控体系  Cacti / Nagios / Zabbix 根据整个系统运行情况,按需及时调整架构
  30. 30. 架构师 • 高可用 • 可扩展 • 监控 • 成本控制
  31. 31. 推荐阅读 • Scalable Internet Architectures • Building Scalable Web Sites * • High Performance Web Sites * • High Performance MySQL • MySQL High Availability • * 有中文版本
  32. 32. 谢谢!
  33. 33. • MSN: haohappy@php.net • QQ: 48730696

×