关于面试:面试官连漏桶算法和令牌桶算法都不知道吗回去多看看书吧

7次阅读

共计 2460 个字符,预计需要花费 7 分钟才能阅读完成。

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官! 接下来的是今日的面试题:

====nginx 中限流怎么做的?
Nginx 限流就是限度用户申请速度,避免服务器受不了
限流有 3 种:

  1. 失常限度拜访频率(失常流量)
  2. 突发限度拜访频率(突发流量)
  3. 限度并发连接数
    Nginx 的限流都是基于漏桶流算法
    实现三种限流算法
    1、失常限度拜访频率(失常流量):
    限度一个用户发送的申请,我 Nginx 多久接管一个申请。
    Nginx 中应用 ngx_http_limit_req_module 模块来限度的拜访频率,限度的原理本质是基于漏桶算法原理来实现的。在 nginx.conf 配置文件中能够应用 limit_req_zone 命令及 limit_req 命令限度单个 IP 的申请解决频率。

定义限流维度,一个用户一分钟一个申请进来,多余的全副漏掉
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
绑定限流维度
server{
location/seckill.html{
limit_req zone=zone;
proxy_pass http://lj_seckill;
}
}
1r/ s 代表 1 秒一个申请,1r/ m 一分钟接管一个申请,如果 Nginx 这时还有他人的申请没有解决完,Nginx 就会回绝解决该用户申请。

2、突发限度拜访频率(突发流量):
限度一个用户发送的申请,我 Nginx 多久接管一个。
下面的配置肯定水平能够限度拜访频率,然而也存在着一个问题:如果突发流量超出申请被回绝解决,无奈解决流动时候的突发流量,这时候应该如何进一步解决呢?Nginx 提供 burst 参数联合 nodelay 参数能够解决流量突发的问题,能够设置能解决的超过设置的申请数外能额定解决的申请数。咱们能够将之前的例子增加 burst 参数以及 nodelay 参数:
定义限流维度,一个用户一分钟一个申请进来,多余的全副漏掉
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
绑定限流维度
server{
location/seckill.html{
limit_req zone=zone burst=5 nodelay;
proxy_pass http://lj_seckill;
}
}
为什么就多了一个 burst=5 nodelay; 呢,多了这个能够代表 Nginx 对于一个用户的申请会立刻解决前五个,多余的就慢慢来落,没有其余用户的申请我就解决你的,有其余的申请的话我 Nginx 就漏掉不承受你的申请

3、限度并发连接数
Nginx 中的 ngx_http_limit_conn_module 模块提供了限度并发连接数的性能,能够应用
limit_conn_zone 指令以及 limit_conn 执行进行配置。接下来咱们能够通过一个简略的例子来看下:
http {
limit_conn_zone $binary_remote_addr zone=myip:10m;
limit_conn_zone $server_name zone=myServerName:10m;
}
server {
location / {
limit_conn myip 10;
limit_conn myServerName 100;
rewrite / http://www.lijie.net permanent;
}
}
下面配置了单个 IP 同时并发连贯数最多只能 10 个连贯,并且设置了整个虚构服务器同时最大并发数最多只能 100 个链接。当然,只有当申请的 header 被服务器解决后,虚构服务器的连接数才会计数。实际上限流个别都是基于漏桶算法和令牌桶算法实现的。

==== 讲一讲漏桶流算法和令牌桶算法?
1)漏桶算法是网络世界中流量整形或速率限度时常常应用的一种算法,它的次要目标是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量能够被整形以便为网络提供一个稳固的流量。也就是咱们方才所讲的状况。漏桶算法提供的机制实际上就是方才的案例:突发流量会进入到一个漏桶,漏桶会依照咱们定义的速率顺次解决申请,如果水流过大也就是突发流量过大就会间接溢出,则多余的申请会被回绝。所以漏桶算法能控制数据的传输速率。
2)令牌桶算法是网络流量整形和速率限度中最常应用的一种算法。典型状况下,令牌桶算法用来管制发送到网络上的数据的数目,并容许突发数据的发送。Google 开源我的项目 Guava 中的 RateLimiter 应用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌耗费速率小于生产令牌的速度,令牌就会始终产生直至装满整个令牌桶。如果申请获取令牌失败则申请会被禁止拜访。

==== 什么是动静拆散?为什么要做动静拆散?
Nginx 是当下最热的 Web 容器,网站优化的重要点在于动态化网站,网站动态化的关键点则是是动静拆散,动静拆散是让动静网站里的动静网页依据肯定规定把不变的资源和常常变的资源辨别开来,动静资源做好了拆分当前,咱们则依据动态资源的特点将其做缓存操作。
让动态的资源只走动态资源服务器,动静的走动静的服务器
Nginx 的动态解决能力很强,然而动静解决能力有余,因而,在企业中罕用动静拆散技术。
对于动态资源比方图片,js,css 等文件,咱们则在反向代理服务器 nginx 中进行缓存。这样浏览器在申请一个动态资源时,代理服务器 nginx 就能够间接解决,无需将申请转发给后端服务器 tomcat。若用户申请的动静文件,比方 servlet,jsp 则转发给 Tomcat 服务器解决,从而实现动静拆散。这也是反向代理服务器的一个重要的作用。

更多面试题或学习资源可查看我主页或评论获取

正文完
 0