所谓性能好,一般指2点:低时延、高并发,由这2点会带来高吞吐量,也就是百万级的QPS。
我先说低时延是怎么办到的:
1、Nginx内部的算法都非常优秀,是性能优先的。
比如hash表会考虑cpu cache line(参见https://www.nginx-cn.net/article/71),比如location匹配是基于URI规则封装的多叉树(参见https://www.nginx-cn.net/article/69)。
2、Nginx充分使用了OS的各种高性能特性
比如Linux的reuseport、accept_defer、lingering_close、sendfile、aio等等。
再说高并发是怎么达到的:
1、每个请求占用的内存极为有限
每个连接占用的基本内存不过几百字节,这需要很深厚的功力,也只有C语言才能办得到。
2、基于事件驱动的多路复用框架
这个已经说烂了,就不多说了
看了下面的文章,感觉这个说得更清楚。
"https://www.nginx-cn.net/article/147"
总结来说:正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
(1)访问原来无法访问的资源,如Google
(2)可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理,"它代理的是服务端,代服务端接收请求",主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载