一、导言
最近最后一个营销推广项目(与手机微信整合)用Tomcat做后台管理。刚出版的时候,因为总数很少,感觉问题不太大。随着自然环境的公布,有人发现web服务器的网页打不开了。当连接tomcat到query时,他们发现线程数已满,CPU已经采用了限制。原始架构如下图所示,它使用一个tomcat和一个数据库来查询web服务器。
这个业务管理系统的关键是微信推广。消费者在微信上提交订单,购买(抓取)匹配的商品。限时购买成功后,商品(优惠券)会自动生成条形码,存储在客户的基本信息中。顾客可以凭购物凭证在商店付款和提货。因为涉及到凭证核销(付款后及时核销)的问题,这个业务流程放不到云端空(核销的数据信息和门店销售数据需要及时交互),最后还得按照当地的方案处理。
首先要充分考虑的是按照三层交换的方法将网络上的连接分散化,以减轻网络服务器的工作压力。这些方面可以由nginx代理完成;下一个必须处理的问题是会话。比较了几种方案,发现nginx中嵌入的ip_hash策略可以处理这个问题。最后,互联网的架构变成如下图所示。在这个计划中,升级了四台网络服务器,其中一台是nginx用于负载分担,另外四台是额外的tomcat服务。
二。安装Nginx
NGX的安装和设备非常简单。我这里专门用了tengine的版本号。实际安装方法请参考“Nginx设备手册之一”。这里一定要注意它的编译器的主要参数,记住它的环境变量和日志文件的存储位置。
三。优化软件资源
文档资格
Linux系统软件对打开文档的数量和普通用户的最大数量有限制,可以根据“ulimit-n”或“ulimit-u”查询。详细设置请参考“Linux下ORACLE11G的标准安装方法(第一部分)”。首先更改/etc/security/limit.conf中的限制,如下图所示。
核心促销
核心涉及的TCP相关选项也必须在大-高并发连接的情况下相对调整,否则会报错“TCP:时间等待桶表溢出”。对/etc/sysctl.conf文档进行实际更改。如有特殊要求,请联系实际情况进行更改。以下事实表明:
另外,tcp_max_tw_buckets系统软件解决了大量的timewait套接字。如果超过此数量,time-waitsocket将被立即删除,并显示警告消息。
Ip_local_port_range用于外部连接的端口范围。
Netdev_max_backlog当每个网线端口接收数据文件的速度快于内核解决此类数据包的速度时,它允许更大数量的数据文件发送到序列中。对于重型网络服务器,这个值必须提高一点。
TCP_max_orbonds求解不属于所有进程的套接字总数,不属于任何进程的进程为“孤儿进程”。在rapid和很多连接中会有很多这样的过程,所以需要适当的设置主要参数,对于简单防御的DoS***也可以使用。
Tcp_max_syn_backlog用于记录未收到手机客户端的连接请求的最高值,以确定信息内容。
四。升级Nginx
Epoll是linux下必需的实体模型,适用于2.6以后的内核版本,如下图所示:
改善经销商的分配
一定要注意“proxy_max_temp_file_size”,用来设置临时文件夹的最大值。当请求文档的内容超过代理缓存文件的大小时,该文件将存储在此临时文件夹中。但是,如果所请求文档的内容超过此值,则可能会立即从上游和下游网络服务器(代理的网络服务器)传输,并且代理的缓存文件尚未应用。这个命令的初始值是2GBB。如果设置为0,表示禁止应用临时文件夹。
五、配备Nginx
NGX配备了以下信息,其中upstreambackend配备了后端tomcat应用,ip_hash表示启动此对策。客户的目的是为了更好的处理后端开发的会话不一致问题(在Nginx前端开发也有CDN或LAN的自然环境下慎用)。
服务器段配备了共享通道和端口号,因此您必须注意“proxy_set_headerHost$Host:8162;”写作。如果参数后没有添加端口号8162,具体分享会导致网页页面正常显示信息。后两句可以参考nginxlog的记录内容,关键是记录外网地址的具体浏览需求。($HOST在应用端口80时是可以的,非端口80可以应用$http_host。感谢您在2015年月日的指导)
log_format字段名用于形成特定的日志文件格式,相对自变量与日志文件中的浏览记录相匹配,可以通过对比下图进行查询。
六。Nginx安全限制
随着业务流程的完善,数据连接的总流量越来越大,有效地 *** 纵浏览需求和线程数就显得非常重要,否则仍然会出现响应丢失的情况。
七。增强IP限制
最简单易行的方法就是Nginx内置的IP密钥管理,由控制模块ngx_http_limit_conn_module和Laingx_http_limit_req_module完成。根据他们的能力来 *** 纵IP地址线程的数量和web服务器浏览需求的数量。
要限制连接,首先必须有一个容器来计数连接。在http段中添加以下代码:“zone="给它一个名字,可以随意调用。这个名字应该和下面的limit_conn一致。$binary_remote_addr=使用二进制存储手机客户端的详细地址,一米可以存储32000个高并发会话。
限制请求数的方法类似于限制线程数的方法,其中“rate=10r/s”表示一秒钟内解决10个请求,如果必须限制为每分钟不超过30个请求,则表示“rate=30r/m”。实际设置如下所示:
http { limit_req_zone$binary_remote_addr zone=one:十米 rate=10r/s; limit_conn_zone$binary_remote_addr zone=two:十米; }在服务器部分增加以下几点,其中“burst=5”表示超过频率限制的附加需求数量不超过5个;“limit_conntwo15”表示同一IP的线程数量限制为15个。
limit_req zone=one burst=5; limit_conn two 15;事后增加WAF控制模块,需要整理其nginx相关监管。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)