0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

微服務(wù)為什么要用到API網(wǎng)關(guān)?

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2023-04-14 09:17 ? 次閱讀

作者程小蘭,API7.ai 技術(shù)工程師,Apache APISIX Contributor。

什么是微服務(wù)

微服務(wù)架構(gòu)(通常簡稱為微服務(wù))是指開發(fā)應(yīng)用所用的一種架構(gòu)形式。通過微服務(wù),可將大型應(yīng)用分解成多個獨立的組件,其中每個組件都有各自的責(zé)任領(lǐng)域。

在處理一個用戶請求時,基于微服務(wù)的應(yīng)用可能會調(diào)用許多內(nèi)部微服務(wù)來共同生成其響應(yīng)。微服務(wù)是互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展的結(jié)果,互聯(lián)網(wǎng)業(yè)務(wù)的飛速發(fā)展導(dǎo)致系統(tǒng)的架構(gòu)也在不斷地發(fā)生變化,總體來說,系統(tǒng)的架構(gòu)大致經(jīng)歷了:單體應(yīng)用架構(gòu)—> SOA 架構(gòu)—>微服務(wù)架構(gòu)的演變,具體發(fā)展歷程和各自的優(yōu)缺點如下表所示。

架構(gòu)
類型
簡介 優(yōu)點 缺點


應(yīng)


構(gòu)
將所有的功能代碼打包成一個服務(wù)。 1. 架構(gòu)簡單,項目開發(fā)和維護成本低。 所有模塊耦合在一起,比較有利于小型項目的開發(fā)和維護;但是,對于大型項目來說卻存在問題,比如:
1. 項目各模塊之間過于耦合,一個模塊的性能問題可能導(dǎo)致整個項目的不可用;
2. 項目的擴展性差。
SOA

構(gòu)
中文意思為 “面向服務(wù)的架構(gòu)”,通常包含多個服務(wù),
一個服務(wù)通常以獨立的形式存在于操作系統(tǒng)進程中,服務(wù)之間通過相互依賴或者通過通信機制來完成通信的,
最終提供一系列的功能。
1. 系統(tǒng)集成:站在系統(tǒng)的角度,解決企業(yè)系統(tǒng)間的通信問題,把原先散亂、無規(guī)劃的系統(tǒng)間的網(wǎng)狀結(jié)構(gòu),梳理成規(guī)整、可治理的系統(tǒng)間星形結(jié)構(gòu);
2. 系統(tǒng)的服務(wù)化:站在功能的角度,把業(yè)務(wù)邏輯抽象成可復(fù)用、可組裝的服務(wù),通過服務(wù)的編排實現(xiàn)業(yè)務(wù)的快速再
3. 業(yè)務(wù)的服務(wù)化:站在企業(yè)的角度,把企業(yè)職能抽象成可復(fù)用、可組裝的服務(wù)。
1. 服務(wù)的中心化,各服務(wù)之間存在依賴關(guān)系,如果某個服務(wù)出現(xiàn)故障可能會造成服務(wù)的雪崩;
2. 服務(wù)之間的依賴與調(diào)用關(guān)系復(fù)雜,測試部署的困難比較大。


務(wù)

構(gòu)
微服務(wù)是在 SOA 上做的升華。微服務(wù)架構(gòu)重點強調(diào)的一個是"業(yè)務(wù)需要徹底的組件化和服務(wù)化",
原有的單個業(yè)務(wù)系統(tǒng)會拆分為多個可以獨立開發(fā)、設(shè)計、
運行的小應(yīng)用。各個小應(yīng)用之間,相互去協(xié)作通信,來完成一個交互和集成,這就是微服務(wù)架構(gòu)。
1. 去中心化;
2. 通過服務(wù)實現(xiàn)組件化;
3. 按業(yè)務(wù)能力來劃分服務(wù)和開發(fā)團隊;
4. 基礎(chǔ)設(shè)施自動化(Devops、自動化部署)。
1. 開發(fā)的成本比較高;
2. 會引發(fā)服務(wù)的容錯性問題;
3. 會引發(fā)數(shù)據(jù)的一致性問題;
4. 會涉及分布式事務(wù)。

因此,微服務(wù)是互聯(lián)網(wǎng)發(fā)展的必然結(jié)果,很多傳統(tǒng)公司的系統(tǒng)架構(gòu)也在逐步微服務(wù)化。但是,隨著互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展,API 的數(shù)量也在劇增,使用網(wǎng)關(guān)對API統(tǒng)一管理也將面臨挑戰(zhàn),選擇一個更強大的 API 網(wǎng)關(guān),可以有效地增強系統(tǒng)的監(jiān)控、容災(zāi)、鑒權(quán)和限流等能力。

什么是 API 網(wǎng)關(guān)

API 網(wǎng)關(guān)為客戶與服務(wù)系統(tǒng)之間的交互提供了統(tǒng)一的接口,也是管理請求和響應(yīng)的中心點,選擇一個適合的 API 網(wǎng)關(guān),可以有效地簡化開發(fā)并提高系統(tǒng)的運維與管理效率。API 網(wǎng)關(guān)在微服務(wù)架構(gòu)中是系統(tǒng)設(shè)計的一個解決方案,用來整合各個不同模塊的微服務(wù),統(tǒng)一協(xié)調(diào)服務(wù)。

API 網(wǎng)關(guān)作為一個系統(tǒng)訪問的切面,對外提供統(tǒng)一的入口供客戶端訪問,隱藏系統(tǒng)架構(gòu)實現(xiàn)的細(xì)節(jié),讓微服務(wù)使用更為友好;并集成了一些通用特性(如鑒權(quán)、限流、熔斷),避免每個微服務(wù)單獨開發(fā),提升效率,使系統(tǒng)更加標(biāo)準(zhǔn)化,比如身份驗證、監(jiān)控、負(fù)載均衡、限流、降級與應(yīng)用檢測等功能。

為什么微服務(wù)需要 API 網(wǎng)關(guān)

a07a631c-d9e7-11ed-bfe3-dac502259ad0.pngArchitecture Diagram

如上圖所示,API 網(wǎng)關(guān)作為客戶端和微服務(wù)的中間層,它可以將微服務(wù)以統(tǒng)一的地址對外提供服務(wù),將外部訪問這個地址的流量,根據(jù)適當(dāng)?shù)囊?guī)則路由到內(nèi)部集群中正確的服務(wù)節(jié)點之上,如果沒有 API 網(wǎng)關(guān),流量的出入口則不統(tǒng)一,客戶端就需要知道所有服務(wù)的訪問信息,微服務(wù)的意義將不復(fù)存在,所以,微服務(wù)網(wǎng)關(guān)在微服務(wù)系統(tǒng)架構(gòu)中的存在是必要的。此外,API 網(wǎng)關(guān)在系統(tǒng)的可觀測性、身份鑒權(quán)認(rèn)證、穩(wěn)定性和服務(wù)發(fā)現(xiàn)等方面也會發(fā)揮重要作用。

微服務(wù)遇到的挑戰(zhàn)

微服務(wù)網(wǎng)關(guān)應(yīng)該首先要具備 API 路由能力,微服務(wù)數(shù)量變多,API 數(shù)量急劇增加,網(wǎng)關(guān)還可以根據(jù)具體的場景作為流量過濾器來使用,以提供某些額外可選功能,因此對微服務(wù) API Gateway 提出了更高要求,比如:

可觀測性:在以往的單體應(yīng)用中,排查問題往往通過查看日志定位錯誤信息和異常堆棧;但是在微服務(wù)架構(gòu)中服務(wù)繁多,出現(xiàn)問題時的問題定位變得非常困難;因此,如何監(jiān)控微服務(wù)的運行狀況、當(dāng)出現(xiàn)異常時能快速給出報警,這給開發(fā)人員帶來很大挑戰(zhàn)。

鑒權(quán)認(rèn)證:而微服務(wù)架構(gòu)下,一個應(yīng)用會被拆分成若干個微應(yīng)用,每個微應(yīng)用都需要對訪問進行鑒權(quán),每個微應(yīng)用都需要明確當(dāng)前訪問用戶以及其權(quán)限。尤其當(dāng)訪問來源不只是瀏覽器,還包括其它服務(wù)的調(diào)用時,單體應(yīng)用架構(gòu)下的鑒權(quán)方式就不是特別合適了。在微服務(wù)架構(gòu)下,要考慮外部應(yīng)用接入的場景、用戶 - 服務(wù)的鑒權(quán)、服務(wù) - 服務(wù)的鑒權(quán)等多種鑒權(quán)場景。

系統(tǒng)穩(wěn)定性:若大量請求超過微服務(wù)的處理能力時,可能會將服務(wù)打垮,甚至產(chǎn)生雪崩效應(yīng)、影響系統(tǒng)的整體穩(wěn)定性。

服務(wù)發(fā)現(xiàn):微服務(wù)的分散管理,讓微服務(wù)的負(fù)載均衡的實現(xiàn)也更具有挑戰(zhàn)性。

解決方案

API 網(wǎng)關(guān)作為客戶端和服務(wù)端的中間橋梁,為微服務(wù)系統(tǒng)提供統(tǒng)一的管理機制:

除了基礎(chǔ)的請求分發(fā)、API 管理和條件路由等功能,還包括身份驗證、監(jiān)控報警、調(diào)用鏈追蹤、負(fù)載均衡、限流隔離和熔斷降級。身份認(rèn)證:下圖表示的是微服務(wù)聯(lián)合 API 網(wǎng)關(guān)如何進行身份認(rèn)證的,由圖可見所有請求都通過網(wǎng)關(guān),從而有效地隱藏了微服務(wù)。

a08d7d08-d9e7-11ed-bfe3-dac502259ad0.pngArchitecture Diagram

監(jiān)控報警/調(diào)用鏈追蹤:

API 作為客戶端和服務(wù)端的中間橋梁,是微服務(wù)監(jiān)控的最好載體,API 網(wǎng)關(guān)監(jiān)控功能的主要職責(zé)是及時發(fā)現(xiàn)網(wǎng)關(guān)以及后端服務(wù)器的連接異常,在 API 的監(jiān)控平臺上面用戶可以隨時查看日志信息,監(jiān)控信息,調(diào)用鏈等等,并且主機發(fā)生的任何異常都會自動報警到控制臺。有些網(wǎng)關(guān)甚至可以做到給客戶端和服務(wù)端雙向報警。

a0aaf18a-d9e7-11ed-bfe3-dac502259ad0.pngArchitecture Diagram

限流隔離/熔斷降級:

隨著互聯(lián)網(wǎng)業(yè)務(wù)規(guī)模的增加,系統(tǒng)的并發(fā)度增高,多個服務(wù)之間相互調(diào)用鏈路,一條核心鏈路往往可能調(diào)用十個服務(wù)。如果在鏈路中,某個服務(wù)的 rt(響應(yīng)時間)急劇上升,上游服務(wù)不斷請求,造成惡性循環(huán),上游等待結(jié)果線程數(shù)越多,使得更上游服務(wù)阻塞最終整條鏈路無法使用,從而導(dǎo)致服務(wù)雪崩,所以對入口流量進行整治管理是很有必要的,下圖表示微服務(wù)系統(tǒng)是如何結(jié)合 API 網(wǎng)關(guān)進行限流隔離和熔斷降級的。

a0caef76-d9e7-11ed-bfe3-dac502259ad0.pngArchitecture Diagram

主流網(wǎng)關(guān)選擇

在微服務(wù)領(lǐng)域,有許多開源網(wǎng)關(guān)實現(xiàn),有 NGINX、Kong、Apache APISIX 和 Envoy 等,Java 技術(shù)棧的有 Netfilx Zuul、Spring Cloud Gateway、Soul 等?;蛟S你會問“有了 NGINX 和 Kong,為什么還需要 Apache APISIX?” ,下面做個簡單對比。

網(wǎng)關(guān) 痛點 優(yōu)勢
NGINX 1. 修改配置需要 Reload 才能生效,跟不上云原生的發(fā)展。 1. 老牌應(yīng)用;
2. 穩(wěn)定可靠,久經(jīng)考驗;
3. 高性能。
Apache APISIX 1. 文檔不夠豐富和清晰,需要待改進。 1. Apache 基金會頂級項目;
2. 技術(shù)架構(gòu)更貼合云原生;
3. 性能表現(xiàn)優(yōu)秀;
4. 生態(tài)豐富;

5. 除了支持 Lua 開發(fā)插件外,還支持 Java、Go、Python、Node 等語言插件。
Kong 1. 默認(rèn)使用 PostgreSQL 或 Cassandra 數(shù)據(jù)庫,使得整個架構(gòu)非常臃腫,并且會帶來高可用的問題;
2. 路由使用的是遍歷查找,當(dāng)網(wǎng)關(guān)內(nèi)有超過上千個路由時,它的性能就會出現(xiàn)比較急劇的下降;
3. 一些重要功能是需要付費的。
1. 開源 API 網(wǎng)關(guān)的鼻祖,用戶數(shù)眾多;
2. 性能滿足大部分用戶的需求;
3. 生態(tài)豐富;
4. 支持 Lua 和 Go 開發(fā)插件。
Envoy 1. 使用 C++,二次開發(fā)難度大;
2. 除了 C++ 開發(fā) filter 外,還支持 WASM 和 Lua。
1. CNCF 畢業(yè)項目 更適合服務(wù)網(wǎng)格場景多語言架構(gòu)部署。
Spring Cloud Gateway 1. 雖然 Spring 社區(qū)成熟,但是 Gateway 資源缺乏。 1. 內(nèi)置了非常多的開箱即用功能,并且都可以通過 SpringBoot 配置或者手工編碼鏈?zhǔn)秸{(diào)用來使用;
2. Spring 系列可擴展性強,易配置,可維護性好;
3. Spring 社區(qū)成熟;
4. 簡單易用;
5. 對于 Java 技術(shù)棧來說方便。

總結(jié)

隨著互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)企業(yè)的業(yè)務(wù)也在不斷的飛速發(fā)展,進而導(dǎo)致系統(tǒng)的架構(gòu)也在不斷的發(fā)生著變化,微服務(wù)架構(gòu)已經(jīng)在眾多公司得到廣泛應(yīng)用。隨著微服務(wù)的數(shù)據(jù)越來越多,API 的數(shù)量也越來越多,對于大流量的治理,選擇一個優(yōu)秀的 API 網(wǎng)關(guān)是至關(guān)重要的。

本文列舉了常見網(wǎng)關(guān),并進行對比,列出各自的優(yōu)缺點,如果你正在做 API 網(wǎng)關(guān)的技術(shù)選型,或者你的微服務(wù)系統(tǒng)出現(xiàn)了性能問題,再或者你想搭建一個高效穩(wěn)定的微服務(wù)系統(tǒng),希望本文可以帶給你一定的啟發(fā)。


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 互聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    54

    文章

    11154

    瀏覽量

    103300
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    4469

    瀏覽量

    51102
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1500

    瀏覽量

    62011
  • SOA
    SOA
    +關(guān)注

    關(guān)注

    1

    文章

    288

    瀏覽量

    27474
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    137

    瀏覽量

    7348

原文標(biāo)題:微服務(wù)為什么要用到API網(wǎng)關(guān)?

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    API信息全掌控,方便你的日志管理——阿里云推出API網(wǎng)關(guān)打通日志服務(wù)

    摘要: 近日,阿里云API網(wǎng)關(guān)對接了日志服務(wù),可以輸出用戶在API網(wǎng)關(guān)產(chǎn)生的API調(diào)用日志,目前
    發(fā)表于 02-06 15:24

    微服務(wù)網(wǎng)關(guān)gateway的相關(guān)資料推薦

    目錄微服務(wù)網(wǎng)關(guān) gateway 概述[路由器網(wǎng)關(guān) Zuul 概述]嵌入式 Zuul 反向代理微服務(wù)網(wǎng)關(guān) gateway 概述1、想象一下一個購物應(yīng)用程序的產(chǎn)品詳情頁面展示了指定商品的信息:2、若是
    發(fā)表于 12-23 08:19

    微服務(wù)可靠性設(shè)計

    微服務(wù)化之后,系統(tǒng)分布式部署,傳統(tǒng)單個流程的本地API調(diào)用被拆分成多個微服務(wù)之間的跨網(wǎng)絡(luò)調(diào)用,由于引入了網(wǎng)絡(luò)通信、序列化和反序列化等操作,系統(tǒng)發(fā)生故障的概率提高了很多。微服務(wù)故障,有些
    的頭像 發(fā)表于 02-09 09:21 ?3912次閱讀
    <b class='flag-5'>微服務(wù)</b>可靠性設(shè)計

    微服務(wù)、SOA 和 API三大架構(gòu)優(yōu)勢對比

    在對比微服務(wù)架構(gòu)和面向服務(wù)的架構(gòu)(SOA)時,幾乎不可能在它們彼此的關(guān)系上達(dá)成一致意見。如果應(yīng)用程序編程接口(API) 再加入混戰(zhàn),就會讓理解它們的差異變得更加困難。一些人可能會說這些概念
    發(fā)表于 05-04 16:29 ?1.2w次閱讀
    <b class='flag-5'>微服務(wù)</b>、SOA 和 <b class='flag-5'>API</b>三大架構(gòu)優(yōu)勢對比

    微服務(wù)、SOA 和 API是敵是友?

    在對比微服務(wù)架構(gòu)和面向服務(wù)的架構(gòu)(SOA)時,幾乎不可能在它們彼此的關(guān)系上達(dá)成一致意見。如果應(yīng)用程序編程接口(API) 再加入混戰(zhàn),就會讓理解它們的差異變得更加困難。一些人可能會說這些概念
    的頭像 發(fā)表于 05-06 11:01 ?4727次閱讀
    <b class='flag-5'>微服務(wù)</b>、SOA 和 <b class='flag-5'>API</b>是敵是友?

    基于API 網(wǎng)關(guān)微服務(wù)治理方案

    API網(wǎng)關(guān)層實現(xiàn)這些安全機制,不但提高安全性,也簡化了應(yīng)用服務(wù)的開發(fā)。使開發(fā)人員專注于業(yè)務(wù)應(yīng)用、業(yè)務(wù)服務(wù)的研發(fā),不再考慮基礎(chǔ)能力基礎(chǔ)組件,提升開發(fā)部署的效率,從而提升收益率。
    的頭像 發(fā)表于 02-01 01:05 ?5407次閱讀
    基于<b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>的<b class='flag-5'>微服務(wù)</b>治理方案

    什么是微服務(wù)架構(gòu)_微服務(wù)架構(gòu)的優(yōu)缺點及應(yīng)用

    什么是微服務(wù)架構(gòu) 簡單地說,微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計風(fēng)格, 它的主旨是將一個原本獨立的系統(tǒng)拆分成多個小型服務(wù),這些小型服務(wù)都在各自獨立的進程中運行,
    的頭像 發(fā)表于 06-02 10:03 ?1.7w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b>架構(gòu)_<b class='flag-5'>微服務(wù)</b>架構(gòu)的優(yōu)缺點及應(yīng)用

    實施微服務(wù)架構(gòu):用于構(gòu)建下一代云應(yīng)用程序

      外部接口是用戶/應(yīng)用程序與微服務(wù)交互的入口。實現(xiàn) API 網(wǎng)關(guān),為來自客戶端的所有服務(wù)請求啟用單個入口點。API
    的頭像 發(fā)表于 12-08 16:51 ?731次閱讀

    關(guān)于API網(wǎng)關(guān)策略的知識分享

    近些年隨著云原生和微服務(wù)架構(gòu)的日趨發(fā)展,API 網(wǎng)關(guān)以流量入口的角色在技術(shù)架構(gòu)中扮演著越來越重要的作用。API 網(wǎng)關(guān)主要負(fù)責(zé)接收所有請求的流
    的頭像 發(fā)表于 02-11 10:45 ?1190次閱讀

    基于Traefik自研的微服務(wù)網(wǎng)關(guān)

    數(shù)據(jù)平面主要功能是接入用戶的HTTP請求和微服務(wù)被拆分后的聚合。使用微服務(wù)網(wǎng)關(guān)統(tǒng)一對外暴露后端服務(wù)API和契約,路由和過濾功能正是網(wǎng)關(guān)的核
    的頭像 發(fā)表于 04-16 11:08 ?2635次閱讀

    5種主流API網(wǎng)關(guān)技術(shù)選型

    微服務(wù)近幾年非常火,圍繞微服務(wù)的技術(shù)生態(tài)也比較多,比如微服務(wù)網(wǎng)關(guān)、Docker、Kubernetes等。
    的頭像 發(fā)表于 04-17 10:45 ?1375次閱讀

    為什么需要 API 網(wǎng)關(guān)?

    API 網(wǎng)關(guān)API 全生命周期管理的關(guān)鍵基礎(chǔ)組件,負(fù)責(zé)生產(chǎn)環(huán)境中 API 的配置、發(fā)布、版本回滾、安全、負(fù)載均衡等。API
    的頭像 發(fā)表于 05-04 17:47 ?784次閱讀
    為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>?

    企業(yè)怎么選擇API網(wǎng)關(guān)

    、騰訊公司的QQ開發(fā)平臺、微信開放平臺。 Open API開放平臺必然涉及到客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等,必然會有一個統(tǒng)一的入口進行管理,這正是API網(wǎng)關(guān)可以發(fā)揮作
    的頭像 發(fā)表于 05-23 11:05 ?668次閱讀
    企業(yè)怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    Spring Cloud :打造可擴展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是一個基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動態(tài)路由、請求限流、集成安全性等,使其成為構(gòu)建微服務(wù)架構(gòu)的理想選擇。
    的頭像 發(fā)表于 10-22 10:03 ?527次閱讀
    Spring Cloud :打造可擴展的<b class='flag-5'>微服務(wù)網(wǎng)關(guān)</b>

    設(shè)計微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴展性。你可能會想,我的團隊需不需要采用微服務(wù),設(shè)計微服務(wù)架構(gòu)有哪些原則?本文會給你一些靈感。文章速覽:微服務(wù)設(shè)計的要素
    的頭像 發(fā)表于 11-26 08:05 ?596次閱讀
    設(shè)計<b class='flag-5'>微服務(wù)</b>架構(gòu)的原則