SlideShare a Scribd company logo

大型网站架构的发展

Hesey
Hesey
1 of 36
Download to read offline
大型网站架构的发展
  HeseyWang
Outline
•   为什么这很重要


•   一个最简单的网站
•   架构要解决的问题
•   压力->应对


•   高性能 vs. 分布式
Outline
•   静态化
•   缓存
•   分布式
•   单点
•   分库分表
•   读写分离
•   异构存储
•   消息
•   远程调用
•   数据中心
为什么这很重要
•   Java


•   企业级应用(Java EE)
•   Android(服务端也许还是……)


•   我不用Java?
•   It also works.
一个最简单的网站
•   想想我们的课程设计


•   WebServer: Apache(Lighttpd, nginx)
•   AppServer: Tomcat, JBoss, Jetty
•   Language: Java(Servlet/JSP), PHP, Python, Ruby
•   DataBase: MySQL, NoSQL(MongoDB, Redis, Cassandra, HBase)


•   Example: Tomcat + Java + MySQL
•   够不够典型?
洪荒世界
•   WebServer + DataBase




•   Tomcat挂了?
•   数据库挂了?


•   系统压力密集:CPU、内存、磁盘I/O、网络
•   发现系统压力越来越大,页面打开越来越慢
Ad

Recommended

高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版XiaoJun Hong
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBMonster Supreme
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化XiaoJun Hong
 

More Related Content

What's hot

漫画背后的故事
漫画背后的故事漫画背后的故事
漫画背后的故事长洪 余
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维Jinrong Ye
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
No sql带来了什么 孙立
No sql带来了什么   孙立No sql带来了什么   孙立
No sql带来了什么 孙立Shaoning Pan
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS國昭 張
 
MySQL运维那些事
MySQL运维那些事MySQL运维那些事
MySQL运维那些事Jinrong Ye
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化Jinrong Ye
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化Jinrong Ye
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化Jinrong Ye
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background宗志 陈
 
Memcached浅析 韩建华
Memcached浅析 韩建华Memcached浅析 韩建华
Memcached浅析 韩建华youzitang
 
Mysql调优
Mysql调优Mysql调优
Mysql调优ken shin
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SAJinrong Ye
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践drewz lin
 
浅谈数据库优化
浅谈数据库优化浅谈数据库优化
浅谈数据库优化Sky Jian
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇传贵 谢
 

What's hot (19)

漫画背后的故事
漫画背后的故事漫画背后的故事
漫画背后的故事
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
No sql带来了什么 孙立
No sql带来了什么   孙立No sql带来了什么   孙立
No sql带来了什么 孙立
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS
 
MySQL运维那些事
MySQL运维那些事MySQL运维那些事
MySQL运维那些事
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 
MySQL数据库设计、优化
MySQL数据库设计、优化MySQL数据库设计、优化
MySQL数据库设计、优化
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
Leveldb background
Leveldb backgroundLeveldb background
Leveldb background
 
Level db
Level dbLevel db
Level db
 
Memcached浅析 韩建华
Memcached浅析 韩建华Memcached浅析 韩建华
Memcached浅析 韩建华
 
Mysql调优
Mysql调优Mysql调优
Mysql调优
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SA
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践
 
浅谈数据库优化
浅谈数据库优化浅谈数据库优化
浅谈数据库优化
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇
 

Viewers also liked

漢杰科技 營業秘密保護與鑑識作業 2015
漢杰科技 營業秘密保護與鑑識作業 2015漢杰科技 營業秘密保護與鑑識作業 2015
漢杰科技 營業秘密保護與鑑識作業 2015Steven 陳冶豪
 
專利商品化及智慧財產專業人員培訓計畫介紹
專利商品化及智慧財產專業人員培訓計畫介紹專利商品化及智慧財產專業人員培訓計畫介紹
專利商品化及智慧財產專業人員培訓計畫介紹isly7518
 
Secure Android Apps- nVisium Security
Secure Android Apps- nVisium SecuritySecure Android Apps- nVisium Security
Secure Android Apps- nVisium SecurityJack Mannino
 
Objective briefing on the current mobile threat 2010/2011
Objective briefing on the current mobile threat 2010/2011Objective briefing on the current mobile threat 2010/2011
Objective briefing on the current mobile threat 2010/2011Транслируем.бел
 
Security Best Practices
Security Best PracticesSecurity Best Practices
Security Best PracticesClint Edmonson
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 

Viewers also liked (7)

漢杰科技 營業秘密保護與鑑識作業 2015
漢杰科技 營業秘密保護與鑑識作業 2015漢杰科技 營業秘密保護與鑑識作業 2015
漢杰科技 營業秘密保護與鑑識作業 2015
 
專利商品化及智慧財產專業人員培訓計畫介紹
專利商品化及智慧財產專業人員培訓計畫介紹專利商品化及智慧財產專業人員培訓計畫介紹
專利商品化及智慧財產專業人員培訓計畫介紹
 
Secure Android Apps- nVisium Security
Secure Android Apps- nVisium SecuritySecure Android Apps- nVisium Security
Secure Android Apps- nVisium Security
 
Objective briefing on the current mobile threat 2010/2011
Objective briefing on the current mobile threat 2010/2011Objective briefing on the current mobile threat 2010/2011
Objective briefing on the current mobile threat 2010/2011
 
Security Best Practices
Security Best PracticesSecurity Best Practices
Security Best Practices
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 

Similar to 大型网站架构的发展

Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事freezr
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践锐 张
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计RolfZhang
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
数据库高可用架构
数据库高可用架构数据库高可用架构
数据库高可用架构freezr
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
111030 gztechparty-小路-云时代的mysql
111030 gztechparty-小路-云时代的mysql111030 gztechparty-小路-云时代的mysql
111030 gztechparty-小路-云时代的mysqlZoom Quiet
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)Feng Yu
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能Feng Yu
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 

Similar to 大型网站架构的发展 (20)

Exadata那点事
Exadata那点事Exadata那点事
Exadata那点事
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
数据库高可用架构
数据库高可用架构数据库高可用架构
数据库高可用架构
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
111030 gztechparty-小路-云时代的mysql
111030 gztechparty-小路-云时代的mysql111030 gztechparty-小路-云时代的mysql
111030 gztechparty-小路-云时代的mysql
 
mercury
mercurymercury
mercury
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
内存数据库[1]
内存数据库[1]内存数据库[1]
内存数据库[1]
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
MySQL和IO(下)
MySQL和IO(下)MySQL和IO(下)
MySQL和IO(下)
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 

大型网站架构的发展

  • 2. Outline • 为什么这很重要 • 一个最简单的网站 • 架构要解决的问题 • 压力->应对 • 高性能 vs. 分布式
  • 3. Outline • 静态化 • 缓存 • 分布式 • 单点 • 分库分表 • 读写分离 • 异构存储 • 消息 • 远程调用 • 数据中心
  • 4. 为什么这很重要 • Java • 企业级应用(Java EE) • Android(服务端也许还是……) • 我不用Java? • It also works.
  • 5. 一个最简单的网站 • 想想我们的课程设计 • WebServer: Apache(Lighttpd, nginx) • AppServer: Tomcat, JBoss, Jetty • Language: Java(Servlet/JSP), PHP, Python, Ruby • DataBase: MySQL, NoSQL(MongoDB, Redis, Cassandra, HBase) • Example: Tomcat + Java + MySQL • 够不够典型?
  • 6. 洪荒世界 • WebServer + DataBase • Tomcat挂了? • 数据库挂了? • 系统压力密集:CPU、内存、磁盘I/O、网络 • 发现系统压力越来越大,页面打开越来越慢
  • 7. 天地初开 • WebServer与DataBase分离 • 压力减小 • 去除不必要的依赖 • 针对不同类型的服务可以设置不同的操作系统参数 • 大家都有了自己的屋子,天下太平
  • 8. 天地初开 • 访问又开始变慢 • 通常不是WebServer的瓶颈 • 排查问题:数据库连接太多,压力大(连不上,连接慢) • 肿么办?! • 思考 • 为什么要连数据库 • 变量和常量,动态和静态 • 把静态页面提取出来
  • 9. 页面静态化 • 缓存服务器(Squid, HAProxy) • 作用:直接返回一个普通页面,不涉及任何和数据库的交互 • 数据库表示鸭梨不大 • 例如:首页、新闻页 • 需要关心的问题:缓存的实现、失效算法、内存 • 静态化的另一个好处:CDN(Content Distribution Network)
  • 10. 模块静态化 • 因为页面中有一小部分涉及动态内容,需要和数据库交互 • 无法进行页面静态化 • 模板技术 • 组件的拼接 • 就像文字 + 图片一样 • 全页面静态化->部分静态化 • ESI(Edge Side Include) • SSI(Server Side Includes)
  • 11. 还是缓存 • L1 cache reference 0.5 ns • Branch mispredict 5 ns • L2 cache reference 7 ns • Mutex lock/unlock 100 ns (25) • Main memory reference 100 ns • Compress 1K bytes with Zippy 10,000 ns (3,000) • Send 2K bytes over 1 Gbps network 20,000 ns • Read 1 MB sequentially from memory 250,000 ns • Round trip within same datacenter 500,000 ns • Disk seek 10,000,000 ns • Read 1 MB sequentially from network 10,000,000 ns • Read 1 MB sequentially from disk 30,000,000 ns (20,000,000) • Send packet CA->Netherlands->CA 150,000,000 ns
  • 12. 还是缓存 • WebServer层 • 页面缓存了,模块也缓存了 • 重复查询较少变动的数据? • 用户信息、栏目结构 • 数据缓存 • 本地缓存(Map,框架),内存 vs. DB • 分布式缓存(memcached)
  • 13. 分布式缓存 • 本地缓存不够用了 • 应用服务器压力大,内存小 • memcached • 一个没有中心节点的由客户端做Hash 路由的分布式缓存 • 没有中心节点 • 客户端Hash • 分布式
  • 14. 中心节点 • 分布式的含义 • 中心节点——管理者 • 有管理者一定好吗? • 单点问题 • 没有管理者一定好吗? • 到底是要闹哪样 • 中心节点的容灾
  • 15. 数据缓存 • 讲了这么多,数据缓存到底是干嘛的 • 过去的访问路径 • 浏览器->Tomcat->数据库->磁盘 • 现在的访问路径 • 浏览器->Tomcat->内存直接返回 • 各位修改人人网资料的时间间隔?一周?一个月? • 没有缓存:查询1000次数据库 • 有缓存:查询1次数据库,访问999次内存
  • 16. 缓存的问题 • 命中率? • 由内存容量造成 • 80%的访问都包含热点 • 例如:人人网新鲜事第一页、好友列表第一页 • 命中率低的后果 • 数据库中枪 • 缓存 ≈ 无效 • 怎么办? • 结合业务特点,合理放置缓存内容
  • 17. WebServer的分布式 • 数据库比较清闲了 • WebServer压力上来了 • 加机器 • 会遇到的问题 • 负载均衡 • 持久化数据 • 数据同步 • 上传文件 • 我们的第一个集群,Cool!
  • 18. 数据库的分布式 • 分布式 • 很NB的样子 • 搞定了WebServer,用同样的方式搞定数据库 • No. • 为什么WebServer容易扩展而数据库不行? • 数据库的分布式 • 分库和分表
  • 19. 数据库的分布式 • 非得分库分表吗? • 会不会死人? • 1、压力在查询(读) • 主备 • 读写分离 • 2、压力在插入、更新、删除(写) • 分库和分表
  • 20. 分库和分表 • OK,库和表分完了 • 连接哪个库? • 访问哪张表? • 傻眼了 • 中间层 • 屏蔽分库分表规则 • 我们的第二个集群
  • 21. 读写分离 • 访问量暴增,幸福感爆满,差点以为自己是下一个 • 数据库压力增大 • 读写分离 • 事务操作(插入、更新、删除) —— Master • 查询 —— Slave • 主从同步
  • 23. 读写分离 • 为什么读写分离能提高性能? • 遇到的问题 • 同步延迟 • 实时查询 • 技术点 • 同步 • Semi-Sync • 请求分派
  • 24. MySQL到头了 • 互联网时代,许多数据只是简单的Key-Value Pair(Map) • 如果不需要复杂的关系查询,为什么要负担它带来的损耗呢 • SQL解析,关系模型 • 性能 • 海量数据(大块存储) • HandlerSocket • BigTable • Hbase • Redis
  • 25. 新时代? • 现在我们有了各种各样的存储 • MySQL, Hbase, Redis • 发挥各家所长 • WebServer强大的可扩展性
  • 26. 新时代? • But? • 之前的道路:一个应用的发展 • 模块耦合度高 • 部署 • 启动 • 排错 • 调优
  • 27. Next Generation • 拆! • 服务化 • 各司其职 • 遇到的问题 • 不同的应用完全在不同的服务器上 • 通信 • 调用 • 共享数据
  • 30. Message • 消息中间件 • 异步 • 更贴近现实世界 • 小消息有大作用 • 系统扩展的不二法门 • 遇到的问题 • 顺序投递 • 重复投递 • 事务 • 容灾
  • 31. RPC • 远程调用 • 你可能听过:RMI/WebService
  • 32. RPC • 形式有很多种 • RMI/HTTP/TCP • RPC的本质 • 为什么要用RPC
  • 33. Data Center • 数据中心 • 异构数据存储的统一接口 • 方便的异构回流和传输 • 服务和数据的解耦 • 便于数据分析 • Hadoop, Hive
  • 35. Then… • 一个分布式系统建成了 • 分别改进 • 有专人负责的应用 • 系统越来越复杂 • 新的挑战 • 运维