当前位置:首页 > 教程 > 正文内容

nginx限流(nginx 流量限制)

2023-03-23 08:40:05教程2

nginx限流

分布式系统服务保护

一、熔断

熔断一般是指依赖的外部接口出现故障的时断绝和外部接口的关系;例如你的A服务里面的一个功能依赖B服务,这时候B服务出问题了,返回的很慢。这种情况可能会因为这么一个功能而拖慢了A服务里面的所有功能,因此我们这时候就需要熔断!即当发现A要调用这B时就直接返回错误(或者返回其他默认值啊啥的),就不去请求B了。

雪崩效应:在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进。但是,一个应用可能会有多个微服务组成,微服务之间的数据交互通过远程过程调用完成。这就带来一个问题,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。

熔断机制是应对雪崩效应的一种微服务链路保护机制。在微服务架构中,当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。

二、降级

降级也就是服务降级,当我们的服务器压力剧增为了保证核心功能的可用性 ,而选择性的降低一些功能的可用性,或者直接关闭该功能。这就是典型的丢车保帅了。就比如贴吧类型的网站,当服务器吃不消的时候,可以选择把发帖功能关闭,注册功能关闭,改密码,改头像这些都关了,为了确保登录和浏览帖子这种核心的功能。

熔断与降级的区别:触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;

三、限流

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)。

漏桶算法:漏桶算法思路是请求先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。

令牌桶算法:令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。相比于漏桶算法令牌桶的优点是可以改变放令牌的速度. 一旦需要提高速率,则按需提高放入桶中的令牌的速率. 一般会定时(比如100毫秒)往桶中增加一定数量的令牌, 有些变种算法则实时的计算应该增加的令牌的数量。Guava的RateLimiter就是采用该算法进行限流控制。

计数器算法:计数器算法的核心就是在规定的时间内限制请求次数;例如:对于A接口来说,我们1分钟的访问次数不能超过100个。在一开 始的时候,我们可以设置一个计数器counte=0,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多,拒绝请求;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter=0;

Semaphore限流:可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。

四、常用的web服务器

Nginx主要有两种限流方式:

按连接数限流(ngx_http_limit_conn_module)(令牌算法实现)

按请求速率限流(ngx_http_limit_req_module)(漏桶算法实现)

tomcat 通过以下三个配置参数来进行限流操作:

maxThreads(最大线程数):每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.

accepCount(最大等待数):当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。

maxConnections(最大连接数):这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于maxThreads+acceptCount。

在实际工作中对于流量入口的限流一般都是采用Nginx,tomcat一般会设置为适合当前操作系统的最大连接数,具体的业务限流(某个服务接口)一般使用sentinel和hystrix。

五、hystrix

提供了线程池隔离(默认)与信号量隔离

六、sentinel

古之学者为己,今之学者为人

分类: 中间件

标签: 分布式

nginx 流量限制

hostNetwork模式不再需要创建一个nodePort的svc,而是直接在每个节点都创建一个ingress-controller的容器,而且将该容器的网络模式设为hostNetwork。也就是说每个节点物理机的80和443端口将会被ingress-controller中的nginx容器占用。当流量通过80/443端口进入时,将直接进入到nginx中。而后nginx根据ingress规则再将流量转发到对应的web应用容器中。

nginx流量

Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

应用场景

1、http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

2、虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,

需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,

不会因为某台服务器负载高宕机而某台服务器闲置的情况。

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

nginx是免费的吗

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

由于MySQL是开放源码软件,对于一般的个人使用者和中小型企业来说,MySQL提供的功能绰绰有余,可以大大降低开发成本。

Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。

nginx 推流

按下面的步骤完成你的网站:

一、服务器的购买

我们要运行自己的网站,首先要拥有一台自己的服务器。在这里我仅讲一下ecs云服务器和虚拟主机的选择和区别,和一些买服务器的技巧。

1.选择虚拟主机还是云服务器?

这个问题比较常见和普遍的,但是可以比较负责的说当然是ECS虚拟服务器比虚拟主机好的多。首先价格上的优势比较明显了,你去购买虚拟主机的价格几乎都要比服务器的价格贵了,虚拟主机简单可以理解为虚拟服务器上做的N个隔间,一台虚拟服务器上可以生出无数个虚拟主机来,可以安装无数个的网站的,并且服务器的运维也变得越来越容易,很多的服务器面板可以使用,可视化的操作界面让大多数人可以轻松上手操作,但是能让自己操作的余地不是很多,仅仅是使用别人事先配置好的。

推荐大家买ecs云服务器,这种服务器开始的样子是黑白命令,纯linux系统,我们只要加上常用的宝塔面板,便可以可视化进行操作,十分方便。

2.服务器所在的地点

服务器地点的选择上遇到这样两个问题,一是需不需要备案,二是访问速度。

对于备案,只要是在国内地点的服务器,是都必须经过备案的,这里的备案不光是服务器,而且需要绑定上你的域名(域名购买下一节会讲到),而且域名备案又是有点繁琐,而且很多时候在填备案你建站的理由时,会被驳回。所以很多人会选择国外的服务器或者香港的服务器,这些服务器在运行时不会要求备案。

对于访问速度,当然是国内的服务器更快更好,但是价格相对较贵的国外服务器和香港服务器也不会太差。

综合来说,如果你是想长期做站长,还是推荐你买国内的云服务器并且备案,毕竟备案除了可以使网站能正常被访问,还是很多其他建站的条件(比如上限微信小程序用的域名必须经过备案)。如果你仅仅是想玩一段时间,你可以有这几种选择。1.购买国内服务器,并且购买别人已经备案好的域名(相对较贵)2.购买国外服务器或者香港服务器,做好偶尔会无法访问的心理准备。

3.服务器价格

如果你是学生,那么恭喜你,你可以用很低的价格购买到各大公司的学生机(阿里云、腾讯云、华为云,亚马逊等等都有学生机),价格不会很高,也就10元/月左右,基本是1g-2g内存,1核或2核cpu,都加赠40g不等的硬盘,对于运行正常网站来说绰绰有余。学生机的申请按照不同公司的要求,可能需要校园认证,或者学生证,这里就不详细说了。

4.服务器系统

服务器一般是linux和windows,我们建站就不要用windows了,选择linux就好,一般选择centos作为使用的系统。

域名的购买

有木有一些童鞋看到价格一下子放弃了呢?别这样嘛,毕竟也是一次锻炼的机会!下面介绍一下域名的购买。

对于上面提到的如果你是想买已备案的域名,那么可以跳过本节,因为那属于二手域名了,我就不在本文介绍了。

推荐大家购买万网的域名,我是在阿里云购买的,如下图,可以选择你想要的字母组合,最便宜目前就是top域名了(我记得xyz好像更便宜,不过是搞活动才有),最低是9元/ 年,注意是一年!所以域名是十分便宜的,大家可以选择自己名字或者其他你喜欢的,都不会太贵。

这是我搜索的小锦鲤的拼音,最低的果然是xyz才6元首年(注意是首年哦,续费可能贵!),所以大家要仔细斟酌。

域名解析

域名和服务器都购买成功后,需要把域名解析到服务器(通俗来说就是让服务器认识这个域名,绑在一起,让访问这个域名变成访问服务器),我以万网的域名为例。

在域名中直接选择解析,点击添加解析,这里的记录类型,对于云服务器大多数都是A类,下面填上你想要的的二级域名,自定义喜欢就行。最下面记录值就是你的云服务器的ip地址,时间10分钟默认不变。

服务器面板安装

下面进入正题!购买服务器后,基本上在网页的最上端都有【控制台】三个字,可以进入这里管理我们买好的服务器,这里我通过我购买的华为云的ecs服务器为例,教大家安装宝塔面板(放心免费的!)

首先我们远程登录购买的服务器。

第一次远程登录也是这种黑白的样子,是不是很丑,也没有图形界面。我这里运行过所以有很多代码。第一次登录需要输入用户名和密码,用户名是默认的root,密码在购买服务器时候会要求自己创建。如果没有要求创建,默认是123456或者root。这里有个需要注意的地方,输入用户名root后回车,这些没有问题,但是在输入密码的时候我们是看不到的,实际是已经输入进去了。肯定有很多小伙伴发现是空白,又多输入几次,导致密码次次不对,还以为服务器出现了问题。

输入了正确的用户名密码后,就会出先像我这样的,代表登录成功。

随后输入宝塔面板的安装命令

这里放的图片十分抱歉,我试过直接打字,但是排版太差了。我会在文章底部以文档下载的方式给出,并且会附带给大家好用的工具,还请见谅!

注意不要关闭页面!最后安装完成它会给出你登录面板的地址、账号、密码,一定要牢记!

安装好之后,一定不要落下的一步,那就是放行端口(登录面板需要8888端口,一般服务器不会开启)

对于华为云,首先选择安全组,点击更改安全组规则

添加入方向安全组(因为我们要进入嘛),点添加规则,写上8888,ip就是0就可以,不用改。

最后访问安装好后给出的地址,填上账号密码,ok,我们已经成功了一半了!登录是这样滴

首次安装完成后,会有提示进行必要插件的安装,包括php,mysql,nginx,推建大家用上述组合。安装需要一段时间,具体要看服务器的性能。

添加站点

我们首先为我们的站点绑定一个域名,点击网站-添加站点-填上你的域名(也可以填上你的服务器ip地址,也是可以登陆的),php版本自由选择,其他的默认就可以。

创建好站点后,实际就是创建了一个文件夹,我们把源码文件上传到文件夹即可。在网站目录的网站名字,直接点击就可以跳转到那个文件夹目录。

点击上传,添加问价,把源码的压缩包添加进去,然后点击解压就可以了。

这里除了宝塔面板自带的文件传输,还是推荐大家用ftp上传,比较好用的软件有flashfxp、Xftp等等,文末的压缩包内会给出!

我们以上传一个影视源码作为例子。上传后解压文件到根目录(注意一定是根目录,也就是说在这个文件夹就有很多其他的小文件,不能在出现单独的一个文件夹了),随后访问域名会自动跳出安装。由于每个源码的安装不同,访问的页面也不同,但是必要的数据库创建还是要有,所以重点是为大家介绍整体思路,以此举一反三。

我们会常常遇到这些个需要填的数据库信息,数据库名,数据库用户名,数据库密码,大家很多都会搞蒙,这些都对应什么呢?

首先我们创建一个数据库,在宝塔面板最左侧选择数据库,点击添加数据库,这里的数据库名、用户名、密码分别对应上面的三个,都是自定义填写的,填好记住就行,另外的选项都不用改。

把3个信息依次填入,然后点下一步安装,即可安装成功。随后根据源码的不同,会弹出网站后台和前台的地址,既可以正常访问了!

恭喜你拥有了你的第一个网站!

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98754939.html