您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

利用nginx做流量限制及集群部署

时间:2019-09-06 11:28:41  来源:  作者:

前段时间公司有个应用做什么营销活动,不知道咋回事,一个平常之后1-2万人在线的应用,突然来了10多万人,然后呢,系统就异常的慢,异常的慢,持续了很长时间,被客户投诉的很惨。就说负责该应用的项目组,几乎取消了当年的奖金。好惨。。。

于是乎,领导就以史为鉴,让我等研究下,怎么才能在这种异常的流量中保证应用不死,我第一个想到的就是,应用不可能突然多出来很多服务能力,那就只有把多出来的流量拦掉呗,应用本身的机制很难做到对整个集群的管理,只能借助Nginx了。

研究了一下nginx的功能,发现对流量的限制本身就是nginx的功能之一,然后动手测试了一下,果然是可行的。

下载一个nginx(不要问我在哪下。。。),然后打开他的配置文件。

#定义每个IP的session空间大小,只能用在http段
limit_conn_zone $binary_remote_addr zone=one:20m;

实际上它的语法是

limit_conn_zone key zone=name:size; 
#key => $binary_remote_addr #二进制的IP地址
#key可以说是一个规则,就是对客服端连接的一个标识,比如上面用的是IP地址
#zone主要用于保存每个key对应的连接数
#name => addr #随便取的一个名字,比如,你可以取成abc
#size => 20m #空间大小,这里是20兆,当这个定义的空间被耗尽的时候,nginx会返回503报错
#大家可以自己算一下,20m的空间可以保存多少个key

#与limit_conn_zone类似,定义每个允许发起的请求速率

 limit_req_zone $binary_remote_addr zone=req_one:20m rate=1r/s; 

#定义每个IP发起的并发连接数,为了测试方便可以先改为1

 limit_conn one 10;

#缓存还没来得及处理的请求,为了测试方便可以先改为1

 limit_req zone=req_one burst=100;

开启Nginx的限流功能,主要是通过前四个参数实现

http {
 limit_conn_zone $binary_remote_addr zone=one:20m;
 limit_req_zone $binary_remote_addr zone=req_one:20m rate=1r/s; 
 limit_conn one 1;
 limit_req zone=req_one burst=1;
 #rewrite_log on;
 #error_log /var/log/nginxrewrite.log notice;
 client_body_buffer_size 256M;
 include mime.types;
 default_type Application/octet-stream;
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for" "$request_filename"';
 sendfile on;
 keepalive_timeout 65;
 include servers/*.conf;
}

做完这些,启动nginx,简单些一个http客户端来测试一下,如果同时发起两个请求。会提示503错误。

但是干完了这个,感觉单实例下的nginx总是不能让人安心的,即使nginx不会出现故障,也不能排除其所在的服务器不会出现故障吧。

所以准备研究一下nginx怎么集群部署,但是查阅相关资料显示nginx本身不具备集群功能,因为它本身就是为了给集群做负载均衡而实现的,真的要做,可以通过几种方式。

1、利用DNS服务器负载均衡策略。及所以通过一个域名过来的请求,会先到dns服务器,然后dns再通过轮训或者最小连接数等策略,分发至nginx服务器。这样理论上只需要一个公网dns,一个公网ip,nginx服务可以部署在内网ip上。

利用nginx做流量限制及集群部署

大概是这样吧

2、nginx+nginx。就是在前端部署一个nginx,在这个nginx上再负载均衡多个nginx,但是我严重怀疑这种方案的科学性,毕竟怎么保证最前面的nginx不死,又是一个问题。

利用nginx做流量限制及集群部署

感觉好傻

3、负载均衡硬件在前,nginx在后。这就是传统的负载均衡模式,通过F5的分发,减轻服务压力。

利用nginx做流量限制及集群部署

一般够用了

非常奇怪,为什么nginx为什么本身不具备集群功能,经查阅相关资料显示,单个nginx的负载在5w左右,这对于大部分应用应该是足够的,实在不行就在前面搭dns或者用F5,足以解决大部分问题,我司的核心应用并发也才达到10w级别。如果达到阿里巴巴那种程度的话,可以参考阿里的解决方案,前端在请求时,已经拿到了一个ip列表,从前端已经开始分发了,而不是全部送到后端再进行分发。

至此,这个问题应该可以向领导交差了。



Tags:nginx   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
什么是Nginx?Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来...【详细内容】
2020-07-06   nginx  点击:(0)  评论:(0)  加入收藏
相对于Apache的同步IO模型,Nginx由于采用了NIO的缘故,性能上碾压前者。Nginx是轻量级的,占用的系统资源更少,天然支持高并发。今天我们就简单的讨论一下nginx的线程模型。注意不...【详细内容】
2020-07-01   nginx  点击:(3)  评论:(0)  加入收藏
前面几周,讲过Nginx的日志配置:Nginx | 超详细!Nginx 日志配置实践,然后也讲了Nginx的进程模型,底层原理等:Nginx为什么快到根本停不下来?没看过的可以先看看(链接点击可跳转)。 例...【详细内容】
2020-06-26   nginx  点击:(0)  评论:(0)  加入收藏
上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了。这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了。今天这篇文章比较短,看完没问题。过滤模块的位置之前我...【详细内容】
2020-06-25   nginx  点击:(0)  评论:(0)  加入收藏
技术编辑:宗恩丨发自 SiFou Office作者:SegmentFault 思否报道转发链接: https://mp.weixin.qq.com/s/IRWTloT_nMSIezZiwUEGZg前言去年12月,俄罗斯警方搜查了商业服务器公司 N...【详细内容】
2020-06-21   nginx  点击:(1)  评论:(0)  加入收藏
简单有效的防盗链手段场景如果做过个人站点的同学,可能会遇到别人盗用自己站点资源链接的情况,这就是盗链。说到盗链就要说一个 HTTP 协议的 头部,referer 头部。当其他网站通...【详细内容】
2020-06-15   nginx  点击:(2)  评论:(0)  加入收藏
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需...【详细内容】
2020-06-12   nginx  点击:(0)  评论:(0)  加入收藏
​一、设置CentOS7的yum源及EPEL yum源EPEL (Extra Packages for Enterprise Linux) 是由 Fedora Special Interest Group 为企业 Linux 创建、维护和管理的一个高质量附...【详细内容】
2020-06-08   nginx  点击:(25)  评论:(0)  加入收藏
没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位...【详细内容】
2020-06-06   nginx  点击:(4)  评论:(0)  加入收藏
1 简介Nginx是一个非常强大和流行的高性能Web服务器。本文讲解Nginx如何整合https并将http重定向到https。https相关文章如下:(1)Springboot整合https原来这么简单(2)HTTPS之密钥...【详细内容】
2020-06-04   nginx  点击:(3)  评论:(0)  加入收藏
简述本文主要介绍Nginx负载均衡之upstream、server、location参数配置。NginxNginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源...【详细内容】
2020-06-04   nginx  点击:(1)  评论:(0)  加入收藏
LVS简介LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集...【详细内容】
2020-06-04   nginx  点击:(2)  评论:(0)  加入收藏
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少(一个worker进程只占用10-12M内存),启动极快,高并发能力强,在互联网项目中广泛应用。 上图基本上说明了当下流...【详细内容】
2020-06-03   nginx  点击:(0)  评论:(0)  加入收藏
前言Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型...【详细内容】
2020-06-02   nginx  点击:(1)  评论:(0)  加入收藏
前言Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的...【详细内容】
2020-06-02   nginx  点击:(1)  评论:(0)  加入收藏
相信很多小伙伴都见过一些商业产品中的url接口响应时间,实时汇总显示功能。可以理解为web接口的慢查询,与sql的慢查询有异曲同工之妙,但是想做却无从入手不知道怎么实现此功能,...【详细内容】
2020-05-29   nginx  点击:(4)  评论:(0)  加入收藏
Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务...【详细内容】
2020-05-22   nginx  点击:(5)  评论:(0)  加入收藏
Nginx服务器是一款高性能的服务器,之前部署网站就使用了它进行反向代理,这次就好好总结Nginx相关的特性与使用。 01 前言Nginx服务器是Web服务器,也就是我们平时用来提供Web服...【详细内容】
2020-05-22   nginx  点击:(4)  评论:(0)  加入收藏
本文主要帮助大家熟悉 Nginx 有哪些应用场景、Nginx 特点和架构模型以及相关流程、Nginx 定制化开发的几种模块分类。 本文将围绕如下几个部分进行讲解: Nginx 简介及特点 Ng...【详细内容】
2020-05-20   nginx  点击:(5)  评论:(0)  加入收藏
1.nginx的编译安装#1.安装Nginx所依赖的库文件或开发包yum install gcc redhat-rpm-config libxslt-devel gd-devel perl-ExtUtils-Embed geoip-devel gperftools-devel pcr...【详细内容】
2020-05-19   nginx  点击:(2)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条