Java基础到进阶_聊聊高并发场景下反向代理技术_Nginx

威哥

学习一门技术,按照威哥的思路,一定得先了解一下这是什么,有什么用,以及怎么用,这样的学习效率才是高效的。

什么是Nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

为什么使用Nginx?

在传统的Web项目中,并发量小,用户使用的少。

所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。

用户访问<-->Tomcat服务器

而在互联网项目下,因单个tomcat默认并发量有限制。如果请求量过大,会产生如下问题:

Tomcat8 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。

当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。

具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。

操作系统对于进程中的线程数有一定的限制:

Windows 每个进程中的线程数不允许超过 2000

Linux 每个进程中的线程数不允许超过 1000

(在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。)

Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都

会使Tomcat支持更多的并发。

maxThreads="150" 最大并发数

minSpareThreads="10"///初始化时创建的线程数

maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

高并发(High Concurrency)

是互联网分布式系统架构设计中必须考虑的因素之一,

它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per

Second),并发用户数等。

响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

吞吐量:单位时间内处理的请求数量。

QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

并发用户数:同时承载正常使用系统功能的用户数量。

高可用(High Availability)

通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。

(一直都能用 99.9999%)

高性能

是指服务响应时间快,(CPU/处理器/内存)特别是在高并发下响应时间不会急剧增加。

Nginx特点:

高并发、高性能

可扩展性好

高可靠性热部署

BSD许可证

Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

反向代理:

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

正向代理:

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

正向代理和反向代理区别?

正向代理,是在客户端的。比如需要访问某些国外网站,我们可能需要购买vpn。并且vpn是在我们的用户浏览器端设置的(并不是在远端的服务器设置)。浏览器先访问vpn地址,vpn地址转发请求,并最后将请求结果原路返回来。

反向代理是作用在服务器端的,是一个虚拟ip(VIP)。对于用户的一个请求,会转发到多个后端处理器中的一台来处理该具体请求。

四、Nginx下载

官方网址:

├── conf 这是nginx所有配置文件的目录

│ ├── fastcgi.conf fastcgi 相关参数的配置文件

│ ├── fastcgi.conf.default fastcgi.conf 的原始备份

│ ├── fastcgi_params fastcgi的参数文件

│ ├── fastcgi_params.default

│ ├── koi-utf

│ ├── koi-win

│ ├── mime.types 媒体类型

│ ├── mime.types.default

│ ├── nginx.conf nginx默认的主配置文件

│ ├── nginx.conf.default

│ ├── scgi_params scgi 相关参数文件

│ ├── scgi_params.default

│ ├── uwsgi_params uwsgi相关参数文件

│ ├── uwsgi_params.default

│ └── win-utf

├── fastcgi_temp fastcgi临时数据目录

├── html 这是编译安装时nginx的默认站点目录,类似Apache的默

认站点htdocs

│ ├── 50x.html 错误页面优雅替代显示文件,例如:出现502错误时会调用此页

面error_page 500 502 503 504 /50x.html

│ └── index.html 默认的首页文件,index.html\index.asp\index.jsp来做网

站的首页文件

├── logs nginx默认的日志路径,包括错误日志及访问日志

│ ├── access.log nginx的默认访问日志文件,使用tail -f access.log,可以

实时观看网站的用户访问情况信息

│ ├── error.log nginx的错误日志文件,如果nginx出现启动故障可以查看此文

│ └── nginx.pid nginx的pid文件,nginx进程启动后,会把所有进程的ID号写

到此文件├── nginx-1.6.3 -> /application/nginx-1.6.3

├── proxy_temp 临时目录

├── sbin 这是nginx命令的目录,如nginx的启动命令nginx

│ ├── nginx Nginx的启动命令nginx

│ └── nginx.old

├── scgi_temp 临时目录

└── uwsgi_temp 临时目录

后台留言获取Nginx全套视频资料,