一:对于高性能网站 ,请求量大,如何支撑?思路

在网站架构设计中,大家一定对 LNMP (Linux Nginx Mysql Php) 不陌生。
LNMP 确实是一个非常优秀的架构,秉承着自由,开放,高效,易用的设计理念.利用它构建大型Web

如上图所示。浏览器向Web服务器发送http请求之前,需要先建立连接。没错,它们间建立连接的过程跟我们平时开发socket程序类似。由此可知,HTTP协议的“无连接”特性并不是指:浏览器与Web服务器进行数据交换时,不需要建立连接。那么“无连接”特性到底指什么呢?我们再看图1会发现,浏览器每次请求完毕后都会与服务器处于“断开”状态,下一次请求时再重新与服务器建立连接。HTTP的无连接特性恰恰就是指浏览器的每次请求都必须重新与服务器建立连接,正常情况下,浏览器不会与Web服务器保持长时间的连接状态。如果多用户访问次数过高服务器吃不消怎么办?那我们就要想办法 来解决,从两个大方面来说:一方面减少用户请求次数,另一方面优化服务器。

如果要减少请求,

1.对于开发人员----可以合并css, 背景图片, 减少mysql查询等分库分表.不同数据库不同服务器访问,这样服务器压力不会太大。

2: 对于运维 nginx的expires ,利用浏览器缓存.jpg、png、css等,减少查询.

3: 利用cdn来响应请求缓存.

4: 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑.(LVS/Haproxy/Nginx)

所以,来到第4步后,就不要再考虑减少请求这个方向了,根据业务需求来选择多少台服务器,以便于做集群,是IO大点的选择更好的磁盘。而是思考如何更好的响应高并发请,既然响应是不可避免的,我们要做的是把工作内容”平均”分给每台服务器,最理想的状态是每台服务器的性能都被充分利用.

二:优化思路

nginx响应请求无非就两种情况:

排查问题,也要注意观察这两点,

1:建立socket连接

2: 打开文件,并沿socket返回.

三:优化过程

1:判断nginx的瓶颈

1.1: 首先把ab测试端的性能提高,使之能高并发的请求.

易出问题: too many open files

原因 :  ab在压力测试时,打开的socket过多

解决: ulimit -n 30000 (重启失效)

观察结果: nginx 不需要特殊优化的情况下, 5000个连接,1秒内响应.满足要求,但 wating状态的连接过多.

1.2: 解决waiting进程过多的问题.

解决办法: keepalive_timeout = 0;

即: 请求结果后,不保留tcp连接.在高并发的情况下, keepalive会占据大量的socket连接.

结果: waiting状态的连接明显减少.

由上图可看出,nginx的问题容易出在2点上:

1: nginx接受的tcp连接多,能否建立起来?

2: nginx响应过程,要打开许多文件 ,能否打开?

第1个问题: 在内核层面(见下)

第2个问题 (见下)

系统内核层面:

net.core.somaxconn = 4096 允许等待中的监听

net.ipv4.tcp_tw_recycle = 1  tcp连接快速回收

net.ipv4.tcp_tw_reuse = 1    tcp连接重用

net.ipv4.tcp_syncookies = 0  不抵御洪水攻击

net.ipv4.tcp_fin_timeout = 15   控制tcp连接时间

net.ipv4.tcp_keepalive_time = 600  控制tcp连接超时时间
net.ipv4.tcp_synack_retries = 2   握手状态重试次数,默认5
net.ipv4.tcp_max_syn_backlog = 8192  送到队列的数据包的最大数目

ulimit -n 30000   打开文件数

Nginx层面:

worker_processes 24;    =cpu的核数

client_max_body_size 20m; 上传一些较大的文件会报403,

worker_connections  10240;  连接数  

Worker_rlimit_nofiles 10000;   nginx可打开文件数

Keepalive_timeout 0;

gzip on;   压缩设置.减少网络传输数据量.

gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.0;
gzip_comp_level 5;
gzip_vary on;
gzip_types text/plain application/x-javascript text/css application/xml;

location ~ .+\.(htm|html|css|swf|xml|gif|png|jpg|class|ico|mp3|zip|rar|mp4|flv|exe|txt|ff|mod|atf)?$ {
expires 7d;
}                         利用location规则进行expires 图片浏览器缓存

Nginx---->php-fpm之间的优化

如上图,在很多个nginx来访问fpm时, fpm的进程要是不够用, 会生成子进程.

生成子进程需要内核来调度,比较耗时,

如果网站并发比较大,

我们可以用静态方式一次性生成若干子进程,保持在内存中.

方法 -- 修改php-fpm.conf

Pm = static  让fpm进程始终保持,不要动态生成

Pm.max_children= 50  始终保持的子进程数量

群集方面

做nginx转发机,利用nginx反向代理方式 平均分摊请求,做内网转发。

upstream qinyujie { #定义负载均衡站点名称  
        server 192.168.0.161:80;
        server 192.168.0.162:80;    #后端真实ip一般指内网  
      }

#proxy_pass http://192.168.7.133:8080;

proxy_pass http://qinyujie;    #配置代理站点或后端真实ip

其他可以根据业务需求使用LVS/Haproxy

高性能网站服务器的架设优化-Nginx优化的更多相关文章

  1. nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. nginx高性能WEB服务器系列之五--实战项目线上nginx多站点配置

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  3. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  4. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. nginx高性能WEB服务器系列之七--nginx反向代理

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  6. nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  7. nginx高性能WEB服务器系列之三版本升级

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  8. nginx高性能WEB服务器系列之二命令管理

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  9. nginx高性能WEB服务器系列之一简介及安装

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

随机推荐

  1. PHP中的__call和__callStatic方法(未看完)

    如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...

  2. ZOJ 3703 Happy Programming Contest(0-1背包)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3703 Happy Programming Contest Time Lim ...

  3. Windows/OS X下制作Mac安装U盘

    Windows下制作: 方法一:(适用于OSX 10.9以前) 前期准备:一台windows电脑 UltraISO软件 Mac系统镜像dmg(这里使用Mac os x 10.8.4) 至少8GB的U盘 ...

  4. 不要把<a href="">当作按钮用

    代码如下: <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> < ...

  5. PHP学习笔记(8)验证码使用session对比

    知识点: 1. session获取其他页面的变量: (1)先在画验证码php里开启session_start(),$_SESSION['随便起名']=验证码字符串, (2)再在submit提交到act ...

  6. 分析并实现 360 P1路由器上的测速功能(也可以针对金山测速功能)

    现在各种智能路由器以及一些PC上的防火墙软件,都提供网络测速功能.笔者对此进行了研究,并在自己的路由器上也实现了此功能.下面做一下总结 一般的网络测速,主要关注两个方面:网络延迟和下载速率 1.网络延 ...

  7. ubox及日志管理

    ubox是openwrt的帮助工具箱,位于代码package/system/ubox下, CMakeLists.txt kmodloader.c log/ lsbloader.c validate/ ...

  8. 爬虫 (3)- lxml库和贴吧图片下载案例

    lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据. lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解 ...

  9. plsql 环境搭建(sqlplus环境设置)

    1. 初始化参数脚本 修改glogin.sql 脚本, 此脚本为登录 sql/plus时会读取的脚本, 可以在这个脚本上设置一些参数, 比如 set serveroutput on 等等, 那么在登录 ...

  10. ASP.NET中JSON对时间进行序列化和反序列化

    JSON格式不直接支持日期和时间.DateTime值显示为“/Date(0+0800)/”形式的JSON字符串,其中第一个数字是GMT时区中自1970年1月1 日午夜以来按正常时间(非夏令时)经过的毫 ...