SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Web网站架构案例分析
从优酷网浅谈大型网站的架构和优化

    邱丹 qiudan@gmail.com
          QCon 2009 北京
议   程




 架构和环境

 Web架构的8个特性

 优酷网案例

 网络优化
Part I   架构和环境




 适应天上飞翔:鸟拥有翅膀
 适应水里呼吸:鱼拥有鳃
通用架构的梦想




 愿景:让拥有鳃和翅膀的人, 能够适应
  各种环境
结果:被具体环境退化或替换
架构的进化和退化




 进化原理 - 寻找最适合的
 退化原理 - 简化不必要的
架构师的职责




初始环境
while(true)
{
   寻找适应环境的结构; /*进化*/
   简化结构; /*退化*/
   环境改变;
}
Part II Web环境下架构8个特性



 可扩展
 (Scalability)
 在线升级

 效率

 可靠性
 可理解

 简单核心
 独立性

 模块化
Part III 网站架构案例


关于优酷网(youku.com)
- 中国大陆领先的在线视频网站
网站规模(08年9月)                      VV: 1.6亿+
  万
20000                                    日上传视频: 6万+
15000

10000

5000

   0




        VV(播放数)/日   PV/日
                           Source: iUserTracker 2008年9月
网站核心业务带来的架构特性


可扩展
(Scalability)
在线升级
效率
可靠性
可理解             √
简单核心            √
独立性
模块化
创世纪:网站的初始环境



 2006年下半年

 500家视频网站存在,但规模都不大

 部分互联网用户关注

 巨大的用户潜力
拥抱开源世界
前端框架


Browser : http://www..com/<module>/<method>/[params]

Front Framework:
hook(request)
{
   module, method, params <-- request.url

    response = module.php->method(params)

    echo reponse
}

module1.php:
method1(params)
{
    return “<p>hello, world!</p>”
}
简单前端框架满足的特性


                 可扩展             √
 模块分离,多人开发      (Scalability)
 无状态:前端可扩展      在线升级            √
 分层,UI分离        效率

                 可靠性             √
 没有采用第三方Web框架   可理解             √√
 自建CMS解决掉大部分页   简单核心            √√
  面显示            独立性             √
                 模块化             √
CMS前端架构(局部)
从最简单开始



 能run就行
 时间:1个月
 功能:核心功能                apache
                            php
   MySQL : 1
   单点
   搜索引擎:无
   中间层:无
架构进化



 访问量迅速增加,如何进化?

 改进策略:增加缓存
缓存黄金原则:local, local ,local


                            如何让数据更靠近CPU?
                              让少部分常用数据就近存起来

         CPU一级缓存
         CPU二级缓存
           内存                                 缓存数据
                                              空闲槽
           硬盘


           LAN


           WAN
数据仅供参考
HTTP缓存 – Squid/Varnish



Browser
    Browser
    Cache
                    Cache
                                     apache
                                     apache
                     HTTP             apache
                    proxy
                     Reverse             php
                                         php
                                          php
                     Proxy




     HTTP Response:
     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缓存


                                         Cache
                                          Memcached
Browser                                  proxy
    Browser
    Cache
                            apache
                            apache
               Cache
               Cache         apache
               proxy            php
                                php
               proxy             php



 Memcached 协议:
 存:set key1 0 0 3rnfoorn --> STOREDrn
 取:get key1rn --> VALUE key1 0 3rnfoornENDrn
大文件缓存(内部项目)


 Squid问题
    write(),用户进程空间消耗

 lighttpd1.5/AIO问题
    AIO读取文件到用户内存导致效率低下

 Sendfile()
    ZeroCopy直接发送文件到网卡接口

 不用内存做缓存
   避免内存拷贝
   避免锁
缓存满足的特性


                可扩展             √√
 如果数据可缓存,效率增   (Scalability)
  长明显           在线升级            √
 扩展性           效率              √
 缓存命中率直接影响效率   可靠性             √√
 缓存技术容易被滥用     可理解             √√
                简单核心            √√√
                独立性             √
                模块化             √
新的问题?



   数据库成为性能瓶颈

                                    Cache
                                     Memcached
Browser                             proxy
    Browser
    Cache
              Cache      apache
                         apache
              Cache       apache
              proxy
              proxy          php
                             php
                              php
扩展中间层 or 扩展数据库




   VS
MySQL Replication



apache
apache
 apache
    php
    php           write
     php



                                  主/从复制
   read cluster
MySQL 主/从复制过程


     UPDATE t1 ...
     INSERT t2...
     ALTER t1 ...                     binary log
                                      100   ...
                                      101   UPDATE t1...
                                      102   INSERT t2...
主库                                    103   ALTER t1...
                                      104   ...




                                  tcp 长连接


                                            relay log
                                            100   ...
                     I/O thread             101   UPDATE t1...
     UPDATE t1 ...                          102   INSERT t2...

丛库   INSERT t2...
     ALTER t1 ...
                                            103   ALTER t1...
                     SQL thread             104   ...
数据复制带来的特性



 读扩展 –         可扩展             √√√
                (Scalability)
  适合读多写少的业务
                在线升级            √
 可靠性
                效率              √
 简单
                可靠性             √√√
 复制延时 < 0.1s
                可理解             √√
                简单核心            √√√√
 并非万灵金丹        独立性             √
 复制延时恶化        模块化             √
MySQL 复制问题 – 无法写扩展


                                         写入无法扩展
apache
apache                                   写入无法缓存
 apache
    php                                  复制延时
    php
     php           100 write
                               100w      锁表率上升
                                         表变大,缓存率下降

           1000 read

    read cluster


        100w       100w   100w    100w
        250r       250r   250r    250r
现在该如何进化?



 MySQL Proxy/HSCALE ?
  lighttpd同一作者,进度受限。
  lua中间层,性能/可维护性/成熟度?
 MySQL 分区技术 ?
  无法进行跨服务器分区。
 MySQL集群(MySQL NDB Cluster) ?
  厚重的瑞士军刀,层面过多,性能/复杂度?
 没有银弹方案。
 ?
SSD优化MySQL



   某单台MySQL服务器(intel-4core,16G, ssd)
   单表8000万rows
   1000+连接/秒
   iowait < 1%
DB写入拆分


               apache
               apache
                apache
                   php
                   php
                    php




read cluster          read cluster
DB垂直分区


     Part 1    Part 2   Part 3

      其他        用户       消息




其他              用户               消息
        join              join
DB水平分片(Sharding)



                       Shard 1   其他


                                 用户

其他   用户       消息                 消息



                       Shard 2   其他


                                 用户
               按user_id分片
                                 消息
分片定位


(1) 获取user 103的messages
                                            Shard 1
                   apache
                   apache
                    apache
                       php
                       php
                        php

 (2) user 103在哪?
                             (3) shard 2
              Sharding
              Manager                      Shard 2


              目录
               User_ID   Shard_ID
               101       1
               102       1
               103       2
Shard群的分组管理



Server1                        Server2
 shard_db1                      shard_db3
  shard1     shard2   shard3     shard7     shard8    shard9




 shard_db2                      shard_db4
  shard4     shard5   shard6     shard10    shard11   shard12
如何处理跨shard的查询?



 上策:不面对

 中策:多维分片索引、分布式搜索引擎

 下策:分布式数据库查询
良好的扩展性




                                 Cache
                                  Memcached
Browser                          proxy
    Browser
    Cache
              Cache   apache
                      apache
              Cache    apache
              proxy
              proxy       php
                          php
                           php
分区带来的特性



 分区并非必要     可扩展             √√√√
 增加管理复杂度    (Scalability)
             在线升级            √
             效率              √
             可靠性             √√√√
             可理解             √√√
             简单核心            √√√√
             独立性             √
             模块化             √
Part IV 网络吞吐量优化



 吞吐量同响应速度的不同
 进程切换开销
    保持当前cpu寄存器(eax,ebx,esi,edi,...)
    恢复新进程cpu寄存器(eax,ebx,esi,edi,...)
    jmp new_eip
 fork/pthread问题
    大量进程切换开销
    寄存器越多效率越低
    用vmstat查看cs
 Apache prefork和MySQL的pthread
    大量进程切换开销过大
事件驱动



 select()问题
    1024限制
    位扫描
 poll()问题
    从内核到用户进程拷贝描述符数组
 epoll(kernel 2.6+)
    采用mmap()避免内核到用户进程的拷贝
    libevent封装epoll/kqueue
    epoll推动当今Web
       memcached/lighttpd/nginx/squid/haproxy
案例:Memcached 连接问题



 PHP对memcached的tcp连
  接开销

 静态Hash扩展不方便
本地Memcached agent(内部项目)


   基于libevent(封装epoll)
   memcached兼容接口
   本地unix domain socket
   对Memcached长连接
   Memcached动态任意扩展(Consistent hashing)




             php      php                       memcached

                           unix domain socket

                   agent                        memcached

                             tcp连接池
Q&A
谢谢!

Weitere ähnliche Inhalte

Was ist angesagt?

淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包Wen Liao
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案maclean liu
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Wensong Zhang
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略maclean liu
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 
Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4drewz lin
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定baggioss
 
20110625.【打造高效能的cdn系统】.易统
20110625.【打造高效能的cdn系统】.易统20110625.【打造高效能的cdn系统】.易统
20110625.【打造高效能的cdn系统】.易统锐 张
 
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师Enlight Chen
 
Taobao海量图片存储与cdn系统 v2-系统架构师
Taobao海量图片存储与cdn系统 v2-系统架构师Taobao海量图片存储与cdn系统 v2-系统架构师
Taobao海量图片存储与cdn系统 v2-系统架构师Wensong Zhang
 
MySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU BottleneckMySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU BottleneckSky Jian
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构Cosey Lee
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术Feng Yu
 

Was ist angesagt? (15)

淺談Debian套件打包
淺談Debian套件打包淺談Debian套件打包
淺談Debian套件打包
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
 
Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务Taobao图片存储与cdn系统到服务
Taobao图片存储与cdn系统到服务
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
Track1dongsiying4
Track1dongsiying4Track1dongsiying4
Track1dongsiying4
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定
 
20110625.【打造高效能的cdn系统】.易统
20110625.【打造高效能的cdn系统】.易统20110625.【打造高效能的cdn系统】.易统
20110625.【打造高效能的cdn系统】.易统
 
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师
章文嵩:Taobao海量图片存储与cdn系统 v2-系统架构师
 
Taobao海量图片存储与cdn系统 v2-系统架构师
Taobao海量图片存储与cdn系统 v2-系统架构师Taobao海量图片存储与cdn系统 v2-系统架构师
Taobao海量图片存储与cdn系统 v2-系统架构师
 
MySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU BottleneckMySQL Tuning For CPU Bottleneck
MySQL Tuning For CPU Bottleneck
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
C1000K高性能服务器构建技术
C1000K高性能服务器构建技术C1000K高性能服务器构建技术
C1000K高性能服务器构建技术
 

Andere mochten auch

Andere mochten auch (7)

Naiset, verkostoituminen ja sosiaalinen teknologia - Digi.fi
Naiset, verkostoituminen ja sosiaalinen teknologia - Digi.fi Naiset, verkostoituminen ja sosiaalinen teknologia - Digi.fi
Naiset, verkostoituminen ja sosiaalinen teknologia - Digi.fi
 
B op eqsyschillers
B op eqsyschillersB op eqsyschillers
B op eqsyschillers
 
Kcplprofile
KcplprofileKcplprofile
Kcplprofile
 
Casia 2014 preliminary round template
Casia 2014 preliminary round templateCasia 2014 preliminary round template
Casia 2014 preliminary round template
 
About me
About meAbout me
About me
 
Pjt 3
Pjt 3Pjt 3
Pjt 3
 
Al Mens Rules
Al Mens RulesAl Mens Rules
Al Mens Rules
 

Ähnlich wie Key value store

Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongMichael Zhang
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践mysqlops
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011Yiwei Ma
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统智杰 付
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Wensong Zhang
 
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02lovingprince58
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Michael Zhang
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangCeph Community
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)ykdsg
 
淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务drewz lin
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)涛 吴
 

Ähnlich wie Key value store (20)

Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Cdc@ganji.com
Cdc@ganji.comCdc@ganji.com
Cdc@ganji.com
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
Hic2011
Hic2011Hic2011
Hic2011
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02Taobao 海量图片存储与CDN系统02
Taobao 海量图片存储与CDN系统02
 
Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统Taobao海量图片存储与cdn系统
Taobao海量图片存储与cdn系统
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)Java线上应用问题排查方法和工具(空望)
Java线上应用问题排查方法和工具(空望)
 
淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务淘宝对象存储与Cdn系统到服务
淘宝对象存储与Cdn系统到服务
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 

Key value store