自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

架構師如何選型分布式業(yè)務網關

開發(fā) 架構
作為一名架構師,我們該如何選型“業(yè)務網關”呢?我們自己先要學會做技術選型,自己預期有一個技術成本的預判。

在日常工作中,不同的場合下,我們可能都會聽說網關的概念,當然通常是指業(yè)務網關(API網關),負責API的輸入和輸出。有了業(yè)務網關之后,各個API服務提供者可以專注于自己的業(yè)務邏輯處理,而API網關更專注于安全、流量、路由等問題。從功能層次我們又會聯(lián)想到一個概念——代理。網關與代理的區(qū)別:代理本質是數據的透傳,協(xié)議不會發(fā)生變化;網關在數據透傳的背景下,還會涉及協(xié)議的轉換,比如從HTTP到Dubbo。

那么作為一名架構師,我們該如何選型“業(yè)務網關”呢?我們自己先要學會做技術選型,自己預期有一個技術成本的預判,比如我推薦使用Spring Cloud Alibaba+Spring Gateway,就是我自己作為一個架構師的技術預判。

Zuul

Zuul是Netflix開源的微服務網關,可以和Eureka、Ribbon、Hystrix等組件配合使用,Spring Cloud對Zuul進行了整合與增強,Zuul總共有兩個大的版本:Zuul1.0和Zuul2.0,目前最新的版本為v2.2.0,Zuul1.0和Zuul2.0版本之間功能差異性非常大。

Netflix的Zuul包含如下功能:

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

以上介紹來自Zuul官方文檔,但其實開源版本的Zuul以上功能一個都沒有——開源的Zuul只是幾個Jar包而已,以上能力指的應該是Netflix官方自用的Zuul的能力;Netflix自用的Zuul能力是比較強大的,可使用Groovy編寫過濾器,并且可動態(tài)加載/卸載、修改規(guī)則,而且使用Cassandra作為數據庫,然而開源版本這些一個都沒有;Spring Cloud中,Zuul絕大部分功能都是Spring Cloud團隊為Zuul開發(fā)的;所以Zuul 2.x的開源進度延后一年,Spring Cloud團隊開發(fā)了自己的SCG,并宣布Spring Cloud不打算支持Zuul 2.x,你還覺得意外嗎?看到這里,很多人可能沒有動力學習Zuul了,個人認為還是可以了解一下的,后面講到SCG時,你會發(fā)現很多設計理念是相通的。

既然說到了Spring Cloud對Zuul的封裝,那么我們來簡單的分析下Spring Cloud與Zuul的關系。Spring Cloud通過Spring Cloud Netflix 1.X來封裝Zuul1.0,1.X的最后一個版本是v1.4.7.RELEASE,對應的Zuul版本是1.3.1。Spring Cloud Netflix從3.X開始就沒有封裝Zuul網關,包括Zuul1.0和Zuul2.0,也就是說開發(fā)者想要通過Spring Cloud來復用Zuul,只能使用Zuul1.0,暫時不能復用Zuul2.0。

Zuul目前在github上的star數為10.2k,fork數為2k,也就是說還是有很多開源愛好者會基于Zuul來定制化業(yè)務網關。

除了開源的Spring Cloud定制化Zuul,開源微服務框架jhipster也參與了定制,并集成到它的生態(tài)中。Jhipster主要包含generator-jhipster和jhipster-registry,前者star數微17.7k,fork數為3.5k,后者star數為604,fork為607。

Zuul1.0整體架構設計如圖所示。

Zuul2.0整體架構設計如圖所示。

Spring Cloud Gateway

SCG是基于Spring Framework 5.0和Spring Boot 2.0構建的API網關,提供路由等功能。其旨在提供一種簡單而有效的方法路由到API,并為它們提供跨領域的關注點,例如:安全性、監(jiān)視/指標和彈性。

主要特性:

  • J ava8
  • Spring Framework5
  • Spring Boot2
  • 動態(tài)路由
  • Spring Handler Mapping 內置的路由匹配
  • HTTP 請求的路由匹配(路徑、方法、 Hea der 、主機等)
  • 過濾器限定范圍以匹配路由
  • 過濾器可以修改下游 HTTP 請求和 HTTP 響應(添加、刪除 Header 、添加 / 刪除參數、重寫路徑、設置路徑等)
  • API或配置驅動
  • 支持Spring Cloud Discovery Client配置路由

SCG的專業(yè)術語包括:

  • 路由:它是基本構建模塊,主要包含ID、URI、斷言集合以及過濾器集合,如果能夠匹配斷言就會執(zhí)行路由。
  • 斷言: 主要是指Java8的函數式斷言,輸入類型是Spring Framework的ServerWebExchange,基于斷言可以匹配基于headers或者parameters的http請求。
  • 過濾器: 它是通過特殊的工廠方法構造的基于Spring Framework GatewayFilter的實現,通過過濾器開發(fā)者可以在http請求下行之前修改請求響應參數,在請求響應返回之后可以修改響應的結果。

SCG整體架構設計如圖所示。

自研網關

一個API網關的基本功能包括統(tǒng)一接入、協(xié)議適配、流量管控與容錯,以及安全防護,這個四大基本功能構成了網關的核心能力。網關首要的功能是負責統(tǒng)一接入,然后將請求的協(xié)議轉換成內部的接口協(xié)議,在調用的過程中還要限流、降級和熔斷等容錯的方式來保護網關的整體穩(wěn)定,同時網關還要做到基本的安全防護(防刷控制),以及黑白名單(比如IP地址白名單)等基本的安全措施,主要包括:統(tǒng)一標準接入,具備高性能、高并發(fā)和高可靠性,具備負載均衡的能力;

除了基本的四個功能,網關運行良好的環(huán)境還包括注冊中心(比如通過Nacos讀取已經發(fā)布的API接口的動態(tài)配置)。為了實現高性能,將數據全部異構到緩存(比如Redis)中,同時還可以配合本機緩存來進一步的提高網關系統(tǒng)的性能。為了提高網關的吞吐率,可以使用NIO+Servlet3異步的方式,還可以利用Servlet3的異步特性將請求線程與業(yè)務處理線程分開,為后續(xù)的線程池隔離做好基本的支撐。訪問日志的存儲我們可以放到Hbase或者ES中,如果要作為開放網關使用,那么需要一個支持OAuth2.0協(xié)議的授權中心,同時還可以引入Nginx+Lua的方式,將一些基本的校驗判斷前置到應用系統(tǒng)之上,這樣可以更加輕量級的處理網關接入的問題。

主要包括接入層,開發(fā)者可以通過Nginx和Lua腳本,解決限流、黑白名單、路由、負載均衡、長短連接以及容災切換的問題。網關需要保證服務的穩(wěn)定性,需要接入注冊中心,因為本書是Spring Cloud Alibaba的布道書籍,所以強烈推薦使用Nacos作為注冊中心和配置中心。統(tǒng)一的鑒權中心,主要是統(tǒng)一解決網關為各個API服務的鑒權問題,當然可以按照服務維度做隔離,自定義鑒權規(guī)則。統(tǒng)一用戶中心主要是解決用戶登錄問題,確保微服務調用的安全性。

自研網關還需要有泛化功能,使用者在調用提供者的接口的時候,不再需要API提供者的客戶端JAR包,因此也就沒有了POJO,通過泛化的方式進行遠程調用。一般情況下我們要通過RPC調用接口提供方的服務,首先在系統(tǒng)中嵌入接口提供者的JAR包,然后使用JAR包里面的類和方法。對于一個網關系統(tǒng)來說,如果要調用N個接口,就需要N個JAR包,這樣的網關是很難維護的,當然Dubbo RPC是支持泛化的。

網關要具備時間校驗、方法校驗、版本校驗和簽名校驗等功能,當然網關還需要具備服務降級、日志記錄以及監(jiān)控與告警功能。

對比以上三種網關

網關

限流

鑒權

監(jiān)控

易用性

可維護性

成熟度

SCG

可以通過IP,用戶,集群限流,提供了相應的接口進行擴展

普通鑒權auth2.0

Gateway Metrics Filter

簡單易用

Spring系列可擴展強,易配置和可維護性好

Spring社區(qū)成熟,但Gateway資源少。

Zuul2

可以通過配置文件配置集群限流和單服務器限流,也可以通過filter實現限流擴展

filter中實現

Filter中實現

參考資料比較少

可維護性差

開源不就資源少。

Zuul1

同上

同上

同上

同上

同上

同上

自研網關

需要開發(fā)

需要開發(fā)

需要開發(fā)

需要開發(fā)

可維護性極高

需要開發(fā)

總結

推薦使用Spring Cloud Alibaba+Spring Cloud Gateway,可以更加高效的利用Spring Cloud ALibaba的服務治理能力去融合網關API的治理,從而提升業(yè)務服務API的系統(tǒng)穩(wěn)定性。

責任編輯:張燕妮 來源: 35歲程序員那些事
相關推薦

2022-03-17 09:55:05

架構分布式選型

2018-10-11 10:55:44

分布式文件系統(tǒng)HDFS

2020-09-15 09:55:13

架構師架構選型

2023-05-29 14:07:00

Zuul網關系統(tǒng)

2024-03-25 08:35:07

分布式系統(tǒng)設計

2019-10-10 09:16:34

Zookeeper架構分布式

2018-08-07 10:04:11

數據庫分布式緩存Redis

2019-08-27 11:00:38

技術數據庫設計

2019-08-22 10:54:05

分布式系統(tǒng)架構

2020-11-25 09:56:48

架構運維技術

2022-06-15 10:04:51

存儲選型MySQL

2024-02-19 00:00:00

分布式定時任務框架

2021-02-10 09:54:15

分布式NacosApollo

2019-07-19 15:51:11

框架選型分布式

2022-08-09 08:40:37

框架分布式定時任務

2018-11-26 15:12:45

存儲選型架構

2016-04-20 17:18:29

分布式數據庫京東WOT

2018-09-14 11:11:04

分布式文件存儲

2023-09-14 15:38:55

云原生分布式架構

2019-10-24 11:17:57

架構運維技術
點贊
收藏

51CTO技術棧公眾號