[TOC]
> ### `Nginx`與`Tomcat`比較
* `tomcat`是根據`Servlet`和`JSP`規范執行的。`tomcat`對靜態文件、高并發文件的處理比較弱。
* `nginx`配置文件簡單;能根據域名、URL的不同將`HTTP`請求分發到不同的后端服務器集群;負載均衡;反向代理;內置健康檢查;節省帶寬。支持`GZIP`壓縮;支持熱部署。
<br/>
> ### `nginx`熱部署的實現
* Nginx涉及Master進程和Worker進程;master讀取并驗證配置文件nginx.conf;管理worker進程;每一個Worker進程都維護一個線程(避免線程切換),處理連接和請求。

* 修改配置文件nginx.conf后,重新生成新的worker進程,當然會以新的配置進行處理請求,而且新的請求必須都交給新的worker進程,至于老的worker進程,等把那些以前的請求處理完畢后,kill掉即可。
<br/>
> ### `Nginx`如何做到高并發
* `Nginx`采用了`Linux`的`epoll`模型,`epoll`模型基于事件驅動機制,它可以監控多個事件是否準備完畢,如果OK,那么放入`epoll`隊列中,這個過程是異步的。`worker`只需要從epoll隊列循環處理即可。
<br/>
> ### 高可用、負載均衡
* `Keep-Alive`

* `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