当前位置:硬件测评 > 中小型网站架构分析与优化

中小型网站架构分析与优化

  • 发布:2023-10-06 12:42

先看网站架构图:

DeflateCompressionLevel6 #压缩级别(1-9),值越大,效率越高,CPU消耗也越高。 SetOutputFilterDEFLATE #启用压缩 AddOutputFilterByTypeDEFLATE text/html text/plain text/xml #压缩类型 AddOutputFilterByTypeDEFLATE css js html htm xml php

登录后复制

2).mod_expires 缓存模块

   检查是否已加载:

# apachectl -M |grep expires
登录后复制

如果没有安装,使用apxs编译:

? expires_module 模块/mod_www.sychzs.cn

  缓存机制有全局、目录、虚拟主机三种用途

  全局配置,在配置文件末尾添加:


ExpiresActivon #启用有效期控制,会自动清除过期的缓存,然后从服务器获取新的
ExpiresDefault "accessplus 1 days" #默认情况下,任何格式的文档都会在1天后过期
ExpiresByTypetext/html“访问权限加 12 个月”
ExpiresByTypeimage/jpg "访问加12个月" #jpg格式图片缓存12个月
登录后复制

  3)。工作模式选择与优化

  Apache有两种常见的工作模式,worker和prefork。默认是worker,它是一个混合MPM(多处理模块),支持多进程和多线程。线程处理请求,因此可以处理更多的请求,提高并发性,系统资源开销也比基于进程的MPM少。由于线程使用进程内存空间,进程崩溃会导致底层线程崩溃。 Prefork是一种非线程的MPM,进程比worker占用更多的系统资源。由于进程处理连接,因此其工作效率比worker更稳定。可以通过apache2 -l查看当前工作模式,编译时使用--with-mpm参数指定工作模式。根据自己的业务需求选择不同的工作模式,然后适当增加工作模式的相关参数,以提高处理能力。

  配置参数说明:


StartServers 8 #默认启动8个httpd进程
MinSpareServers 5 #最小空闲进程数
MaxSpareServers 20 #最大空闲进程数。如果大于这个值,apache会自动杀掉一些进程。
ServerLimit 256 #服务器允许的进程数上限
MaxClients 256 #同时发起的最大访问数。如果数量超过,就会进入队列等待。
MaxRequestsPerChild 4000 #每个进程启动的最大线程数
登录后复制

Nginx优化:

  1).gzip压缩模块

 http {
    ……
    gzip 打开;
    gzip_min_length 1k; #允许压缩的页面最小字节数,默认为0,任何大小都会被压缩,任何小于1k的都可能适得其反
    gzip_buffers 4 16k; #gzip申请内存大小,以4倍数据大小申请内存
    gzip_http_版本1.0; #识别http协议版本
    gzip_comp_level 2; #压缩级别,1压缩比最小,处理速度最快,9压缩比最大,处理速度最慢gzip_types 文本/plainapplication/x-javascripttext/css application/xml image/jpg; #压缩数据类型
    gzip_vary 开启; #根据客户端的http header判断是否需要压缩
}
登录后复制

2).使缓存模块过期

服务器{
    location ~ .*\.(gif|jpg|png|bmp|swf)$ #缓存数据后缀类型
    {
      30天到期; #使用expires缓存模块缓存到客户端30天
    }
    位置 ~ .*\.( jsp|js|css)?$
    {
      1d 到期;
    }
}
登录后复制

3).fastcgi优化

  nginx不支持直接调用或解析动态程序(php)。 php-fpm进程必须通过fastcgi(通用网关接口)启动来解析php脚本。也就是说用户请求先到nginx,然后nginx将动态解析交给fastcgi,fastcgi启动php-fpm来解析php脚本。因此,我们有必要对fastcgi和php-fpm进行适当的参数优化。

http {
    ……
    fastcgi_cache_path/usr/local/nginx/fastcgi_cache级别=1:2keys_zone=测试:10m不活动=5m;
    # FastCGI缓存指定文件路径、目录结构级别、关键字区域存储时间和非活动删除时间
    fastcgi_connect_timeout 300; #指定连接后端FastCGI的超时时间
    fastcgi_send_timeout 300; #指定向FastCGI发送请求的超时时间
    fastcgi_read_timeout 300; #指定接收FastCGI响应的超时时间fastcgi_buffer_size 64k; #指定读取FastCGI响应第一部分所需的缓冲区大小
    fastcgi_buffers 4 64k; #指定本地需要使用多少个盒子和缓冲区大小来缓冲FastCGI响应请求
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k; #表示写入缓存文件时使用多大的数据块。默认值是fastcgi_buffers的两倍。
    fastcgi_cache 测试; #启用fastcgi_cache缓存并指定一个TEST名称
    fastcgi_cache_valid 200 302 1h; #指定200和302响应码缓存1小时
    fastcgi_cache_valid 301 1d; #缓存301响应码1天
    fastcgi_cache_valid 任意 1m; #缓存其他响应1分钟
{
登录后复制

php-fpm.conf配置参数:

pm =dynamic #控制子流程的两种方式(静态和动态)
pm.max_children= 5 #同时存活的最大子进程数
pm.start_servers= 2 #启动时创建的进程数
pm.min_spare_servers= 1 #php-fpm进程的最小数量
pm.max_spare_servers= 3 #php-fpm最大进程数
登录后复制

4).proxy_cache本地缓存模块

http {
        ……
   proxy_temp_path /usr/local/nginx/proxy_cache/temp; #缓存临时目录proxy_cache_path /usr/local/nginx/proxy_cache/缓存级别=1:2keys_zone=one:10m inactive=1d max_size=1g;
   #缓存文件的实际目录。 Levels 定义了层次目录。 1:2表示1为一级目录,2为二级目录。 keys_zone存储元数据,分配10M内存空间。 inactive表示一天没有访问过的缓存将被删除,默认是10分钟。 max_size是最大分配的磁盘空间
   服务器 {
      听80;
      服务器名称 192.168.1.10;
      地点/{
        proxy_cache一; #调用缓存区
        #proxy_cache_valid 200 304 12h; #可以根据HTTP状态码设置不同的缓存时间
        proxy_cache_valid 任意10m; #缓存有效期10分钟
      }
      #清除URL缓存,允许哪些网段的IP清除缓存(需要安装第三方模块“ngx_cache_purge”),清除URL缓存方法:访问http://192.168.1.10/purge/ 文件名
      位置 ~ /purge(/.*){
        允许 127.0.0.1;
        允许 192.168.1.0/24;
        否认一切;
        proxy_cache_purge cache_one$host$1$is_args$args;
      }
 }
登录后复制

总结:

  启用压缩模块可以节省部分带宽并增加WEB端的CPU处理能力。然而,在上面的网站架构中,在WEB端启用压缩模块并没有任何效果,因为向上层的传输是通过局域网进行的。它仍然需要为直接面向用户的架构启用。无需在WEB上启用expires模块。由于反向代理服务器和CDN,它无法到达用户的浏览器,打开它也没有效果。

  如果反向代理使用nginx作为代理,可以启用expires模块将静态文件缓存到用户的浏览器中。当浏览器发起请求时,首先判断本地缓存是否有请求的数据。如果是,则判断是否已过期。如果没有过期就直接浏览缓存的数据,即使服务器资源发生了变化,所以过期时间必须根据业务情况适当设置。

  5)。使用PHP缓存提高代码执行效率

  当php程序不使用缓存时,每次请求一个php页面时,php都会对该页面的代码进行编译,这意味着重复的编译工作会增加服务器的负载。有了缓存,每次编译的数据都会缓存在共享内存中,下次访问时直接使用缓冲区中的编译后的代码,从而避免了重复的编译过程,加快了其执行效率。所以,PHP网站使用缓存是完全有必要的!主流PHP缓存包括:eAccelerator、XCache

  第五层:动静分离

  动静分离,顾名思义,就是将动态页面和静态页面分离到不同的服务器上进行处理。例如,如果web是nginx,则可以将fastcgi部署到单独的服务器上,专门解析PHP动态页面。静态页面默认由nginx处理。 ,并实施良好的缓存策略。再比如,一个商场网站会有大量的图片。可以考虑添加一个文件服务器组,将图片的请求和上传交给文件服务器。主流文件服务器采用NFS,存在单点故障。您可以部署DRBD+HeartBeat+NFS来实现高可用性。如果单台服务器压力太大,可以考虑使用分布式文件系统,比如GlusterFS、MooseFS等。

 第 6 级:数据库缓存

  采用缓存技术,将热点数据缓存在内存中。如果请求的数据在缓存中,则直接返回。否则,会从数据库中取出并更新到缓存系统中,以提高读取性能并降低数据库成本。压力。缓存实现包括本地缓存和分布式缓存。本地缓存将数据缓存到本地服务器内存或文件中。分布式缓存将数据缓存到内存中,是分布式的,可以缓存海量数据,具有良好的扩展性。主流的分布式缓存系统包括Memcached和Redis。 Memcached性能稳定,速度快,QPS在8w左右。如果想要数据持久化,就选择Redis,其性能不低于Memcached。

  第 7 级:数据库

  这一层在整个网站架构中起着主导作用,直接决定用户体验。相对架构优化也比较复杂。


相关文章

最新资讯