Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26187693
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-11-10 22:43:27

1.高性能网站每秒能够处理成千上万个请求。关键是:
良好的可伸缩
无处不在的缓存

2.可伸缩的理解
2.1性能得平衡(负载均衡、容错)
   接入保护、Cache缓冲
2.2扩容容易
   所有组件都应当可以简单扩展
   无共享架构
2.3可控状态

可扩展与高性能
是先有可扩展再去考虑高性能。即可扩展设计是高性能的基础


WEB可扩展性
1.WEB服务器
2.负载均衡
3.南北互通

WEB服务器的选择
Apache
  不适合静态文件的支持
  内存、CPU占用比较大
  非常成熟功能强大配置丰富
TWS----------值得推荐一试(有时间好好看一下)
  架构中心自主开发
  对CGI支持比较独特
  CGI性能非常好
Qhttpd
  公司内部软件
  只适合静态文件的支持
  非常稳定可靠-----可以考虑用它做静态加速
Lighttpd、Nginx
  内存、CPU开销小
  静态文件性能胜出很多

PS:可以测试一下nginx+php+fgi与TWS+fgi的性能。当接口服务器

性能改进
1.动态、静态内容分开
     静态文件:qhttpd/lighttpd/nginx
     动态内容:Apache
     某些静态文件压缩传输:lighttpd的mod_compress
所以可以考虑这种架构nginx+apache进行搭建实现动、静分离即location ~ \.php$丢给apache处理
2.动态内容性能再次提升一下
     传统CGI方式进行提升
     PHP、Rails、SSI
     FastCGI
     TWS CGI    ==========>测试一下性能看看效果如何
FastCGI
    出现很早
    减少了传统CGI调用的消耗
    基本保持源代码级的兼容性
考虑一下在apache里面配置fastcgi

二、负载均衡技术
2.1 负载均衡是可扩展性的关键
2.2 提高网站的可用性
2.3 接入保护、失效检测

介绍几种负载均衡的技术实现
1.DNS轮询方式
  (是最简单的负载均衡、域名设置多条A记录,DNS轮询)
示例:
     96399        IN    CNAME        
    300        IN    A        192.168.0.1
    300        IN    A        192.168.0.2
    300        IN    A        192.168.0.3
    300        IN    A        192.168.0.4

理解一下什么是CNAME的概念
我的理解:CNAME其实就是呢称所对应的真实名字。像上面如果让用户去记可能不太好记
所以就可以给它取个呢称好记。那这个配置里面有了这个CNAME之后这条记录其它相关的记录像A记录
就得使用这个真实名称了。所以下面都是使用这个真实的名称。
而A记录其实功能就是/etc/hosts文件的作用了。即一个主机名对应哪个网络接口

2.硬件负载均衡技术
思科
alteon
foundry
F5====================>有所了解
PS:一般大公司都会引用硬件负载均衡技术

3.软件负载均衡
免费
LVS   基于内核通过修改TCP/IP数据报文实现负载均衡
       高性能,但是布置相对麻烦
HAproxy
基于layer7
效率相对较低,部署容易有WEB界面便于观察


四层负载实现
TCP层的交换
根据源/目的地址和端口进行负载均衡

策略
round-robin
最少连接

七层即应用层来做负载均衡像nginx
基于HTTP请求
最常用的是URL分发

三、南北互通
3.1 双线服务器
    多个IP 地址
    一个IP地址,多个路由(服务器的路由策略选择)
3.2 动态DNS
    根据来自不同的ISP用户接入到就近的服务器(目前CDN能做到这点?)
    自开发动态DNS软件
        自开发DNS服务器
        IP地址库和IP测速(有了IP 测速工具才能知道什么是就近)
3.3 CDN
    就近接入
    代理缓存
    域名解析增加CNAME即可(通过 UI界面直接修改DNS的配置文件提交更新即可)


二、缓存无处不在的缓存
WEB CACHE的类型
浏览器的cache
    私有缓存
        可以缓存private响应
Cache Proxy
Surrogates 缓存代理
    WEB加速
    共享缓存
        只能缓存public响应

页面模板静态化
如何办到?
    由模板生成静态页面
    定时或有更新时再生成!(新闻CMS系统一般可以这样来处理)
困难:
    静态化的页面太多了
    页面里面有变化的东西不适合做
    多台服务器维护麻烦
    页面既包含静态内容又有动态内容

页面如何缓存?
    按需静态化(不要全做只按需做)
    前端cache存储动态页面内容
        mod_cache
        squid
        varnish    像论坛感觉这个效果应该不错的。
    遵循HTTP的cache规范
    可精细控制cache
        Expires
        Cache-control
    适合GET类型CGI请求

条件请求
IF-Modified-Since/Last-Modified
1.服务器响应:
    200OK
    Last-Modified
2.浏览器请求
    GET HTTP/1.1
    IF-Modified-Since
3.服务器响应
    200OK或304
PS:如果返回304表示没有修改直接读本地缓存

IF-None-Match/ETag
1.Server响应
    200OK
    ETag:abcdef
2.浏览器请求
    GET。。。HTTP/1.1
    IF-None-Match:abcdef
3.Server响应
    200OK或304


Expiration
    Expires
        设置对象的绝对失效时间
        是HTTP/1.0规范
    max-age
        是Cache-control的一个指令
        设置对象的年龄(秒数)
        是HTTP/1.1规范
    max-age优先于 Expires


Cache-control
no-cache=[Set-cookie]
    浏览器和sqiud都不可以缓存
    再次使用前需要发送条件请求
max-age=NNN
     指定缓存有效时间
public
    浏览器和sqiud都可以缓存
    max-age指定缓存时间
private
    只有浏览器可以缓存
ps:cache-control:max-age=120

示例:
返回个人信息
Cache-control: private, max-age=NNN    (只有浏览器可以缓存)
CGI写操作
Cache-control: no-store, no-cache
CGI获取状态等信息
Cache-control: public, max-age=NNN  


架构图:

负载------->cache层------->WEB服务器--------->DB
HAProxy     squid         Lightt/apach     memcached/DB

阅读(2388) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-12 08:42:49

1.2011目标努力完成掉。定居下来!

chinaunix网友2010-12-20 13:37:43

珍惜时间多学点东西。一定要多学点东西!有时间就自己充电学习LINUX!

chinaunix网友2010-12-07 08:15:50

效率手册:一个时间段只做一件事情!将其完成掉。从现在开始努力做自己的开源项目!

chinaunix网友2010-11-26 10:22:18

有事没事的时候看内核!

chinaunix网友2010-11-26 09:42:50

要学会表现