[TOC]
> ### `Nginx`与`Tomcat`比较
* `tomcat`是根据`Servlet`和`JSP`规范执行的。`tomcat`对静态文件、高并发文件的处理比较弱。
* `nginx`配置文件简单;能根据域名、URL的不同将`HTTP`请求分发到不同的后端服务器集群;负载均衡;反向代理;内置健康检查;节省带宽。支持`GZIP`压缩;支持热部署。
<br/>
> ### `nginx`热部署的实现
* Nginx涉及Master进程和Worker进程;master读取并验证配置文件nginx.conf;管理worker进程;每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求。
![](https://i.loli.net/2019/03/14/5c892b0f2d982.png)
* 修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可。
<br/>
> ### `Nginx`如何做到高并发
* `Nginx`采用了`Linux`的`epoll`模型,`epoll`模型基于事件驱动机制,它可以监控多个事件是否准备完毕,如果OK,那么放入`epoll`队列中,这个过程是异步的。`worker`只需要从epoll队列循环处理即可。
<br/>
> ### 高可用、负载均衡
* `Keep-Alive`
![](https://i.loli.net/2019/03/14/5c89c90097fa4.png)
* `HAProxy`
* `LVS + Keep-Alive`
* `Linux Virtual Server`
* `F5`
<br/>
> ### `nginx`的负载均衡策略
* 1、轮询(默认)
* 2、指定权重轮询
* 3、`ip_hash`(ip绑定),每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
* 4、`url_hash`(第三方),按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
* 5、`fair`(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
<br/>
***
参考
[深入浅出搞懂Nginx](https://zhuanlan.zhihu.com/p/34943332)
[Nginx&Keepalived 实现高可用](https://juejin.im/post/5b645b6ff265da0f955ceddf)
- asD
- Java
- Java基础
- Java编译器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞队列
- java语法
- String.format()
- JVM
- JVM内存、对象、类
- JVM GC
- JVM监控
- 多线程
- 基础概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 线程池
- Spring
- IOC
- 特性介绍
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring处理请求的过程
- 注解
- 微服务
- 服务注册与发现
- etcd
- zk
- 大数据
- Java_spark
- 基础知识
- Thrift
- hdfs
- 计算机网络
- OSI七层模型
- HTTP
- SSL
- 数据库
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 数据结构/算法
- 排序算法
- 快排
- 插入排序
- 归并排序
- 堆排序
- 计算时间复杂度
- leetcode
- LRU缓存
- B/B+ 树
- 跳跃表
- 设计模式
- 单例模式
- 装饰者模式
- 工厂模式
- 运维
- git
- 前端
- thymeleaf
- 其他
- 代码规范
- work_project
- Interview