Nginx面试题

Nginx常用的功能?

  1. WEB服务器发布静态资源
  2. 反向代理(网关路由)
  3. 负载均衡
  4. 限流

目前市面上用的非常成熟的扩展是由章亦春将Lua和Nginx粘合的ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合在一起成为OpenResty,这样开发人员就可以安装OpenResty,使用Lua编写脚本,然后部署到Nginx Web容器中运行。从而非常轻松就能开发出高性能的Web服务。html.js.css.图片,jsp.java

1、tomcat官方宣称的并发量是1000,厉害点的做点参数调优,也不过3000并发 300000/3000=100

2、apache的并发比tomcat更不堪,200-300

3、weblogic的并发稍好,平均能达到3000左右

4、nginx就不一样了,处理几万的请求很轻松,内存占用也不高,单台最大并发数5w

理论上可以使用ngx_lua开发各种复杂的web应用,不过Lua是一种脚本/动态语言,不适合业务逻辑比较重的场景,适合小巧的应用场景,代码行数保持在几十行到几千行。目前见到的一些应用场景:

web应用:会进行一些业务逻辑处理,甚至进行耗CPU的模板渲染,一般流程:mysql/redis/http获取数据、业务处理、产生JSON/XML/模板渲染内容,比如京东的列表页/商品详情页;

接入网关:实现如数据校验前置、缓存前置、数据过滤、API请求聚合、AB测试、灰度发布、降级、监控等功能,比如京东的交易大Nginx节点、无线部门正在开发的无线网关、单品页统一服务、实时价格、动态服务;

Web防火墙:可以进行IP/URL/UserAgent/Referer黑名单、限流等功能;

缓存服务器:可以对响应内容进行缓存,减少到后端的请求,从而提升性能;

其他:如静态资源服务器、消息推送服务、缩略图裁剪等。

前端nginx限流

  1. 基于漏桶算法,进行nginx限流配置。控制请求响应的数量。

  2. limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s;

    10m : 设置的是桶的大小,1m=16000

    rate=2r/s : 响应的速率。 每秒钟两个请求

    如果进行了上面的设置,在一秒钟内,同时来了5个请求,前两个处理,后面3个 503

  3. 突发流量的设置

    偶然的突发流量,不限流,依然进行响应。

    limit_req zone=myRateLimit burst=5

    如果加上了 burst=5,相当于可以有一个排队的队列,容量为5.

    在一秒钟内,同时来了5个请求,前面2个处理,后面3个进入burst的队列,等待执行。

    还是这一秒内,又来了5个请求。前面2个进入burst的队列,最后3个请求 503.

    1,2,3,4 秒钟处理完。

  4. limit_req zone=myRateLimit burst=5 nodelay;

    nodelay,处理突发队列的请求,不再等待,直接执行。

    一秒钟内,来了10个请求。3个请求503

    7个请求都会立即响应,服务器会休息2秒半。

你可能感兴趣的:(Java面试题)