1.nginx优缺点
优点:
1]nginx是轻量级的,会占用更少的内存和资源,
2]抗并发:出来请求是异步非阻塞的,负载能力要比apache强,在高并发的情况下,nginx能保持低消耗高性能,而apache很容易出现进程数的飙升.
3]nginx在开启时,会生成一个master进程,然后master进程会fork多个worker子进程最后每个用户的请求由worker的子线程处理.
4]nginx支持7层负载均衡
5]nginx处理静态页面比较好,比apache高
6]支持高并发连接,最多可连接5w个
7]占用内存资源比较少
8]启动比较快
缺点:
1]稳定性不是很好,一个进程死掉会影响多个用户的使用,apache比较稳定,一个进程死掉并不影响其他用户
2]apache更加成熟,市场比较大,bug比较少,不过现在nginx现在的市场也在不断扩大
2.反向代理和正向代理
正向代理:代理的是客户端
用第三方代替我作为国外服务器的用户端
反向代理代理的是服务端
外网在访问国内的一些网站的时候,就会做一个转发,代理到内网.这就是反向代理,内网替代了国外用户的服务器.
3.Master-Worker模式(主从)
启动Nginx后,其实就是在80端口启动了Socket服务进行监听,如图所示,Nginx涉及Master进程和Worker进程。
master进程的作用:
读取并验证配置文件nginx.conf;管理worker进程;
Worker进程的作用:
每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;
Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。
4.nginx热部署
什么是热部署?
配置文件nginx.conf修改后,不需要stop Nginx,不需要中断请求,就能让配置文件生效!(nginx -s reload 重新加载/nginx -t检查配置/nginx -s stop)
执行方案:
方案一:
修改配置文件nginx.conf后,主进程master负责推送给woker进程更新配置信息,woker进程收到信息后,更新进程内部的线程信息。
更新旧得worker就行了
方案二:
修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。Nginx采用的就是方案二来达到热部署的!
生产新的worker处理新的请求,旧得请求被新的worker处理完之后就直接删除.
5.高并发下nginx如何做到高效处理?
Nginx采用了Linux的epoll模型,epoll模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入epoll队列中,这个过程是异步的。worker只需要从epoll队列循环处理即可。
6.nginx挂了咋办?
Keepalived+Nginx实现高可用
Keepalived是集群管理中实现集群高可用的软件,是一个高可用的解决方案,主要是用来防止服务器单点发生故障,可以通过和nginx配合实现web服务器的高可用(Keepalived不仅可以和nginx配合使用,还可以和很多其他服务配合使用)
Keepalived+Nginx实现高可用的思路:
1]请求不要直接打到Nginx上,应该先通过Keepalived(这就是所谓虚拟IP,VIP)
2]Keepalived应该能监控Nginx的生命状态(提供一个用户自定义的脚本,定期检查Nginx进程状态,进行权重变化,,从而实现Nginx故障切换)
7.配置
nginx.conf
8.Nginx作为web server来处理静态资源。
1]location可以进行正则匹配,应该注意正则的几种形式以及优先级。
2]Nginx能够提高速度的其中一个特性就是:动静分离,就是把静态资源放到Nginx上,由Nginx管理,动态请求转发给后端。
3]我们可以在Nginx下把静态资源、日志文件归属到不同域名下(也即是目录),这样方便管理维护。
4]Nginx可以进行IP访问控制,有些电商平台,就可以在Nginx这一层,做一下处理,内置一个黑名单模块,那么就不必等请求通过Nginx达到后端在进行拦截,而是直接在Nginx这一层就处理掉。
9.nginx中的反向代理
在location这一段配置中的root替换成proxy_pass即可.
root说明是静态资源,可以由Nginx进行返回;
proxy_pass说明是动态请求,需要进行转发,比如代理到Tomcat上。
request -> Nginx -> Tomcat,那么对于Tomcat而言,请求的IP地址就是Nginx的地址,而非真实的request地址,这一点需要注意。不过好在Nginx不仅仅可以反向代理请求,还可以由用户自定义设置HTTP HEADER。
10.负载均衡
负载均衡(LB,Load Balance),是一种技术解决方案。用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,避免过载。
资源,相当于每个服务实例的执行操作单元,负载均衡就是将大量的数据处理操作分摊到多个操作单元进行执行,用来解决互联网分布式系统的大流量、高并发和高可用的问题。
负载均衡可能带来的问题?
一个请求,可以到A server,也可以到B server,这完全不受我们的控制,当然这也不是什么问题,只是我们得注意的是:用户状态的保存问题,如Session会话信息,不能在保存到服务器上。
负载均衡案例
https://zhuanlan.zhihu.com/p/76918261
12.高可用
CAP 定理是分布式系统的基础,也是分布式系统的 3 个指标:
1]Consistency(一致性)
2]Availability(可用性)
3]Partition tolerance(分区容错性)
就是当一台或者多台服务器宕机的时候,系统整体和服务依然正常可用。
总之,负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一。一般通过负载均衡,冗余同一个服务实例的方式,解决分布式系统的大流量、高并发和高可用的问题。负载均衡核心关键:在于是否分配均匀。
13.互联网分布式系统解决方案
https://zhuanlan.zhihu.com/p/76918261