一、Nginx是什么?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,对比详情如下所示:
因此,Nginx在互联网项目或网站中广泛应用,比如百度、京东、新浪、网易、腾讯、淘宝等。
二、为什么使用Nginx?
在传统的Web项目中,由于用户访问量少,并发量小,普通的Web服务器(单机部署)能够承受响应的访问压力。所以在低并发的情况下,用户则直接访问Web服务器,然后Web服务器返回消息给用户请求。
用户访问<-->Web服务器
而在互联网项目下,由于用户量大,访问数多,并发量也大,动辄上千万级别的QPS,单台Web服务器肯定无法承受。因单个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线程。
因此,无论如何增加单台服务器的硬件配置,始终是有瓶颈。为了能够提升Web服务器的性能,使用Nginx是一种有效的解决方案。
Nginx特点:
高并发、高性能
可扩展性好
高可靠性
热部署
BSD许可证
高并发(High Concurrency)
高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
- 响应时间(Response Time):系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
- 吞吐量(Throughput):单位时间内处理的请求数量。
- QPS(Query Per Second):每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
- 并发用户数:同时承载正常使用系统功能的用户数量。
高可用(High Availability)
高可用通常来描述一套软件系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。(一直都能用 99.9999%)
高性能
高性能是指软件系统所设计的服务响应时间快,(CPU/处理器/内存)特别是在高并发下响应时间不会急剧增加。
三、Nginx的作用是什么?
1、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型
2、作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
3、作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
四、Nginx的应用场景
- Nginx-反向代理
基于HTTP请求:客户端向服务器端请求
(1)基本概念及示意图
正向代理:所有客户端(client)统一请求代理(proxy)客户端,再由代理客户端向真实服务器发起请求。所有客户端与代理(proxy)客户端处于同一局域网(LAN);
反向代理:所有客户端(client)统一请求代理(proxy)服务器,再由代理服务器向业务服务器发起请求。代理服务器与真实的业务服务器处于同一局域网(LAN);
(2)为什么使用反向代理
- 可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。
- 通过缓存静态资源,加速Web请求。
- 实现负载均衡。顺便说下,目前市面上,主流的负载均衡方案,硬件设备有F5,软件方案有四层负载均衡的LVS,七层负载均衡的Nginx、Haproxy等。
(3)反向代理示意图
说明:在实际项目应用中,Tomcat服务器一般不单独使用在项目中,我们一般通过Nginx用于反向代理的服务器,并将请求转发给后端多台Tomcat服务器,从而达到负载均衡的目的。
2.Nginx-负载均衡
(1)负载均衡作用
- 转发功能
按照一定的算法,比如权重、轮询,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
- 故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器宕机,自动将用户请求发送到其他应用服务器。
- 恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
(2)负载均衡分配服务器的常用策略
- 轮询(默认):按顺序,如果某个服务器没了,则访问其他服务器。
- 权重:根据权重分配服务器,权重越大,分配访问该服务器的可能性就越大。
- ip_hash:一个ip固定一个服务器的访问,根据ip的hash结果分配,可以解决session问题。
- fair:按照服务器的响应时间来分配,响应时间短分配越快。
- url_hash:一个url固定一个服务器的访问,根据url的hash结果分配。
3.Nginx-动静分离
(1)什么是动静分离
在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开到不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。
比如:可以将 html 页面,css样式,js文件,以及图片文件等静态页面放 Nginx 服务器中,然后把动态请求显示的文件放 Tomcat这样的容器服务器;
(2)Nginx动静分离处理方式
Nginx处理静态页面,Tomcat处理动态页面
动静分离有两种方案:
一种是把静态文件独立成单独域名,用单独的服务器处理
一种是动静态混合,使用nginx服务器将其分开
location中不同后缀名实现不同请求的转发
4.nginx-高可用集群
(1)为什么需要搭建Nginx集群?
为了防止Nginx单点故障造成服务器瘫痪。
(2)集群方案
Keepalived + Nginx 配合使用
当前有两台或多台Nginx服务器,但是他们的ip不同,这样不好提供给客户端,于是会使用一个虚拟 ip,比如 192.168.0.105,作为暴露给客户端的 ip 去访问。
当主服务器挂了之后,会自动切换到备用服务器代替主服务器工作。
当中使用到一个 keepalive 软件(将虚拟ip与alive的ip进行绑定,主服务器异常,keepalive自动重新将虚拟ip绑定至备服务器ip),会检测服务器状态,当异常会自动切换至正常的nginx服务器。
五、Nginx某项目应用案例架构图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)