分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]
  书名:《实战Nginx:取代Apache的高性能Web服务器》
  作者:张宴
  出版社:电子工业出版社
  ISBN号:9787121102479
  出版日期:2010年03月
  字数:430千字
  页码:352
  开本:16

  网上书城:
  卓越亚马逊:http://www.amazon.cn/mn/detailApp/ref=sr_1_1?_encoding=UTF8&s=books&qid=1270279433&asin=B003CHHHB8&sr=8-1
  当当网:http://product.dangdang.com/product.aspx?product_id=20807089&ref=search-0-A
  China-Pub:http://www.china-pub.com/196364
  电子工业出版社书城:http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP102470&booktype=main


  点击在新窗口中浏览此图片
Tags: , , , , , , , , , , , , , ,
  [文章作者:张宴 本文版本:v1.2 最后修改:2009.01.12 转载请注明原文链接:http://blog.zyan.cc/nginx_cache/]

  Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx模块,可以清除指定URL的缓存。

  Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。

  最新的Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。我们已经在生产环境使用了 Nginx 的 proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。

  在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
  


  1、Nginx 负载均衡与缓存服务器在 Linux 下的编译安装:
ulimit -SHn 65535
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../

wget http://labs.frickle.com/files/ngx_cache_purge-1.0.tar.gz
tar zxvf ngx_cache_purge-1.0.tar.gz

wget http://nginx.org/download/nginx-0.8.32.tar.gz
tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32/
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
cd ../



  2、/usr/local/webserver/nginx/conf/nginx.conf 配置文件内容如下:
user  www www;

worker_processes 8;

error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;

events
{
  use epoll;
  worker_connections 65535;
}

http
{
  include       mime.types;
  default_type  application/octet-stream;

  charset  utf-8;
      
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 300m;
      
  sendfile on;
  tcp_nopush     on;

  keepalive_timeout 60;

  tcp_nodelay on;

  client_body_buffer_size  512k;
  proxy_connect_timeout    5;
  proxy_read_timeout       60;
  proxy_send_timeout       5;
  proxy_buffer_size        16k;
  proxy_buffers            4 64k;
  proxy_busy_buffers_size 128k;
  proxy_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
  proxy_temp_path   /data0/proxy_temp_dir;
  #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
  proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=30g;
  
  upstream backend_server {
    server   192.168.8.43:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.8.44:80 weight=1 max_fails=2 fail_timeout=30s;
    server   192.168.8.45:80 weight=1 max_fails=2 fail_timeout=30s;
  }

  server
  {
    listen       80;
    server_name  www.yourdomain.com 192.168.8.42;
    index index.html index.htm;
    root  /data0/htdocs/www;  

    location /
    {
         #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
         proxy_next_upstream http_502 http_504 error timeout invalid_header;
         proxy_cache cache_one;
         #对不同的HTTP状态码设置不同的缓存时间
         proxy_cache_valid  200 304 12h;
         #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
         proxy_cache_key $host$uri$is_args$args;
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
         expires      1d;
    }
    
    #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
    location ~ /purge(/.*)
    {
     #设置只允许指定的IP或IP段才可以清除URL缓存。
     allow            127.0.0.1;
     allow            192.168.0.0/16;
     deny            all;
     proxy_cache_purge    cache_one   $host$1$is_args$args;
    }    

    #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
    location ~ .*\.(php|jsp|cgi)?$
    {
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
    }

    access_log  off;
  }
}



  3、启动 Nginx:
/usr/local/webserver/nginx/sbin/nginx




  4、清除指定的URL缓存示例:

  点击在新窗口中浏览此图片
  [文章作者:张宴 本文版本:v1.1 最后修改:2010.09.03 转载请注明原文链接:http://blog.zyan.cc/tcsql/]

  曾经有人提出,一般数据库缓存分为四种。第一种:单个对象的缓存(一个对象就是数据库一条记录),对于单个对象的临时缓存或永久缓存,用HashMap就可以了,Key-Value方式的Memcached、Memcachedb、Tokyo Tyrant都可以,或者直接对查询数据库的网页采用Squid做缓存,没什么太难的;第二种:列表缓存,就像论坛里帖子的列表;第三种:记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。第四种:复杂一点的group,sum,count查询,比如一个论坛里按点击数排名的最HOT的帖子列表。第一种比较好实现,后面三种比较困难,虽然可以通过各种方法来解决,但截至目前,似乎还没有使用即简单、并发处理能力又强、实时性又高的解决办法。



  TCSQL为列表页的实时缓存而生,是金山逍遥网技术支持部平台组以Tokyo Cabinet DBM为底层存储与索引,结合类似Memcached的Key-Value内存对象缓存,借鉴SQL语句的SELECT、INSERT、UPDATE、DELETE思想与功能开发的实时列表缓存数据库,能够较好地解决上述前三种类别,特别是第二种、第三种类别的高并发读写问题。

  TCSQL采用HTTP GET/POST协议+JSON数据交换格式在客户端、服务器端之间进行数据交互,支持HTTP协议的任何客户端或语言(例如JavaScript、PHP、JSP、Perl、Python等),都能够连接TCSQL服务器进行操作。这就意味着,一些查询量非常大的应用,甚至可以直接使用运行在用户浏览器端的JavaScript代码访问TCSQL数据库,当然,为了安全起见,你可以在中间用Nginx配以rewrite规则,对TCSQL做个反向代理,限制一下查询权限。

  利用开源的MySQL UDF自定义函数扩展lib_mysqludf_urlencode、lib_mysqludf_urlencode,以及我们平台组周洋同学编写的lib_mysqludf_http_post扩展,配以MySQL触发器,我们可以在MySQL的某张表发生插入、更新、删除操作时,自动将数据同步到TCSQL数据库,使得TCSQL可以当MySQL从库一样使用。

  TCSQL实时列表缓存数据库单机能够支撑1万以上的并发连接,QPS(每秒查询率)能够达到5000~15000次。

点击在新窗口中浏览此图片

  以下是TCSQL在10000并发连接情况下的查询速度(服务器为浪潮NF190服务器,两颗双核Xeon(TM) CPU 2.80GHz、4GB内存、1万转SCSI硬盘。):

  1、第一种类型A:主键查询并取出倒序第1条记录(“=”运算):12155次请求/秒

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=pkey:NUMEQ:随机数值&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=1

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=729324 pages/min, 8031913 bytes/sec.
Requests: 60777 susceed, 0 failed.


  2、第一种类型B:其他索引键查询并取出倒序第1条记录(“=”运算):11897次请求/秒

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=uid:NUMEQ:随机数值&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=1

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=713856 pages/min, 7865884 bytes/sec.
Requests: 59488 susceed, 0 failed.


  3、第二种类型:根据复合条件查询并取出倒序前10条记录:8778次请求/秒(相当于SELECT * FROM table WHERE dateline >= 随机时间戳 AND idtype = '变换的文本' ORDER BY pkey DESC LIMIT 0,10)

  查询内容:http://192.168.8.34:3888/?command=select&type=*&where=dateline:NUMGE:随机时间戳|idtype:STREQ:变换的文本&order_by=pkey&order_sort=NUMDESC&limit_skip=0&limit_max=10

  测试结果:
引用
Benchmarking: 10000 clients, running 60 sec.

Speed=526680 pages/min, 8971878 bytes/sec.
Requests: 43890 susceed, 0 failed.


  4、第三种类型:统计符合查询条件的记录数量:9160次请求/秒(相当于SELECT count(*) FROM table WHERE dateline >= 随机时间戳 AND idtype = '变换的文本')

  查询内容:http://192.168.8.34:3888/?command=select&type=count&where=dateline:NUMGE:随机时间戳|idtype:STREQ:变换的文本

  测试结果:
引用
Benchmarking: 10000 clients, running 5 sec.

Speed=549648 pages/min, 714542 bytes/sec.
Requests: 45804 susceed, 0 failed.


  [文章作者:张宴 本文版本:v1.0 最后修改:2008.09.21 转载请注明原文链接:http://blog.zyan.cc/post/369/]

  9月20日下午,我应邀参加了 ChinaUnix 举办的以“如何搞定服务器负载均衡?”为主题的技术沙龙(http://linux.chinaunix.net/bbs/thread-1019366-1-1.html),很高兴能够跟诸多业界精英一起探讨交流,很荣幸能够与Unix资深系统工程师──田逸、HonestQiao,以及F5资深技术工程师──杨明非,同台演讲。

  点击在新窗口中浏览此图片



  《使用Nginx轻松实现开源负载均衡》是我的演讲PPT(PowerPiont),现提供下载。

  PPT分为四个部分:
  1、介绍Nginx的基本特征,以及使用Nginx做负载均衡器的理由。

  2、用实例,来介绍Nginx负载均衡在大型网站的典型应用。

  3、以实现网站动静分离为原型,对NetScaler硬件七层负载均衡和Nginx软件负载均衡做一个对比。
  [文章作者:张宴 本文版本:v1.4 最后修改:2010.06.11 转载请注明原文链接:http://blog.zyan.cc/read.php/362/]

  Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。

  点击在新窗口中浏览此图片



  Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。

  Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的Memcachedb性质一样。

  相比Memcachedb而言,Tokyo Tyrant具有以下优势:

  1、故障转移:Tokyo Tyrant支持双机互为主辅模式,主辅库均可读写,而Memcachedb目前支持类似MySQL主辅库同步的方式实现读写分离,支持“主服务器可读写、辅助服务器只读”模式。

  点击在新窗口中浏览此图片

  这里使用 $memcache->addServer 而不是 $memcache->connect 去连接 Tokyo Tyrant 服务器,是因为当 Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。

  引用 memcached 官方网站和 PHP 手册中的两段话:
引用
http://www.danga.com/memcached/
If a host goes down, the API re-maps that dead host's requests onto the servers that are available.

http://cn.php.net/manual/zh/function.Memcache-addServer.php
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.




  2、日志文件体积小:Tokyo Tyrant用于主辅同步的日志文件比较小,大约是数据库文件的1.3倍,而Memcachedb的同步日志文件非常大,如果不定期清理,很容易将磁盘写满。



  3、超大数据量下表现出色:
  [文章作者:张宴 本文版本:v1.1 最后修改:2008.09.09 转载请注明原文链接:http://blog.zyan.cc/post/357/]

  鉴于国内外还没有人撰写如何安装Memcache_engine的文章,于是,我根据自己的编译安装步骤,写下此文。

  Memcache_engine是一个MySQL 5.1数据库的存储引擎,它能够让用户通过标准的SQL语句(SELECT/UPDATE/INSERTE/DELETE)访问Memcached(还支持新浪的Memcachedbdbcached)中存放的数据。

  限制:
  1、Memcache表必须有主键。
  2、只能使用主键去查询,即只能使用SELECT ... FROM ... WHERE id = ... 方式去查询。
  3、不支持自增ID。

  安装与使用:
  1、编译安装memcache_engine的步骤:
cd /tmp
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
tar zxvf mysql-5.1.26-rc.tar.gz
#安装、配置MySQL的步骤省略,注意不要以静态方式编译安装。

wget http://download.tangent.org/libmemcached-0.23.tar.gz
tar zxvf libmemcached-0.23.tar.gz
cd libmemcached-0.23/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://xmlsoft.org/sources/libxml2-2.6.32.tar.gz
tar zxvf libxml2-2.6.32.tar.gz
cd libxml2-2.6.32/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://download.tangent.org/libxmlrow-0.2.tar.gz
tar zxvf libxmlrow-0.2.tar.gz
cd libxmlrow-0.2/
export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
./configure --prefix=/usr/local/memcache_engine
make
make install
cd ../

wget http://download.tangent.org/memcache_engine-0.7.tar.gz
tar zxvf memcache_engine-0.7.tar.gz
cd memcache_engine-0.7/
sed -i "s#uint16_t#uint32_t#g" ./src/ha_memcache.cc
export PKG_CONFIG_PATH=/usr/local/memcache_engine/lib/pkgconfig/
./configure --prefix=/usr/local/memcache_engine --with-mysql=/tmp/mysql-5.1.26-rc
make
make install
cd ../

  注意:红色标记部分为MySQL 5.1.22以上版本的源码路径。
  [文章作者:张宴 本文版本:v1.0 最后修改:2008.05.22 转载请注明出自:http://blog.zyan.cc/f5_big_ip]

  前言:最近一直在对比测试F5 BIG-IP和Citrix NetScaler负载均衡器的各项性能,于是写下此篇文章,记录F5 BIG-IP的常见应用配置方法。

  目前,许多厂商推出了专用于平衡服务器负载的负载均衡器,如F5 Network公司的BIG-IP,Citrix公司的NetScaler。F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。

  以下是F5 BIG-IP用作HTTP负载均衡器的主要功能:
  ①、F5 BIG-IP提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。
  ②、F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用已能对客户请求作出正确响应并恢复向该服务器传送。
  ③、F5 BIG-IP具有动态Session的会话保持功能。
  ④、F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。



  下面,结合实例,配置F5 BIG-IP LTM v9.x:

  点击在新窗口中浏览此图片

  ①、如图,假设域名blog.zyan.cc被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。
  ②、如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。
  ③、另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。
  ④、所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。



  详细配置步骤:
Tags: , , , , , ,
  Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器的TIME_WAIT套接字数量。
  
vi /etc/sysctl.conf

  增加以下几行:
引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

  说明:
  net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
  net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
  net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
  net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
  net.ipv4.ip_local_port_range = 1024    65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
  net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
  net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

  执行以下命令使配置生效:
/sbin/sysctl -p
Tags: , , ,
  Memcachedb

  协议:New BSD License
  作者:stvchu, gary.caokai, forever.sky81
  团队:新浪互动社区事业部──博客产品
  网址:http://www.memcachedb.org/

  Memcachedb = memcache + Berkeley DB

  Memcachedb是一款支持高并发的分布式持久存储系统,对任何原有memcached客户端来讲,它仍旧是个memcached,但是,它的数据是可以持久存储的。
  前端:memcached的网络层
  后端:Berkeley DB存储

  写速度:从本地服务器通过memcache客户端(libmemcache) set 2亿条16字节长的key,10字节长的Value的记录,耗时16572秒,平均速度12000条记录/秒。
  读速度:从本地服务器通过memcache客户端(libmemcache) get 100万条16字节长的key,10字节长的Value的记录,耗时103秒,平均速度10000条记录/秒。

  • 支持的memcache命令
  get, set, add, replace
  incr, decr
  delete
  stats
  flush_all

  • 私有命令
  db_checkpoint, db_archive
  db_ismaster, db_whoismaster (for replication)

  编译及安装方法:
  http://blog.csdn.net/simonlsy/archive/2008/01/07/2027940.aspx

  点击在新窗口中浏览此图片



  ncache

  协议:New BSD License
  作者:shinepf, shuiyang
  团队:新浪互动社区事业部──博客产品
  网址:http://code.google.com/p/ncache/

  ncache是一款基于nginx的缓存系统,比Squid更快更高效。

  01
  点击在新窗口中浏览此图片

YouTube 系统架构

[不指定 2007-12-27 18:08 | by 张宴 ]
  视频演讲:Cuong Do (YouTube/Google 的一位工程部经理)
  演讲地点:西雅图扩展性的技术研讨会

  以下为 Kyle Cordes 根据上述视频写下的文章:

  YouTube Scalability Talk

  Cuong Do of YouTube / Google recently gave a Google Tech Talk on scalability.

  I found it interesting in light of my own comments on YouTube’s 45 TB a while back.

  Here are my notes from his talk, a mix of what he said and my commentary:

  In the summer of 2006, they grew from 30 million pages per day to 100 million pages per day, in a 4 month period. (Wow! In most organizations, it takes nearly 4 months to pick out, order, install, and set up a few servers.)

  YouTube uses Apache for FastCGI serving. (I wonder if things would have been easier for them had they chosen nginx, which is apparently wonderful for FastCGI and less problematic than Lighttpd)
  [文章作者:张宴 本文版本:v1.2 最后修改:2008.01.02 转载请注明出处:http://blog.zyan.cc]

  我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。

  今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资料很少,中文资料更是微乎其微,希望本文能够吸引更多的人研究、使用Varnish。

  在我看来,使用Varnish代替Squid的理由有三点:
  1、Varnish采用了“Visual Page Cache”技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。
  2、Varnish的稳定性还不错,我管理的一台图片服务器运行Varnish已经有一个月,没有发生过故障,而进行相同工作的Squid服务器就倒过几次。
  3、通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存,这一点是Squid不能具备的。

  点击在新窗口中浏览此图片


  下面来安装Varnish网站缓存加速器(Linux系统):
  1、创建www用户和组,以及Varnish缓存文件存放目录(/var/vcache):
Tags: , , ,
  Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang (vg.no) 使用3台Varnish代替了原来的12台squid,性能比以前更好。

  Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是Varnish cache设计架构。

  Varnish可以在FreeBSD 6.0和Linux 2.6内核上运行。

  1、编译安装varnish HTTP加速器:
引用
wget http://blog.zyan.cc/soft/linux/varnish/varnish-1.1.1.tar.gz
tar zxvf varnish-1.1.1.tar.gz
cd varnish-1.1.1
./configure --prefix=/usr/local/varnish
make && make install

  2、简单启动varnish守护进程,用本机80端口去反向代理加速127.0.0.1:81上的Apache服务器:
引用
/usr/local/varnish/sbin/varnishd -a :8080 -b 127.0.0.1:81 -p thread_pool_max=1500 -p thread_pools=5 -p listen_depth=512 -p client_http11=on -w 1,10000,120

  Varnish官方网站:http://www.varnish-cache.org/

  另有一份PDF文档,说明Varnish原理的:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2163384

  我测试了一下,在同等配置环境下,Varnish的性能确实要超过Squid,稳定性也不错,值得继续去深入研究。
Tags: , ,

我的技术文章与计算机作品汇总页
张宴(本页网址:http://blog.zyan.cc/tech/

文章推荐级别:最高点击在新窗口中浏览此图片  较高点击在新窗口中浏览此图片  普通点击在新窗口中浏览此图片

  Linux系统
    ★ Apache、Nginx及其他Web服务器
      ● [文章] Nginx虚拟主机多server_name的顺序问题 [作者:张宴]
      ● [文章] Nginx+PHP+MySQL双机互备、全自动切换方案 [作者:张宴]
      ● [文章] Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 使用Nginx轻松实现开源负载均衡──9月20日在ChinaUnix技术沙龙上的演讲PPT 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Nginx 0.7.x + PHP 5.2.8(FastCGI)搭建胜过Apache十倍的Web服务器(第4版) 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 解决Nginx  + PHP(FastCGI)遇到的502 Bad Gateway错误 [作者:张宴]
      ● [文章] 使用Nginx作为Web服务器的国内网站 [作者:张宴]
      ● [文章] Nginx 0.6.31 + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第3版) 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 为Apache编译添加mod_expires模块出错的解决笔记 [作者:张宴]
      ● [文章] 解决“HTTP/1.1 405 Method not allowed”问题,让静态文件响应POST请求 [作者:张宴]
      ● [文章] Nginx + PHP5(FastCGI)生产环境跑PHP动态程序可超过“700次请求/秒” [作者:张宴]
      ● [文章] 视频:Nginx versus Apache (两者的对比)
      ● [文章] Nginx 0.5.33 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器(第2版) 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Nginx 简单的负载均衡配置示例 [作者:张宴]
      ● [文章] Nginx 0.5.31 + PHP 5.2.4搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 为Apache配置mod_deflat压缩输出 [作者:张宴]
      ● [文章] 修改Linux内核参数,减少TCP连接中的TIME-WAIT sockets [作者:张宴]
      ● [文章] 查看Apache并发请求数及其TCP连接状态 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] AutoAPM--Linux下自动编译Apache+PHP+MySQL脚本 [作者:张宴]
      ● [文章] Linux下Apache日志分析工具--AWStats安装使用 [作者:张宴]

    ★ PHP配置与优化
      ● [文章] 利用Xdebug分析PHP程序,找出性能瓶颈 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 安装及配置eaccelerator-0.9.5加速PHP-5.2.1 [作者:张宴]
      ● [文章] Linux下为RPM方式安装的PHP添加GD库支持 [作者:张宴]

    ★ MySQL数据库
      ● [文章] 快捷启动、停止、重启、杀死指定端口MySQL进程的脚本 [作者:张宴]
      ● [文章] MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] MySQL数据库服务器在Flickr、Fotolog、Wkipedia、Facebook等国际知名网站中的使用数量 [作者:张宴]
      ● [文章] 命令行方式管理MySQL数据库实例 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] MySQL中将字符串aaa批量替换为bbb的SQL语句 [作者:张宴]
      ● [文章] phpMyAdmin之一:可管理多台远程MySQL服务器的phpMyAdmin 2.10.2 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] phpMyAdmin之二:修改phpMyAdmin使其能够管理多台远程MySQL服务器 [作者:张宴]
      ● [文章] MySQL数据库故障解决──修复损坏的表 [作者:张宴]

    ★ Squid、Varnish、Memcached及其他缓存服务器
      ● [文章] 百度、新浪、Mixi、Apache社区赞助的开源key-value分布式存储系统 [作者:张宴]
      ● [文章] Memcached的代理服务器软件:magent使用小记 [作者:张宴]
      ● [文章] 利用shell命令操作Memcached [作者:张宴]
      ● [文章] 利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] MySQL Memcache_engine的安装与使用 [作者:张宴]
      ● [源码] dbcached──“分布式 key-value 数据库内存缓存系统” 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 减少Linux下Squid服务器的TIME_WAIT套接字数量 [作者:张宴]
      ● [文章] 使用Varnish代替Squid做网站缓存加速器的详细解决方案 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 找到一款批量清除Squid缓存的小工具 [作者:张宴]
      ● [文章] 初步试用Squid的替代产品──Varnish Cache网站加速器 [作者:张宴]
      ● [书籍] Squid中文权威指南 (在线版) (PDF下载) [作者:彭勇华]
      ● [文章] 清除指定squid缓存文件的脚本 点击在新窗口中浏览此图片 [作者:张宴]

    ★ 其他
      ● [文章] 我的开源PHP中文分词扩展:PHPCWS 1.0.0 点击在新窗口中浏览此图片 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 一款不错的Linux命令行下的FTP客户端软件 [作者:张宴]
      ● [文章] 亿级数据的高并发通用搜索引擎架构设计 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Linux下简单限制网卡的带宽 [作者:张宴]
      ● [文章] 基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] IE浏览器下同一网页多图片显示的瓶颈与优化 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 又一个新浪UNIX开源软件项目──xbayDNS [项目团队:新浪研发中心──系统研发]
      ● [文章] 新浪发起的UNIX开源软件项目 [项目团队:新浪互动社区事业部──博客产品]
      ● [文章] YouTube 系统架构 [作者:Cuong Do & Kyle Cordes]
      ● [文章] 我所熟悉的网站负载均衡技术 [作者:张宴]
      ● [文章] Linux索引节点(inode)用满导致的一次故障 [作者:张宴]
      ● [文章] 一款不错的网站压力测试工具webbench [作者:张宴]
      ● [文章] IP别名+TCP转发+端口映射实现跨网络访问 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Linux下快速搭建ntp时间同步服务器 [作者:张宴]
      ● [文章] Linux服务器监控系统 ServMon V1.1 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] Linux服务器监控系统 ServMon V1.0 [作者:张宴]
      ● [书籍] 针对服务器运行环境安装CentOS 4.X Linux 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 使用Linux的rsync命令实现:多服务器镜像同步 [作者:张宴]
      ● [文章] 用rsync实现网站镜像和备份
      ● [文章] Fedora Core 4.0 简体中文语言包的安装 [作者:张宴]

    ★ Linux命令与shell脚本
      ● [文章] PHPSH:Facebook开发的PHP Shell的安装与使用 [作者:张宴]
      ● [文章] PHP多进程并发控制的测试用例 点击在新窗口中浏览此图片 [作者:张宴]




  硬件设备
    ★ 负载均衡交换机
      ● [文章] 利用NetScaler和自行编写的健康检查脚本,完美解决多台MySQL Slave数据库的负载均衡 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] F5 BIG-IP负载均衡器配置实例与Web管理界面体验 点击在新窗口中浏览此图片 [作者:张宴]




  编程语言
    ★ PHP/JavaScript编程
      ● [文章] AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求 点击在新窗口中浏览此图片 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 支持MSNP15协议与离线消息的PHP MSN Class,可实现MSN机器人 [作者:张宴]
      ● [文章] 同一域名对应多个IP时,PHP获取远程网页内容的函数 [作者:张宴]
      ● [文章] 通过浏览器从SVN更新代码到Linux服务器的指定目录 [作者:张宴]
      ● [文章] 一个发送HTML邮件的PHP函数 [作者:张宴]
      ● [文章] 采用curl库在PHP程序之间传递数组 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] PHP截取中文字符串不出现?号的解决方法 [作者:张宴]
      ● [文章] PHP XML Library:一个不错的PHP XML操作类
      ● [文章] PHP中常用的字符串函数
      ● [文章] 钢笔手写体生成工具(PHP)V1.0 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] PHP实现http与https转化 [作者:张宴]
      ● [文章] 用GD库生成高质量的缩略图片
      ● [文章] 部分PHP问题总结

    ★ HTML/JS
      ● [文章] dp.SyntaxHighlighter介绍:在网页中加亮显示源代码的工具 [作者:张宴]
      ● [文章] IE浏览器flash控件的激活方式介绍 [作者:张宴]
      ● [文章] 防止电子邮件地址被搜索到的新方法 [作者:张宴]
      ● [文章] 网页制作:带有滚动条的表格 [作者:张宴]




  Windows 2000/XP/2003/Vista
    ★ 软件分享
      ● [下载] PHPChina.com旗下的开源技术杂志《PHPer》第12期
      ● [网站] UnixSNS──Linux/Unix技术工程师社交网络
      ● [网站] 一个分类搜集了众多开源软件官方网址的站点
      ● [下载] 一款不错的开源密码管理软件──KeePass
      ● [下载] PHP编程的好工具:《PHP Designer 2007 专业版》
      ● [下载] 可以上传、下载文件的SSH客户端软件--SecureCRT绿色版

    ★ 其他
      ● [文章] 再谈Dr.COM宽带认证客户端共享上网破解V3.46(d13) 点击在新窗口中浏览此图片 [作者:张宴]
      ● [文章] 软件测试用例(Test Case)设计 [作者:Vince]
      ● [文章] IE7浏览器简体中文版的安装、设置和使用方法(并介绍了非正版Windows用户如何安装IE7) [作者:张宴]
      ● [文章] 如何寻找联想电脑驱动程序 [作者:张宴]
      ● [文章] Microsoft SQL Server数据库的备份与恢复 [作者:张宴]
      ● [文章] 解决IE浏览器打不开的办法 [作者:张宴]




  个人计算机作品
    ★ 可下载或开放源代码的作品
      ● [软件] APMServ 拥有图形界面的快速搭建Apache、PHP、MySQL、ASP、Perl网站服务器平台的绿色软件 点击在新窗口中浏览此图片
       [作者:张宴]
      ● [软件] 《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件 点击在新窗口中浏览此图片 [作者:张宴]
      ● [插件] MySQL中文全文索引插件 mysqlcft 1.0.0 点击在新窗口中浏览此图片 [作者:张宴]
      ● [源码] dbcached──“分布式 key-value 数据库内存缓存系统” 点击在新窗口中浏览此图片 [作者:张宴]
      ● [源码] Linux服务器监控系统 ServMon V1.1 点击在新窗口中浏览此图片 [作者:张宴]
      ● [源码] Linux服务器监控系统 ServMon V1.0 [作者:张宴]
      ● [书籍] 针对服务器运行环境安装CentOS 4.X Linux 图文幻灯电子书 点击在新窗口中浏览此图片 [作者:张宴]
      ● [源码] 钢笔手写体生成工具(PHP)V1.0 点击在新窗口中浏览此图片 [作者:张宴]
      ● 更多>>>

    ★ 只提供部分源代码和信息的作品
      ● [架构] 基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计 点击在新窗口中浏览此图片 [作者:张宴]
      ● [作品] Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现 点击在新窗口中浏览此图片 [作者:张宴]
      ● [架构] 以最少的Web服务器达到最大的性能──“互联星空播客” 点击在新窗口中浏览此图片 [作者:张宴]
      ● [演示] 大学期间开发的中南民族大学学生管理信息系统 [作者:张宴]
      ● [演示] 大学期间为北京博卡先锋软件开发有限公司定制开发的SAPM软件 [作者:张宴]
      ● [硬件] 自行打造的袖珍电脑主机 [作者:张宴]
      ● 更多>>>

  本页内容将陆续增加修改。最后修改时间:2009年03月11日

点击在新窗口中浏览此图片  Squid是一个缓存Internet数据的高性能代理服务器软件。当一个用户想要访问一个网页或下载一个文件时,会首先向Squid发出访问请求,由Squid代替其进行网页或文件下载,Squid在把该网页或文件传给用户的同时会在本机保留一个缓存备份。当别的用户访问同样的网页时,Squid会把保存的网页备份立即传给用户,使用户觉得速度相当快,同时也降低了后端数据来源Web服务器的压力。Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。

  目前Squid已经在新浪、搜狐、网易、腾讯等各大门户网站广泛使用,成为必不可少的服务器软件之一。

  《Squid中文权威手册》由Squid创始人 Duane Wessels 所著的英文版《Squid: The Definitive Guide》翻译而来,其译者曾在新浪、网易工作过。

  在线版:http://blog.zyan.cc/book/squid/ (便于阅读与查询)

  PDF版:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=1998985 (排版规范,可下载后打印出来看)
Tags: , ,
  [文章作者:张宴 本文版本:v1.0 最后修改:2007.08.02 转载请注明出处:http://blog.zyan.cc]

  Squid web缓存加速软件目前已经是新浪、搜狐、网易等各大网站广泛应用。Squid会在设置的缓存目录下建立多个目录,每一个目录下又建立多个目录,然后才在最里层的目录中存放缓存文件(object)。squid会根据用户请求网页的URL进行哈希,生成缓存文件,存放在某一个目录中。squid启动之后,将在内存中建立一个哈希表,记录硬盘中缓存文件配置的情形。

  对于类似http://you.video.sina.com.cn/index.html之类的网页,squid只会生成一个缓存文件。可以用squid附带的squidclient工具清除:
引用
squidclient -m PURGE -p 80 "http://you.video.sina.com.cn/index.html"


  而对于带有参数的网页,例如新浪播客的Flash播放器http://vhead.blog.sina.com.cn/player/outer_player.swf?auto=0&vid=4469852&uid=1278987704,因“?”后面的参数不同,导致URL也不同,squid会生成多个缓存文件,哈希分散存放在不同的目录。如果修改了这个outer_player.swf文件,要更新squid缓存就要去清除不同目录下及内存中的很多个缓存文件,十分麻烦,于是我编写了一个Linux下的shell脚本,去完成这件麻烦的事:

  脚本文件名:clear_squid_cache.sh(8月2日修正了UC网友“城市中的寂寞”反馈的BUG)
引用
#!/bin/sh
squidcache_path="/data1/squid/var/cache"
squidclient_path="/usr/local/squid/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 80 $url
done

  注意:请赋予clear_squid_cache.sh可执行权限(命令:chmod +x ./clear_squid_cache.sh)。请确保脚本所在目录可写。

  设置:
  squidcache_path= 表示squid缓存目录的路径
  squidclient_path= 表示squidclient程序所在的路径,默认为squid安装目录下的bin/squidclient

  用法:
  1、清除所有Flash缓存(扩展名.swf):
  ./clear_squid_cache.sh swf

  2、清除URL中包含sina.com.cn的所有缓存:
  ./clear_squid_cache.sh sina.com.cn

  3、清除文件名为zhangyan.jpg的所有缓存:
  ./clear_squid_cache.sh zhangyan.jpg

  效率:
  经测试,在DELL 2950上清除26000个缓存文件用时2分钟左右。平均每秒可清除缓存文件177个。
Tags: , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]