国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

API 網關性能比較:Nginx vs. Zuul vs. Spring Cloud Gateway vs. Linkerd

網絡 通信技術
Nginx 由內核和模塊組成,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件與客戶端請求進行 URL 匹配,用于啟動不同的模塊去完成相應的工作。

 API 網關

API 網關出現的原因是微服務架構的出現,不同的微服務一般會有不同的網絡地址,而外部客戶端可能需要調用多個服務的接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通信,會有以下的問題:

  1. 客戶端會多次請求不同的微服務,增加了客戶端的復雜性。
  2. 存在跨域請求,在一定場景下處理相對復雜。
  3. 認證復雜,每個服務都需要獨立認證。
  4. 難以重構,隨著項目的迭代,可能需要重新劃分微服務。例如,可能將多個服務合并成一個或者將一個服務拆分成多個。如果客戶端直接與微服務通信,那么重構將會很難實施。
  5. 某些微服務可能使用了防火墻 / 瀏覽器不友好的協議,直接訪問會有一定的困難。

以上這些問題可以借助 API 網關解決。API 網關是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過 API 網關這一層。也就是說,API 的實現方面更多的考慮業務邏輯,而安全、性能、監控可以交由 API 網關來做,這樣既提高業務靈活性又不缺安全性,典型的架構圖如圖所示:

 

使用 API 網關后的優點如下:

  • 易于監控。可以在網關收集監控數據并將其推送到外部系統進行分析。
  • 易于認證。可以在網關上進行認證,然后再將請求轉發到后端的微服務,而無須在每個微服務中進行認證。
  • 減少了客戶端與各個微服務之間的交互次數。

NGINX 服務

Nginx 由內核和模塊組成,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件與客戶端請求進行 URL 匹配,用于啟動不同的模塊去完成相應的工作。

下面這張圖反應的是 HTTP 請求的常規處理流程:

 

Nginx 的模塊直接被編譯進 Nginx,因此屬于靜態編譯方式。啟動 Nginx 后,Nginx 的模塊被自動加載,不像 Apache,首先將模塊編譯為一個 so 文件,然后在配置文件中指定是否進行加載。在解析配置文件時,Nginx 的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。

Nginx 在啟動后,會有一個 Master 進程和多個 Worker 進程,Master 進程和 Worker 進程之間是通過進程間通信進行交互的,如圖所示。Worker 工作進程的阻塞點是在像 select()、epoll_wait() 等這樣的 I/O 多路復用函數調用處,以等待發生數據可讀 / 寫事件。Nginx 采用了異步非阻塞的方式來處理請求,也就是說,Nginx 是可以同時處理成千上萬個請求的。一個 Worker 進程可以同時處理的請求數只受限于內存大小,而且在架構設計上,不同的 Worker 進程之間處理并發請求時幾乎沒有同步鎖的限制,Worker 進程通常不會進入睡眠狀態,因此,當 Nginx 上的進程數與 CPU 核心數相等時(***每一個 Worker 進程都綁定特定的 CPU 核心),進程間切換的代價是最小的。

 

Zuul

 

Zuul 是 Netflix 開源的微服務網關組件,它可以和 Eureka、Ribbon、Hystrix 等組件配合使用。Zuul 的核心是一系列的過濾器,這些過濾器可以完成以下功能:

  • 身份認證與安全:識別每個資源的驗證要求,并拒絕那些與要求不符的請求。
  • 審查與監控:與邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖。
  • 動態路由:動態地將請求路由到不同的后端集群。
  • 壓力測試:逐漸增加指向集群的流量,以了解性能。
  • 負載分配:為每一種負載類型分配對應容量,并棄用超出限定值的請求。
  • 靜態響應處理:在邊緣位置直接建立部分響應,從而避免其轉發到內部集群。
  • 多區域彈性:跨越 AWS Region 進行請求路由,旨在實現 ELB(Elastic Load Balancing,彈性負載均衡)使用的多樣化,以及讓系統的邊緣更貼近系統的使用者。

上面提及的這些特性是 Nigix 所沒有的,這是因為 Netflix 公司創造 Zuul 是為了解決云端的諸多問題(特別是幫助 AWS 解決跨 Region 情況下的這些特性實現),而不僅僅是做一個類似于 Nigix 的反向代理,當然,我們可以僅使用反向代理功能,這里不多做描述。

Zuul1 是基于 Servlet 框架構建,如圖所示,采用的是阻塞和多線程方式,即一個線程處理一次連接請求,這種方式在內部延遲嚴重、設備故障較多情況下會引起存活的連接增多和線程增加的情況發生。

 

Zuul2 的巨大區別是它運行在異步和無阻塞框架上,每個 CPU 核一個線程,處理所有的請求和響應,請求和響應的生命周期是通過事件和回調來處理的,這種方式減少了線程數量,因此開銷較小。又由于數據被存儲在同一個 CPU 里,可以復用 CPU 級別的緩存,前面提及的延遲和重試風暴問題也通過隊列存儲連接數和事件數方式減輕了很多(較線程切換來說輕量級很多,自然消耗較小)。這一變化一定會大大提升性能,我們在后面的測試環節看看結果。

 

我們今天談的是 API 網關性能,這一點也涉及到高可用,簡單介紹 Zuul 的高可用特性,高可用是非常關鍵的,因為外部請求到后端微服務的流量都會經過 Zuul,所以在生產環境中一般都需要部署高可用的 Zuul 來避免單點故障。一般我們有兩種部署方案:

1. Zuul 客戶端注冊到 Eureka Server

這種情況是比較簡單的情況,只需要將多個 Zuul 節點注冊到 Eureka Server 上,就可以實現 Zuul 的高可用。事實上,這種情況下的高可用和其他服務做高可用的方案沒有什么區別。我們來看下面這張圖,當 Zuul 客戶端注冊到 Eureka Server 上時,只需要部署多個 Zuul 節點就可以實現高可用。Zuul 客戶端會自動從 Eureka Server 查詢 Zuul Server 列表,然后使用負載均衡組件(例如 Ribbon)請求 Zuul 集群。

 

2. Zuul 客戶端不能注冊到 Eureka Server

假如說我們的客戶端是手機端 APP,那么不可能通過方案 1 的方式注冊到 Eureka Server 上。這種情況下,我們可以通過額外的負載均衡器來實現 Zuul 的高可用,例如 Nginx、HAProxy、F5 等。

如圖所示,Zuul 客戶端將請求發送到負載均衡器,負載均衡器將請求轉發到其代理的其中一個 Zuul 節點,這樣就可以實現 Zuul 的高可用。

 

Spring Cloud

雖然 Spring Cloud 帶有“Cloud”,但是它并不是針對云計算的解決方案,而是在 Spring Boot 基礎上構建的,用于快速構建分布式系統的通用模式的工具集。

使用 Spring Cloud 開發的應用程序非常適合在 Docker 或者 PaaS 上部署,所以又叫云原生應用。云原生可以簡單理解為面向云環境的軟件架構。

既然是工具集,那么它一定包含很多工具,我們來看下面這張圖:

 

這里由于僅涉及到 API 網關的對比,因此我不逐一介紹其他工具了。

Spring Cloud 對 Zuul 進行了整合,但從 Zuul 來看,沒有大變化,但是 Spring Cloud 整個框架經過了組件的集成,提供的功能遠多于 Netflix Zuul,可能對比時會出現差異。

Service Mesh 之 Linkerd

我想 Turgay Celik 博士把 Linkerd 作為對比對象之一,可能是因為 Linkerd 為云原生應用提供彈性的 Service Mesh,而 Service Mesh 能夠提供輕量級高性能網絡代理,并且也提供微服務框架支撐。

從介紹來看,linkerd 是我們面向微服務的開源 RPC 代理,它直接立足于 Finagle(Twitter 的內部核心庫,負責管理不同服務間之通信流程。事實上,Twitter 公司的每一項在線服務都立足于 Finagle 構建而成,而且其支持著每秒發生的成百上千萬條 RPC 調用)構建而成,設計目標在于幫助用戶簡化微服務架構下的運維,它是專用于處理時間敏感的服務到服務的通信基礎設施層。

和 Spring Cloud 類似,Linkerd 也提供了負載均衡、熔斷機器、服務發現、動態請求路由、重試和離線、TLS、HTTP 網關集成、透明代理、gRPC、分布式跟蹤、運維等諸多功能,功能是相當全了,為微服務框架的技術選型又增加了一個。由于沒有接觸過 Linkerd,所以暫時無法從架構層面進行分析,后續會補充這方面的內容,自己來做一次技術選型。

性能測試結果

Turgay Çelik 博士的那篇文章里使用了 Apache 的 HTTP 服務器性能評估工具 AB 作為測試工具。注意,由于他是基于亞馬遜(AWS)公有云的進行的測試,可能和你實際物理機上的測試結果有出入。

實驗中啟動了客戶端和服務端兩臺機器,分別安裝多個待測試服務,客戶端通過幾種方式分別訪問,嘗試獲取資源。測試方案如下圖所示:

 

測試選擇了三個環境,分別是:

  1. 單 CPU 核,1GB 內存:用于比較 Nginx 反向代理和 Zuul(去除***次運行后的平均結果);
  2. 雙 CPU 核,8GB 內存:用于比較 Nginx 反向代理和 Zuul(去除***次運行后的平均結果);
  3. 8 個核 CPU,32GB 內存:用于比較 Nginx 反向代理、Zuul(去除***次運行后的平均結果)、Spring Cloud Zuul、Linkerd。

測試過程均采用 200 個并行線程發送總共 1 萬次請求,命令模板如下所示:

  1. ab -n 10000 -c 200 HTTP://<server-address>/<path to resource> 

注意:由于 Turgay Çelik 博士的測試過程中是基于 Zuul 1 進行的測試,所以性能上較差,不能真實反映當前 Zuul 版本的性能狀況。

 

從上面的結果來看,單核環境下,Zuul 的性能最差(950.57 次 /s),直接訪問方式性能***(6519.68 次 /s),采用 Nginx 反向代理方式較直接訪問方式損失 26% 的性能(4888.24 次 /s)。在雙核環境下,Nginx 的性能較 Zuul 性能強接近 3 倍(分別是 6187.14 次 /s 和 2099.93 次 /s)。在較強的測試環境下(8 核),直接訪問、Nginx、Zuul 差距不大,但是 Spring Cloud Zuul 可能由于內部整體消耗,導致每秒的請求數只有 873.14。

最終結論

從產品思維來看,API 網關負責服務請求路由、組合及協議轉換。客戶端的所有請求都首先經過 API 網關,然后由它將請求路由到合適的微服務。API 網關經常會通過調用多個微服務并合并結果來處理一個請求,它可以在 Web 協議(如 HTTP 與 WebSocket)與內部使用的非 Web 友好協議之間轉換,所以說作用還是很大的,因此技術方案選型對于整個系統來說也有一定重要性。

從我所理解的這四款組件的設計原理來看,Zuul1 的設計模式和 Nigix 較像,每次 I/O 操作都是從工作線程中選擇一個執行,請求線程被阻塞直到工作線程完成,但是差別是 Nginx 用 C++ 實現,Zuul 用 Java 實現,而 JVM 本身有***次加載較慢的情況。Zuul2 的性能肯定會較 Zuul1 有較大的提升,此外,Zuul 的***次測試性能較差,但是從第二次開始就好了很多,可能是由于 JIT(Just In Time)優化造成的吧。而對于 Linkerd,它本身是對于資源比較敏感的一種網關設計,所以在通用環境下拿它和其他網關實現相比較,可能會出現不準確的結果。

責任編輯:武曉燕 來源: 猿人課堂
相關推薦

2021-01-13 16:04:07

網絡On-Prem托管

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2025-02-18 16:00:00

代碼Python架構

2020-04-15 10:21:43

云計算AWSAzure

2014-09-28 10:29:43

喬布斯施密特Android

2021-12-23 15:36:21

NASSANDAS

2022-08-04 14:54:50

APTDNFYUM

2024-09-12 22:45:47

2023-05-22 19:49:30

命令Linux

2015-03-19 11:03:49

Linuxwin10

2013-04-09 10:15:13

公有云私有云混合云

2020-07-21 07:58:17

云計算AWSAzure

2023-10-12 07:03:40

2009-04-04 08:58:45

Palmiphone移動OS

2009-02-27 09:42:00

無線產品企業家用

2021-12-09 19:18:12

SD-WANSASE網絡

2012-12-17 10:01:27

Google DremApache Hado云計算

2019-08-27 11:18:37

云計算云存儲云備份

2020-11-24 13:47:56

服務器

2011-07-29 11:10:44

ChromeIE9Firefox
點贊
收藏

51CTO技術棧公眾號

国产精品制服诱惑| 九色国产在线观看| 成人羞羞视频播放网站| 91.成人天堂一区| 一区二区三区 欧美| 媚黑女一区二区| 国产99久久精品一区二区永久免费| av成人 com a| 色噜噜久久综合| 亚洲人辣妹窥探嘘嘘| 久久综合九色综合欧美狠狠| 青青久久av北条麻妃黑人| 中文在线免费视频| 欧美亚洲精品一区| 白浆爆出在线观看| 91污在线观看| 国产 国语对白 露脸| 一区二区黄色| 91国产在线播放| 国产精品一区二区av日韩在线 | 欧美裸体视频| 欧美性xxxxx极品少妇| 国产视频资源| 亚洲国产精品传媒在线观看| www.国产在线视频| 国内精品久久久久影院色| 国内外成人免费视频| 99视频精品全国免费| 91高清视频免费观看| 欧美激情三区| 一区二区三区四区精品| 成人在线黄色电影| 欧美成人精品1314www| 日本中文字幕伦在线观看| 在线看国产日韩| 黄色在线免费观看大全| 日韩欧美精品网址| 四虎影院在线播放| 一本久久综合亚洲鲁鲁五月天| 大地资源高清播放在线观看| 亚洲另类中文字| 成人羞羞视频免费看看| 亚洲人精品午夜| 免费观看一二区视频网站| 亚洲三级电影网站| 日日噜噜噜夜夜爽爽狠狠视频| 一区二区在线看| 五月天丁香婷| 欧美日韩中文字幕在线| 欧美男男同志| 在线播放一区二区三区| 91精品久久久久久粉嫩| 亚洲精品电影网在线观看| 亚洲美女尤物影院| www欧美日韩| 成人在线超碰| 国产精品视频成人| 好吊日精品视频| 三区精品视频观看| 国产精品系列在线观看| 精品少妇一区二区三区在线| av福利精品导航| av一级毛片| 欧美性大战久久久久久久| 久草中文在线| 一区三区二区视频| 麻豆一区二区麻豆免费观看| 成人免费在线视频网址| 久久先锋资源| 日韩五码在线观看| 亚洲精品videosex极品| 国产三级视频在线播放线观看| 日韩欧美色综合| 电影91久久久| 91最新国产视频| 蜜臀久久99精品久久久久宅男 | 另类小说第一页| 亚洲一二三专区| porn视频在线观看| 亚洲奶大毛多的老太婆| 北条麻妃在线一区二区免费播放 | 亚洲欧美在线x视频| 久久三级中文| 成人午夜小视频| 蜜臀久久99精品久久久久宅男| 91专区在线观看| 亚洲动漫第一页| av在线中出| 国产成人在线一区| 日韩影院在线观看| 成人影院在线观看视频| 欧美日韩一区二区三区视频| yiren22亚洲综合| 91丨九色丨国产| av亚洲精华国产精华精华| 中文字幕一区免费| 中文字幕久久亚洲| 亚洲美女视频| 成 年 人 黄 色 大 片大 全| 岛国av一区二区| 成人国产一区| 91成人免费看| 国产日产欧美一区| 蜜桃成人365av| 国产成人在线视频| caoporen国产精品视频| 精品推荐蜜桃传媒| 高清一区二区三区四区五区| 久久亚洲欧洲| 欧美性猛交p30| 久久成人人人人精品欧| 午夜亚洲精品| 天堂在线观看一卡二卡三卡四卡| 亚洲天堂av在线免费| 欧美日韩专区| 妞干网在线观看| 国产亚洲精品综合一区91| 海角社区69精品视频| 成人伊人222| 久久影院免费观看| 久久精品国产精品青草| 成人免费黄色网页| 国产精品视频精品视频| 久久久影视传媒| 亚洲性色av| 久久综合伊人77777麻豆| 亚洲一级在线观看| 精品伊人久久久| www..com日韩| 日韩av中文字幕在线| 亚洲综合国产| 成人亚洲综合天堂| 91精品国产自产在线老师啪| 久久精品人人做| 日韩三级成人| 欧美成人精品免费| 日韩精品中文字幕在线| 另类av一区二区| 天天av综合网| 国产成人精品av在线| 久久精品一二三| 欧美爱爱视频| 欧美日韩黄色一级片| 亚洲少妇激情视频| 国产综合久久久久久鬼色| 神马午夜伦理不卡 | 亚洲精品亚洲人成人网在线播放| 亚洲一区导航| 91免费黄视频| 亚洲人成网站777色婷婷| 蜜臀精品一区二区三区在线观看| 九七久久人人| 欧美日韩国产不卡在线看| 欧美日韩一区二区电影| 亚洲激情社区| 国产在线高清视频| 精品免费视频123区| 欧美猛男gaygay网站| 国产日韩欧美一区在线| aaa在线免费观看| 久久国产精品免费一区| 欧美精品aⅴ在线视频| 久久蜜桃精品| 黄色aa久久| 日韩在线综合网| 国模精品视频一区二区| 亚洲人123区| 久久香蕉国产| 日本欧美在线视频免费观看| 美日韩免费视频| 亚洲韩国青草视频| 成人18精品视频| 啪啪国产精品| 欧洲天堂在线观看| 免费看成人午夜电影| 亚洲精品一区二区久| 久久久久久久久久久黄色| 最新亚洲精品| 午夜免费福利在线观看| 一本一本a久久| 久久艹在线视频| 亚洲成人综合在线| 亚洲小说欧美另类婷婷| 日本片在线观看| 久久久久久久中文| 日本91av在线播放| 欧美日韩综合色| 国产伦理精品不卡| 国产美女撒尿一区二区| 一区二区三区不卡在线视频| 欧美国产二区| 美女啪啪无遮挡免费久久网站| 亚洲精品伦理在线| 免费视频一区| 久久国内精品| 在线免费观看色| 正在播放精油久久| 欧美在线不卡区| 欧美sm美女调教| 国产精品久久久久久久久搜平片 |