Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化

上传人:ZJ****4 文档编号:46948005 上传时间:2018-06-28 格式:PDF 页数:45 大小:1.79MB
返回 下载 相关 举报
Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化_第1页
第1页 / 共45页
Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化_第2页
第2页 / 共45页
Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化_第3页
第3页 / 共45页
Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化_第4页
第4页 / 共45页
Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化》由会员分享,可在线阅读,更多相关《Web网站架构案例分析-从优酷网浅谈大型网站的架构和优化(45页珍藏版)》请在金锄头文库上搜索。

1、Web网站架构案例分析 从优酷网浅谈大型网站的架构和优化QCon 2009 北京邱丹 议程 架构和架构和环境环境 WebWeb架构的架构的8 8个特性个特性 优优酷网案例酷网案例 网络网络优化优化Part I架构和环境 适应天上飞翔:鸟拥有翅膀适应天上飞翔:鸟拥有翅膀 适应水里呼吸:鱼拥有鳃适应水里呼吸:鱼拥有鳃通用架构的梦想 愿景:让拥有鳃和翅膀的人愿景:让拥有鳃和翅膀的人, , 能够适应能够适应 各种环境各种环境结果:被具体环境退化或替换结果:被具体环境退化或替换架构的进化和退化 进化原理进化原理 - - 寻找最适合的寻找最适合的 退化原理退化原理 - - 简化不必要的简化不必要的架构师的

2、职责初始环境初始环境 while(true) 寻找适应环境的结构寻找适应环境的结构; /*进化进化*/ 简化结构简化结构; /*退化退化*/ 环境改变环境改变; Part II Web环境下架构8个特性可扩展 (Scalability)在线升级效率可靠性可理解简单核心独立性模块化Part III 网站架构案例- - 中国大陆领先的在线视频网站中国大陆领先的在线视频网站关于优酷关于优酷网网()()05000100001500020000网站规模网站规模(08(08年年9 9月月) )VV(播放数)/日PV/日万Source: iUserTracker2008年9月VV: 1.6VV: 1.6亿亿

3、+ + 日上传视频日上传视频: 6: 6万万+ +网站核心业务带来的架构特性可扩展 (Scalability)在线升级效率可靠性可理解简单核心独立性模块化创世纪:网站的初始环境 20062006年下半年年下半年 500500家视频网站存在,但规模都不大家视频网站存在,但规模都不大 部分互联网用户关注部分互联网用户关注 巨大的用户潜力巨大的用户潜力拥抱开源世界前端框架Browser : http:/ Front Framework: hook(request) module, method, params method(params)echo reponse module1.php: metho

4、d1(params) return “hello, world!” 简单前端框架满足的特性 模块分离,多人开发模块分离,多人开发 无状态:前端可扩展无状态:前端可扩展 分层,分层,UIUI分离分离 没有采用第三方没有采用第三方WebWeb框架框架 自建自建CMSCMS解决掉大部分页解决掉大部分页 面显示面显示可扩展 (Scalability)在线升级效率可靠性可理解简单核心独立性模块化CMS前端架构(局部)从最简单开始apachephp 能能runrun就行就行 时间:时间:1 1个月个月 功能:核心功能功能:核心功能 MySQLMySQL : 1: 1 单点单点 搜索引擎:无搜索引擎:无 中

5、间层:无中间层:无架构进化 访问量迅速增加,如何进化访问量迅速增加,如何进化? ? 改进策略:增加缓存改进策略:增加缓存缓存黄金原则:local, local ,localCPUCPU一级缓存一级缓存CPUCPU二二级缓存级缓存内存内存硬盘硬盘LANLANWANWAN 如何让数据更靠近如何让数据更靠近CPU?CPU? 让少部分常用数据就近存起来缓存数据缓存数据空闲槽空闲槽数据仅供参考BrowserHTTP缓存 Squid/VarnishCache proxyHTTP Reverse ProxyBrowser CacheapachephpapachephpapachephpHTTP Respon

6、se: Cache-Control: max-age=3600, must-revalidate Expires: Fri, 28 Oct 2007 14:19:41 GMT Last-Modified: Mon, 27 Jun 2007 05:21:17 GMT分布式内存key-value缓存BrowserCache proxyCache proxyBrowser CacheapachephpapachephpapachephpCache proxyMemcachedMemcached 协议协议: 存存:set key1 0 0 3rnfoorn STOREDrn 取取:get key1rn

7、 VALUE key1 0 3rnfoornENDrn大文件缓存(内部项目) SquidSquid问题问题 write(),用户进程空间消耗 lighttpd1.5lighttpd1.5/ /AIOAIO问题问题 AIO读取文件到用户内存导致效率低下 SendfileSendfile()() ZeroCopy直接发送文件到网卡接口 不用内存做缓存不用内存做缓存 避免内存拷贝 避免锁缓存满足的特性 如果数据可缓存,效率增如果数据可缓存,效率增 长明显长明显 扩展性扩展性 缓存命中率直接影响效率缓存命中率直接影响效率 缓存技术容易被滥用缓存技术容易被滥用可扩展 (Scalability)在线升级效

8、率可靠性可理解简单核心独立性模块化新的问题? 数据库成为性能瓶颈数据库成为性能瓶颈BrowserCache proxyCache proxyBrowser CacheapachephpapachephpapachephpCache proxyMemcached扩展中间层 or 扩展数据库VSread clusterMySQL Replicationapachephpapachephpapachephpwrite主主/从复制从复制MySQL 主/从复制过程主库主库丛库丛库100.101UPDATE t1.102INSERT t2.103ALTER t1.104.UPDATE t1 . INSER

9、T t2. ALTER t1 .I/O threadSQL threadbinary log100.101UPDATE t1.102INSERT t2.103ALTER t1.104.relay logUPDATE t1 . INSERT t2. ALTER t1 .tcp长连接长连接数据复制带来的特性 读扩展读扩展 适合读多写少的业务适合读多写少的业务 可靠性可靠性 简单简单 复制延时复制延时 0.1s0.1s 并非万灵金丹并非万灵金丹 复制延时恶化复制延时恶化可扩展 (Scalability)在线升级效率可靠性可理解简单核心独立性模块化MySQL 复制问题 无法写扩展read cluste

10、r100w100w 250r100w 250r100w 250r100 write100w 250rapachephpapachephpapachephp1000 read写入无法扩展写入无法扩展 写入无法缓存写入无法缓存 复制延时复制延时 锁表率上升锁表率上升 表变大,缓存率下降表变大,缓存率下降现在该如何进化? MySQLMySQL Proxy/Proxy/HSCALEHSCALE ? ? lighttpdlighttpd同一作者,进度受限。同一作者,进度受限。 lualua中间层,性能中间层,性能/ /可维护性可维护性/ /成熟度?成熟度? MySQLMySQL 分区技术分区技术 ? ?

11、 无法进行跨服务器分区。无法进行跨服务器分区。 MySQLMySQL集群集群( (MySQLMySQL NDBNDB Cluster) ?Cluster) ? 厚重的瑞士军刀,层面过多,性能厚重的瑞士军刀,层面过多,性能/ /复杂度?复杂度? 没有银弹方案。没有银弹方案。 ? ?SSD优化MySQL 某单台某单台MySQLMySQL服务器服务器( (intelintel- -4core,16G4core,16G, , ssdssd) ) 单表单表80008000万万rowsrows 1000+1000+连接连接/ /秒秒 iowaitiowait 1% 1%read clusterDB写入拆分

12、read clusterapachephpapachephpapachephpDB垂直分区Part 1Part 2Part 3其他其他消息消息用户用户其他其他消息消息用户用户joinjoinDB水平分片(Sharding)其他其他消息消息用户用户其他其他用户用户消息消息其他其他用户用户消息消息Shard 1Shard 2按按user_id分片分片分片定位apachephpapachephpapachephpSharding ManagerUser_IDShard_ID101110211032目录目录Shard 1Shard 2(1) 获取获取user 103的的messages(2) user

13、 103在哪在哪?(3) shard 2Shard群的分组管理Server1shard_db1shard1shard2shard3shard_db2shard4shard5shard6Server2shard_db3shard7shard8shard9shard_db4shard10shard11shard12如何处理跨shard的查询? 上策:不面对上策:不面对 中策:多维分片索引、分布式搜索引擎中策:多维分片索引、分布式搜索引擎 下策:分布式数据库查询下策:分布式数据库查询良好的扩展性BrowserCache proxyCache proxyBrowser Cacheapachephpap

14、achephpapachephpCache proxyMemcached分区带来的特性 分区并非必要分区并非必要 增加管理复杂度增加管理复杂度可扩展 (Scalability)在线升级效率可靠性可理解简单核心独立性模块化Part IV 网络吞吐量优化 吞吐量同响应速度的不同吞吐量同响应速度的不同 进程切换开销进程切换开销 保持当前cpu寄存器(eax,ebx,esi,edi,.) 恢复新进程cpu寄存器(eax,ebx,esi,edi,.) jmp new_eip fork/fork/pthreadpthread问题问题 大量进程切换开销 寄存器越多效率越低 用vmstat查看cs Apach

15、e Apache preforkprefork和和MySQLMySQL的的pthreadpthread 大量进程切换开销过大事件驱动 select()select()问题问题 1024限制 位扫描 poll()poll()问题问题 从内核到用户进程拷贝描述符数组 epollepoll(kernel 2.6+)(kernel 2.6+) 采用mmap()避免内核到用户进程的拷贝 libevent封装epoll/kqueue epoll推动当今Web memcached/lighttpd/nginx/squid/haproxy案例:Memcached 连接问题 PHPPHP对对memcachedmemcached的的tcptcp连连 接开销接开销 静态静态HashHash扩展不方便扩展不方便本地Memcached agent(内部项目)基于基于libeventlibevent( (封装封装epo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号