SlideShare a Scribd company logo
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、网络
•   发现系统压力越来越大,页面打开越来越慢
天地初开
•   WebServer与DataBase分离


•   压力减小
•   去除不必要的依赖
•   针对不同类型的服务可以设置不同的操作系统参数


•   大家都有了自己的屋子,天下太平
天地初开
•   访问又开始变慢


•   通常不是WebServer的瓶颈
•   排查问题:数据库连接太多,压力大(连不上,连接慢)


•   肿么办?!

• 思考
•   为什么要连数据库
•   变量和常量,动态和静态
•   把静态页面提取出来
页面静态化
•   缓存服务器(Squid, HAProxy)


•   作用:直接返回一个普通页面,不涉及任何和数据库的交互
•   数据库表示鸭梨不大


•   例如:首页、新闻页


•   需要关心的问题:缓存的实现、失效算法、内存


•   静态化的另一个好处:CDN(Content Distribution Network)
模块静态化
•   因为页面中有一小部分涉及动态内容,需要和数据库交互
•   无法进行页面静态化


•   模板技术
•   组件的拼接
•   就像文字 + 图片一样


•   全页面静态化->部分静态化
•   ESI(Edge Side Include)
•   SSI(Server Side Includes)
还是缓存
•   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
还是缓存
•   WebServer层
•   页面缓存了,模块也缓存了


•   重复查询较少变动的数据?
•   用户信息、栏目结构


•   数据缓存
•   本地缓存(Map,框架),内存 vs. DB
•   分布式缓存(memcached)
分布式缓存
•   本地缓存不够用了
•   应用服务器压力大,内存小
•   memcached
•   一个没有中心节点的由客户端做Hash
    路由的分布式缓存


•   没有中心节点
•   客户端Hash
•   分布式
中心节点
•   分布式的含义
•   中心节点——管理者


•   有管理者一定好吗?
•   单点问题


•   没有管理者一定好吗?


•   到底是要闹哪样


•   中心节点的容灾
数据缓存
•   讲了这么多,数据缓存到底是干嘛的


•   过去的访问路径
•   浏览器->Tomcat->数据库->磁盘


•   现在的访问路径
•   浏览器->Tomcat->内存直接返回


•   各位修改人人网资料的时间间隔?一周?一个月?
•   没有缓存:查询1000次数据库
•   有缓存:查询1次数据库,访问999次内存
缓存的问题
•   命中率?
•   由内存容量造成


•   80%的访问都包含热点
•   例如:人人网新鲜事第一页、好友列表第一页


•   命中率低的后果
•   数据库中枪
•   缓存 ≈ 无效


•   怎么办?
•   结合业务特点,合理放置缓存内容
WebServer的分布式
•   数据库比较清闲了
•   WebServer压力上来了


•   加机器


• 会遇到的问题
•   负载均衡
•   持久化数据
•   数据同步
•   上传文件


•   我们的第一个集群,Cool!
数据库的分布式
•   分布式
•   很NB的样子


•   搞定了WebServer,用同样的方式搞定数据库
•   No.


•   为什么WebServer容易扩展而数据库不行?


•   数据库的分布式
•   分库和分表
数据库的分布式
•   非得分库分表吗?
•   会不会死人?


•   1、压力在查询(读)
•   主备
•   读写分离


•   2、压力在插入、更新、删除(写)
•   分库和分表
分库和分表
•   OK,库和表分完了


•   连接哪个库?
•   访问哪张表?
•   傻眼了


•   中间层
•   屏蔽分库分表规则


•   我们的第二个集群
读写分离
•   访问量暴增,幸福感爆满,差点以为自己是下一个


•   数据库压力增大


•   读写分离
•   事务操作(插入、更新、删除) —— Master
•   查询 —— Slave


•   主从同步
读写分离
读写分离
•   为什么读写分离能提高性能?



• 遇到的问题
•   同步延迟
•   实时查询



• 技术点
•   同步
•   Semi-Sync
•   请求分派
MySQL到头了
•   互联网时代,许多数据只是简单的Key-Value Pair(Map)
•   如果不需要复杂的关系查询,为什么要负担它带来的损耗呢
•   SQL解析,关系模型


•   性能
•   海量数据(大块存储)


•   HandlerSocket


•   BigTable
•   Hbase
•   Redis
新时代?
•   现在我们有了各种各样的存储
•   MySQL, Hbase, Redis


•   发挥各家所长


•   WebServer强大的可扩展性
新时代?
•   But?


•   之前的道路:一个应用的发展
•   模块耦合度高


•   部署
•   启动
•   排错
•   调优
Next Generation
•   拆!


•   服务化
•   各司其职



• 遇到的问题
•   不同的应用完全在不同的服务器上
•   通信
•   调用
•   共享数据
Next Generation
Message
Message
•   消息中间件


•   异步
•   更贴近现实世界
•   小消息有大作用
•   系统扩展的不二法门


• 遇到的问题
•   顺序投递
•   重复投递
•   事务
•   容灾
RPC
•   远程调用
•   你可能听过:RMI/WebService
RPC
•   形式有很多种
•   RMI/HTTP/TCP


•   RPC的本质


•   为什么要用RPC
Data Center
•   数据中心


•   异构数据存储的统一接口
•   方便的异构回流和传输


•   服务和数据的解耦


•   便于数据分析
•   Hadoop, Hive
Then…
Then…
•   一个分布式系统建成了


•   分别改进


•   有专人负责的应用


•   系统越来越复杂
•   新的挑战
•   运维
• Thank you


• Q&A

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新版首页总结 技术篇
 

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博客出品-服务器运维集群方法总结
 

More from drewz lin

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearydrewz lin
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013drewz lin
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13drewz lin
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrichdrewz lin
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2drewz lin
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2drewz lin
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfdrewz lin
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equaldrewz lin
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21drewz lin
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansendrewz lin
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaoladrewz lin
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsdrewz lin
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentationdrewz lin
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsdrewz lin
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martindrewz lin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowaspdrewz lin
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usadrewz lin
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013drewz lin
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架drewz lin
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈drewz lin
 

More from drewz lin (20)

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
 
Csrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equalCsrf not-all-defenses-are-created-equal
Csrf not-all-defenses-are-created-equal
 
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
Chuck willis-owaspbwa-beyond-1.0-app secusa-2013-11-21
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
 
新浪微博稳定性经验谈
新浪微博稳定性经验谈新浪微博稳定性经验谈
新浪微博稳定性经验谈
 

大型网站架构的发展

  • 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… • 一个分布式系统建成了 • 分别改进 • 有专人负责的应用 • 系统越来越复杂 • 新的挑战 • 运维