<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          工作幾年了,API 網(wǎng)關(guān)還不懂?

          共 5172字,需瀏覽 11分鐘

           ·

          2021-06-13 02:06

          • 一些背景
          • 我對(duì)API的定義:
          • API管理
          • 集群入口
          • API網(wǎng)關(guān)模式
          • 進(jìn)入服務(wù)網(wǎng)格(Service Mesh)


          翻譯一篇API網(wǎng)關(guān)的文章,介紹了其三種角色:API管理、集群ingress網(wǎng)關(guān)、API網(wǎng)關(guān)模式,最后還講了與service mesh的關(guān)系,通過(guò)此文可以更全面的理解API網(wǎng)關(guān)的作用。

          原文:API Gateways are going through an identity crisis

          這些年來(lái),API網(wǎng)關(guān)正在經(jīng)歷一些身份危機(jī)。

          • 它們是否是集中的、共享的資源,從而促進(jìn)了API對(duì)外部實(shí)體的暴露與治理?
          • 它們是集群入口(ingress)哨兵,從而可以嚴(yán)格控制哪些用戶流量進(jìn)入或離開(kāi)集群?jiǎn)幔?/section>
          • 或者它們根據(jù)自己擁有的客戶端類型,使用某種API結(jié)合膠水來(lái)更簡(jiǎn)潔地表達(dá)API?
          • 當(dāng)然,房間里的大象和我經(jīng)常聽(tīng)到的一個(gè)問(wèn)題:“服務(wù)網(wǎng)格會(huì)使API網(wǎng)關(guān)過(guò)時(shí)嗎?

          房間里的大象:英語(yǔ)習(xí)語(yǔ),指的是一些雖然顯而易見(jiàn),但卻由于可能造成尷尬、爭(zhēng)執(zhí)、觸及敏感或禁忌等原因被人刻意忽視的事情。

          一些背景

          隨著技術(shù)發(fā)展日新月異,整個(gè)行業(yè)通過(guò)技術(shù)和架構(gòu)模式進(jìn)行快速洗牌,如果你說(shuō)“所有這些都使我頭大”,也可以理解。在本文中,我希望總結(jié)出“ API網(wǎng)關(guān)”的不同身份,闡明公司中的哪些群體可以使用API網(wǎng)關(guān)(他們正在嘗試解決的問(wèn)題),并重新關(guān)注這些首要原則。理想情況下,在本文結(jié)束時(shí),您將更好地了解API基礎(chǔ)架構(gòu)在不同層級(jí)、對(duì)不同團(tuán)隊(duì)的作用,同時(shí)明白如何從每個(gè)層級(jí)獲得最大價(jià)值。

          在深入探討之前,讓我們先明確API一詞的含義。

          我對(duì)API的定義:

          一個(gè)明確定義和目的型接口,通過(guò)網(wǎng)絡(luò)調(diào)用,使軟件開(kāi)發(fā)人員能夠以受控且方便的方式,對(duì)組織內(nèi)的數(shù)據(jù)和功能進(jìn)行編程訪問(wèn)。

          這些接口抽象了實(shí)現(xiàn)它們的技術(shù)架構(gòu)細(xì)節(jié)。對(duì)于這些設(shè)計(jì)的網(wǎng)絡(luò)端點(diǎn),我們希望獲得一定程度的文檔、使用指南、穩(wěn)定性和向后兼容性。

          相反,僅僅因?yàn)槲覀兛梢酝ㄟ^(guò)網(wǎng)絡(luò)與另一軟件進(jìn)行通信,并不一定意味著遠(yuǎn)程端點(diǎn)就是符合此定義的API。許多系統(tǒng)相互通信,但是通信發(fā)生更加隨意,并在與耦合和其他因素之間進(jìn)行權(quán)衡。

          我們創(chuàng)建API來(lái)為業(yè)務(wù)的各個(gè)部分提供周全的抽象,以實(shí)現(xiàn)新的業(yè)務(wù)功能以及偶然的創(chuàng)新。

          在談?wù)揂PI網(wǎng)關(guān)時(shí),首先要提到的是API管理。

          API管理

          許多人從API管理的角度考慮API網(wǎng)關(guān)。這是公平的。但是,讓我們快速看一下此類網(wǎng)關(guān)的功能。

          通過(guò)API Management,我們?cè)噲D解決“何時(shí)公開(kāi)現(xiàn)有的API供他人使用”的問(wèn)題,如何跟蹤誰(shuí)使用這些API,實(shí)施關(guān)于允許誰(shuí)使用它們的政策,建立安全流程來(lái)進(jìn)行身份驗(yàn)證和授權(quán)許可,同時(shí)創(chuàng)建一個(gè)服務(wù)目錄(該目錄可在設(shè)計(jì)時(shí)使用以促進(jìn)API使用,并為有效治理奠定基礎(chǔ))。

          我們想解決“我們擁有要與他人共享,但要按我們的條款共享這些現(xiàn)有的、經(jīng)過(guò)精心設(shè)計(jì)的API ”的問(wèn)題。

          API管理也做得很好,它允許用戶(潛在的API使用者)進(jìn)行自助服務(wù),簽署不同的API使用計(jì)劃(請(qǐng)考慮:在給定時(shí)間范圍內(nèi),在指定價(jià)格點(diǎn)上,每個(gè)端點(diǎn)每個(gè)用戶的調(diào)用次數(shù))。有能力完成這些管理功能的基礎(chǔ)架構(gòu)就是網(wǎng)關(guān)(API流量所經(jīng)過(guò)的)。在網(wǎng)關(guān)層,我們可以執(zhí)行身份驗(yàn)證,速率限制,指標(biāo)收集,其它策略執(zhí)行等操作。

          API Management Gateway

          基于API網(wǎng)關(guān)的API管理軟件示例:

          • Google Cloud Apigee
          • Red Hat 3Scale
          • Mulesoft
          • Kong

          在這個(gè)級(jí)別上,我們考慮的是API(如上定義)是如何最好地管理和允許對(duì)其進(jìn)行訪問(wèn)。我們不是在考慮服務(wù)器,主機(jī)、端口、容器甚至服務(wù)(另一個(gè)定義不明確的詞)。

          API管理(以及它們相應(yīng)的網(wǎng)關(guān))通常被作為由“平臺(tái)團(tuán)隊(duì)”、“集成團(tuán)隊(duì)”或其它API基礎(chǔ)架構(gòu)團(tuán)隊(duì)所擁有的、嚴(yán)格控制的共享基礎(chǔ)架構(gòu)。

          需要注意的一件事:我們要小心,別讓任何業(yè)務(wù)邏輯進(jìn)入這一層。如前一段所述,API管理是共享的基礎(chǔ)結(jié)構(gòu),但是由于我們的API流量經(jīng)過(guò)了它,因此它傾向于重新創(chuàng)建“大包大攬的全能型”(認(rèn)為是企業(yè)服務(wù)總線)網(wǎng)關(guān),這會(huì)導(dǎo)致我們必須與之協(xié)調(diào)來(lái)更改我們的服務(wù)。從理論上講,這聽(tīng)起來(lái)不錯(cuò)。實(shí)際上,這最終可能成為組織的瓶頸。有關(guān)更多信息,請(qǐng)參見(jiàn)這篇文章:具有ESB,API管理和Now…Service Mesh的應(yīng)用程序網(wǎng)絡(luò)功能?

          集群入口

          為了構(gòu)建和實(shí)現(xiàn)API,我們將重點(diǎn)放在代碼、數(shù)據(jù)、生產(chǎn)力框架等方面。但是,要想使這些事情中的任何一個(gè)產(chǎn)生價(jià)值,就必須對(duì)其進(jìn)行測(cè)試,部署到生產(chǎn)中并進(jìn)行監(jiān)控。當(dāng)我們開(kāi)始部署到云原生平臺(tái)時(shí),我們開(kāi)始考慮部署、容器、服務(wù)、主機(jī)、端口等,并構(gòu)建可在此環(huán)境中運(yùn)行的應(yīng)用程序。我們可能正在設(shè)計(jì)工作流(CI)和管道(CD),以利用云平臺(tái)快速遷移、更改、將其展示在客戶面前等等。

          在這種環(huán)境中,我們可能會(huì)構(gòu)建和維護(hù)多個(gè)集群來(lái)承載我們的應(yīng)用程序,并且需要某種方式來(lái)訪問(wèn)這些群集中的應(yīng)用程序和服務(wù)。以Kubernetes為例思考。我們可能會(huì)通過(guò)Kubernetes Ingress來(lái)訪問(wèn)Kubernetes集群(集群中的其它所有內(nèi)容都無(wú)法從外部訪問(wèn))。這樣,我們就可以通過(guò)定義明確的入口點(diǎn)(例如域/虛擬主機(jī)、端口、協(xié)議等),嚴(yán)格控制哪些流量可以進(jìn)入(甚至離開(kāi))我們的集群。

          在這個(gè)級(jí)別上,我們可能希望某種“ingress網(wǎng)關(guān)”成為允許請(qǐng)求和消息進(jìn)入群集的流量哨兵。在這個(gè)級(jí)別上,您的思考更多是“我的集群中有此服務(wù),我需要集群外的人能夠調(diào)用它”。這可能是服務(wù)(公開(kāi)API)、現(xiàn)有的整體組件、gRPC服務(wù),緩存、消息隊(duì)列、數(shù)據(jù)庫(kù)等。有些人選擇將其稱為API網(wǎng)關(guān),而且實(shí)際上可能會(huì)做比流量的入口/出口更多的事情,但重點(diǎn)是這個(gè)層級(jí)的問(wèn)題是屬于集群操作級(jí)別的。

          Cluster Ingress Gateway

          這些類型的ingress實(shí)現(xiàn)的示例包括:Envoy Proxy 及其基礎(chǔ)上的項(xiàng)目包括:

          • Datawire Ambassador
          • Solo.io Gloo
          • Heptio Contour

          基于其他反向代理/負(fù)載均衡器構(gòu)建的其它組件:

          • HAProxy
          • OpenShift’s Router (based on HAProxy)
          • NGINX
          • Traefik
          • Kong

          此層級(jí)的集群入口控制器由平臺(tái)團(tuán)隊(duì)操作,但是,這部分基礎(chǔ)架構(gòu)通常與更加去中心化的、自助服務(wù)工作流相關(guān)聯(lián)(正如您對(duì)云原生平臺(tái)所期望的那樣)。參見(jiàn)The “GitOps” workflow as described by the good folks at Weaveworks

          API網(wǎng)關(guān)模式

          關(guān)于“ API網(wǎng)關(guān)”一詞的另一種擴(kuò)展是我在聽(tīng)到該術(shù)語(yǔ)時(shí)通常想到的,它是與API網(wǎng)關(guān)模式最相似的。Chris Richardson在其“微服務(wù)模式”一書(shū)第8章很好地介紹了這種用法。我強(qiáng)烈建議您將此書(shū)用于此模式和其他微服務(wù)模式學(xué)習(xí)資料??稍谒膍icroservices.io網(wǎng)站API Gatway Pattern可以進(jìn)行快速瀏覽。簡(jiǎn)而言之,API網(wǎng)關(guān)模式是針對(duì)不同類別的消費(fèi)者來(lái)優(yōu)化API的使用。這個(gè)優(yōu)化涉及一個(gè)API間接訪問(wèn)。您可能會(huì)聽(tīng)到另一個(gè)代表API網(wǎng)關(guān)模式的術(shù)語(yǔ)是“前端的后端”,其中“前端”可以是字符終端(UI)、移動(dòng)客戶端、IoT客戶端甚至其它服務(wù)/應(yīng)用程序開(kāi)發(fā)人員。

          在API網(wǎng)關(guān)模式中,我們明顯簡(jiǎn)化了一組API的調(diào)用,以模擬針對(duì)特定用戶、客戶端或使用者的“應(yīng)用程序”內(nèi)聚API。回想一下,當(dāng)我們使用微服務(wù)構(gòu)建系統(tǒng)時(shí),“應(yīng)用程序”的概念就消失了。API網(wǎng)關(guān)模式有助于恢復(fù)此概念。這里的關(guān)鍵是API網(wǎng)關(guān),一旦實(shí)現(xiàn),它將成為客戶端和應(yīng)用程序的API,并負(fù)責(zé)與任何后端API和其他應(yīng)用程序網(wǎng)絡(luò)端點(diǎn)(不滿足上述API定義的端點(diǎn))進(jìn)行通信。

          與上一節(jié)中的Ingress控制器不同,此API網(wǎng)關(guān)更接近開(kāi)發(fā)人員的視角,而較少關(guān)注哪些端口或服務(wù)暴露以供集群外使用的方面。此“ API網(wǎng)關(guān)”也不同于我們管理現(xiàn)有API的API管理視角。此API網(wǎng)關(guān)將對(duì)后端的調(diào)用聚合在一起,這可能會(huì)公開(kāi)API,但也可能是與API描述較少的東西,例如對(duì)舊系統(tǒng)的RPC調(diào)用,使用不符合“ REST”的協(xié)議的調(diào)用(如通過(guò)HTTP但不使用JSON),gRPC,SOAP,GraphQL、websockets和消息隊(duì)列。這種類型的網(wǎng)關(guān)也可用來(lái)進(jìn)行消息級(jí)轉(zhuǎn)換、復(fù)雜的路由、網(wǎng)絡(luò)彈性/回退以及響應(yīng)的聚合。

          如果您熟悉REST API的Richardson Maturity模型,就會(huì)發(fā)現(xiàn)相比Level 1–3,實(shí)現(xiàn)了API網(wǎng)關(guān)模式的API網(wǎng)關(guān)來(lái)集成了更多的Level 0請(qǐng)求(及其之間的所有內(nèi)容)。

          https://martinfowler.com/articles/richardsonMaturityModel.html

          這些類型的網(wǎng)關(guān)實(shí)現(xiàn)仍需要解決速率限制、身份驗(yàn)證/授權(quán)、斷路、度量收集、流量路由等問(wèn)題。這些類型的網(wǎng)關(guān)可以在集群邊緣用作集群入口控制器,也可以在集群內(nèi)部用作應(yīng)用程序網(wǎng)關(guān)。

          API Gateway Pattern

          此類API網(wǎng)關(guān)的示例包括:

          • Spring Cloud Gateway
          • Solo.io Gloo
          • Netflix Zuul
          • IBM-Strongloop Loopback/Microgateway

          也可以使用更通用的編程或集成語(yǔ)言/框架(例如:

          • Apache Camel
          • Spring Integration
          • Ballerina.io
          • Eclipse Vert.x
          • NodeJS

          由于這種類型的API網(wǎng)關(guān)與應(yīng)用和服務(wù)的開(kāi)發(fā)緊密相關(guān),因此我們希望開(kāi)發(fā)人員能夠參與幫助指定API網(wǎng)關(guān)公開(kāi)的API,了解所涉及的任何聚合邏輯以及快速測(cè)試和更改此API基礎(chǔ)架構(gòu)的能力。我們還希望運(yùn)維人員或SRE對(duì)API網(wǎng)關(guān)的安全性、彈性和可觀察性配置有一些意見(jiàn)。這種層級(jí)的基礎(chǔ)架構(gòu)還必須適應(yīng)不斷發(fā)展的、按需的、自助服務(wù)開(kāi)發(fā)人員工作流??梢酝ㄟ^(guò)查看GitOps模型獲取更多這方面信息。

          進(jìn)入服務(wù)網(wǎng)格(Service Mesh)

          在云基礎(chǔ)架構(gòu)上運(yùn)行服務(wù)架構(gòu)的一部分難點(diǎn)是,如何在網(wǎng)絡(luò)中構(gòu)建正確級(jí)別的可觀察性和控制。在解決此問(wèn)題的先前迭代中,我們使用了應(yīng)用程序庫(kù)和希望的開(kāi)發(fā)人員治理來(lái)實(shí)現(xiàn)此目的。但是,在大規(guī)模和多種開(kāi)發(fā)語(yǔ)言環(huán)境下,服務(wù)網(wǎng)格技術(shù)的出現(xiàn)提供了更好的解決方案。服務(wù)網(wǎng)格通過(guò)透明地實(shí)現(xiàn)為平臺(tái)及其組成服務(wù)帶來(lái)以下功能:

          • 服務(wù)到服務(wù)(即東西向流量)的彈性
          • 安全性包括最終用戶身份驗(yàn)證、相互TLS、服務(wù)到服務(wù)RBAC / ABAC
          • 黑盒服務(wù)的可觀察性(專注于網(wǎng)絡(luò)通信),例如請(qǐng)求/秒、請(qǐng)求延遲、請(qǐng)求失敗、熔斷事件、分布式跟蹤等
          • 服務(wù)到服務(wù)速率限制,配額執(zhí)行等

          精明的讀者會(huì)認(rèn)識(shí)到,API網(wǎng)關(guān)和服務(wù)網(wǎng)格在功能上似乎有所重疊。服務(wù)網(wǎng)格的目的是通過(guò)在L7透明地解決所有服務(wù)/應(yīng)用程序的這些問(wèn)題。換句話說(shuō),服務(wù)網(wǎng)格希望融合到服務(wù)中(實(shí)際上它的代碼并沒(méi)有嵌入到服務(wù)中)。另一方面,API網(wǎng)關(guān)位于服務(wù)網(wǎng)格以及應(yīng)用程序之上(L8?)。服務(wù)網(wǎng)格為服務(wù)、主機(jī)、端口、協(xié)議等(東西向流量)之間的請(qǐng)求流帶來(lái)了價(jià)值。它們還可以提供基本的集群入口功能,以將某些此功能引入南北向。但是,這不應(yīng)與API網(wǎng)關(guān)可以帶來(lái)北/南流量的功能相混淆。(一個(gè)在集群的南北向和一個(gè)是在一組應(yīng)用程序的南北向)

          Service Mesh和API網(wǎng)關(guān)在某些方面在功能上重疊,但是在它們?cè)诓煌瑢用婊パa(bǔ),分別負(fù)責(zé)解決不同的問(wèn)題。理想的解決方案是將每個(gè)組件(API管理、API網(wǎng)關(guān)、服務(wù)網(wǎng)格)合適的安置到您的解決方案中,并根據(jù)需要在各組件間建立良好的邊界(或在不需要時(shí)排除它們)。同樣重要的是找到適合去中心化開(kāi)發(fā)人員和運(yùn)營(yíng)工作流程的這些工具實(shí)現(xiàn)。即使這些不同組件的術(shù)語(yǔ)和標(biāo)識(shí)存在混淆,我們也應(yīng)該依靠基本原理,并了解這些組件在我們的體系結(jié)構(gòu)中帶來(lái)的價(jià)值,從而來(lái)確定它們?nèi)绾为?dú)立存在和互補(bǔ)并存。

          作者:蚊子squirrel

          來(lái)源:jianshu.com/p/9fab0982c6bb

          版權(quán)申明:內(nèi)容來(lái)源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無(wú)法確認(rèn),我們都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并表示歉意。謝謝!


          END


          順便給大家推薦一個(gè)GitHub項(xiàng)目,這個(gè) GitHub 整理了上千本常用技術(shù)PDF,絕大部分核心的技術(shù)書(shū)籍都可以在這里找到,

          GitHub地址:https://github.com/javadevbooks/books

          Gitee地址:https://gitee.com/javadevbooks/books

          電子書(shū)已經(jīng)更新好了,你們需要的可以自行下載了,記得點(diǎn)一個(gè)star,持續(xù)更新中..



          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产91娱乐乱伦视频 | 一本色道综合久久欧美日韩精品 | 臭小子啊轻点灬太粗太长了的视频 | 91爱爱官网 | 蜜桃AV无码乱码精品 |