**1. 已經有 Zuul,為什么要選擇 Gateway**
1. netflix 不太靠譜,zuul2.0 一直跳票,遲遲不發布。
1. 一方面因為 Zuul1.0 已經進入了維護階段,而且Gateway是SpringCloud團隊研發的,是親兒子產品,值得信賴。而且很多功能Zuul都沒有用起來也非常的簡單便捷。
2. Gateway是基于異步非阻塞模型上進行開發的,性能方面不需要擔心。雖然Netflix早就發布了最新的Zuul 2.x,但Spring Cloud貌似沒有整合計劃。而且Netflix相關組件都宣布進入維護期;不知前景如何?
3. 多方面綜合考慮Gateway是很理想的網關選擇。
2. SpringCloud Gateway具有如下特性。
1. 基于Spring Framework 5,Project Reactor和Spring Boot 2.0進行構建。
2. 動態路由:能夠匹配任何請求屬性。
3. 可以對路由指定Predicate (斷言)和Filter(過濾器)。
4. 集成Hystrix的斷路器功能。
5. 集成Spring Cloud 服務發現功能。
6. 易于編寫的Predicate (斷言)和Filter (過濾器)。
7. 請求限流功能。
8. 支持路徑重寫。
**2. SpringCloud Gateway與Zuul的區別**
1. 在SpringCloud Finchley正式版之前,Spring Cloud推薦的網關是Netflix提供的Zuul。
2. Zuul 1.x,是一個基于阻塞I/O的API Gateway。
3. Zuul 1.x基于Servlet 2.5使用阻塞架構,它不支持任何長連接(如WebSocket)Zuul的設計模式和Nginx較像,每次I/О操作都是從工作線程中選擇一個執行,請求線程被阻塞到工作線程完成,但是差別是Nginx用C++實現,Zuul用Java實現,而JVM本身會有第-次加載較慢的情況,使得Zuul的性能相對較差。
4. Zuul 2.x理念更先進,想基于Netty非阻塞和支持長連接,但SpringCloud目前還沒有整合。Zuul .x的性能較Zuul 1.x有較大提升。在性能方面,根據官方提供的基準測試,Spring Cloud Gateway的RPS(每秒請求數)是Zuul的1.6倍。
5. Spring Cloud Gateway建立在Spring Framework 5、Project Reactor和Spring Boot2之上,使用非阻塞API。
6. Spring Cloud Gateway還支持WebSocket,并且與Spring緊密集成擁有更好的開發體驗。
**3. Zuul1.x模型**
Springcloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是傳統的Serviet IO處理模型。
<br/>
Servlet的生命周期?servlet由servlet container進行生命周期管理。
* container啟動時構造servlet對象并調用servlet init()進行初始化。
* container運行時接受請求,并為每個請求分配一個線程(一般從線程池中獲取空閑線程)然后調用service)。
* container關閉時調用servlet destory()銷毀servlet。
:-: 
上述模式的缺點:
Servlet是一個簡單的網絡IO模型,當請求進入Servlet container時,Servlet container就會為其綁定一個線程,在<mark>并發不高的場景下</mark>這種模型是適用的。但是一旦高并發(如抽風用Jmeter壓),線程數量就會上漲,而線程資源代價是昂貴的(上線文切換,內存消耗大)嚴重影響請求的處理時間。在一些簡單業務場景下,不希望為每個request分配一個線程,只需要1個或幾個線程就能應對極大并發的請求,這種業務場景下servlet模型沒有優勢。
<br/>
所以Zuul 1.X是基于servlet之上的一個阻塞式處理模型,即Spring實現了處理所有request請求的一個servlet (DispatcherServlet)并由該servlet阻塞式處理處理。所以SpringCloud Zuul無法擺脫servlet模型的弊端。
<br/>
**4. Gateway模型**
<mark>Spring Cloud Gateway是基于WebFlux框架實現的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty</mark>。
<br/>
傳統的Web框架,比如說: Struts2,SpringMVC等都是基于Servlet APl與Servlet容器基礎之上運行的。
<br/>
但是在Servlet3.1之后有了異步非阻塞的支持。而<mark>WebFlux是一個典型非阻塞異步</mark>的框架,它的核心是基于Reactor的相關API實現的。相對于傳統的web框架來說,它可以運行在諸如Netty,Undertow及支持Servlet3.1的容器上。非阻塞式+函數式編程(Spring 5必須讓你使用Java 8)。
<br/>
Spring WebFlux是Spring 5.0 引入的新的響應式框架,區別于Spring MVC,它不需要依賴Servlet APl,它是完全異步非阻塞的,并且基于Reactor來實現響應式流規范。
- 微服務
- 微服務是什么?
- 微服務架構
- 微服務優缺點
- 微服務技術棧
- 微服務框架對比
- SpringCloud
- SpringCloud是什么
- SpringCloud與SpringBoot對比
- SpringCloud與Dubbo對比
- Rest微服務案例
- 總體介紹
- 父工程構建步驟
- 公共模塊構建步驟
- 服務端模塊構建步驟
- 消費端模塊構建步驟
- Eureka服務注冊與發現
- Eureka是什么
- Eureka原理
- Eureka注冊服務中心構建
- 向Eureka注冊已有微服務
- Eureka的自我保護機制
- Eureka服務發現
- Eureka集群配置
- Eureka與Zookeeper對比
- Ribbon負載均衡
- Ribbon是什么
- Ribbon負載均衡演示
- 構建服務端模塊
- 構建消費端模塊
- Ribbon核心組件IRule
- 自定義負載均衡策略
- Ribbon均衡策略優先級
- 輪詢策略算法
- OpenFeign負載均衡
- OpenFeign是什么
- 負載均衡演示
- 日志打印功能
- 導出功能
- Hystrix斷路器
- Hystrix是什么
- 服務熔斷
- Hystrix服務端構建
- 服務熔斷演示
- 服務熔斷類型
- HystrixProperty配置匯總
- 服務降級
- Hystrix客戶端構建
- 服務降級演示
- fallbackFactory
- 熔斷與降級
- 服務監控
- 網關服務Zuul
- Zuul是什么
- Zuul路由服務構建
- 設置訪問映射規則
- Config分布式配置中心
- Config分布式配置中心是什么
- Config服務端與Git通信
- Config客戶端獲取配置
- Config客戶端動態刷新
- Bus消息總線
- Bus消息總線是什么
- Bus消息總線原理
- 廣播通知設計思想
- 廣播通知演示
- 定點通知演示
- Stream消息驅動
- 為什么要引入Stream
- Stream消息驅動是什么
- Stream設計思想
- Stream流程和注解
- Stream案例演示
- 重復消費問題
- 消息持久化
- Sleuth分布式鏈路跟蹤
- Sleuth是什么
- 搭建鏈路監控
- SpringCloud Alibaba
- Nacos注冊與配置中心
- Nacos是什么
- 安裝并運行Nacos
- Nacos注冊中心
- 服務端入住Nacos
- 消費端入住Nacos
- Nacos負載均衡演示
- 服務注冊中心對比
- Nacos的AP和CP轉化
- Nacos配置中心
- 基礎配置演示
- Nacos分類配置
- Nacos集群搭建
- Sentinel實現熔斷與限流
- Sentinel是什么
- Sentinel環境搭建
- Sentinel監控微服務演示
- Sentinel流控規則
- 流量監控的作用
- 設置流控規則
- Sentinel降級規則
- 熔斷降級作用
- 設置降級規則
- Sentinel熱點限流
- 什么是熱點
- 設置熱點限流
- Sentinel系統限流
- @SentinelResource
- @SentinelResource屬性
- @SentinelResource限流演示
- @SentinelResource熔斷演示
- 規則持久化
- 熔斷框架比較
- Seata分布式事務
- 分布式事務問題
- Seata是什么
- Seata分布式事務過程
- Seata環境搭建
- 演示示例
- 業務說明
- 數據庫環境準備
- 微服務環境準備
- 測試
- Consul服務注冊與發現
- Consul是什么
- Consul能做什么
- 環境搭建
- Windows平臺
- 服務端入住Consul
- 消費端入住Consul
- 注冊中心對比
- Zookeeper服務注冊與發現
- Zookeeper是什么
- 環境搭建
- 服務端入住Zookeeper
- 消費端入住Zookeeper
- 網關服務Gateway
- Gateway是什么
- Gateway能做什么
- Gateway對比Zuul
- 三大核心概念
- Gateway工作流
- 環境搭建
- 網關路由配置方式
- 配置文件配置
- 代碼中配置
- 動態路由
- Predicate斷言
- 斷言是什么
- 常用斷言
- Filter過濾器
- 過濾器是什么
- 過濾器種類
- 自定義過濾器