加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、Higress 介紹
    • 二、環(huán)境部署
    • 三、網(wǎng)關(guān)配置
    • 四、服務(wù)驗(yàn)證
    • 五、網(wǎng)關(guān)學(xué)習(xí)
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

體驗(yàn)下,大廠的API網(wǎng)關(guān)!

2024/04/22
3597
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

作者:小傅哥,博客:https://bugstack.cn

大家好,我是技術(shù)UP主小傅哥。

還是在22年的時(shí)候,小傅哥做了一套基于 Netty 協(xié)議轉(zhuǎn)換和通信API網(wǎng)關(guān),分享給伙伴們學(xué)習(xí)使用,增加一些業(yè)務(wù)開(kāi)發(fā)以外的知識(shí)積累。不過(guò)很多伙伴都問(wèn)過(guò)小傅哥,為啥要自研網(wǎng)關(guān)呢?SpringCloud Gateway 不就可以用嗎?那你知道為什么自研嗎?

不少伙伴問(wèn)為啥自研, 但其實(shí)從我進(jìn)入互聯(lián)網(wǎng)大廠,核心的分布式技術(shù)框架,幾乎就全部都是公司自研。從 rpc、mq、緩存組件(配合redis集群)、配置中心、分庫(kù)分表、任務(wù)調(diào)度、全鏈路監(jiān)控,再到我們提到的 API 網(wǎng)關(guān),全部的都是自研。

后來(lái)才知道,因?yàn)橹坝眠^(guò)一些開(kāi)源組件,在流程承載方面發(fā)生過(guò)重大事故。因?yàn)槭情_(kāi)源的組件,沒(méi)法對(duì)每一個(gè)細(xì)節(jié)進(jìn)行把控。而全部的自研,就會(huì)有非常強(qiáng)的把控力度,各個(gè)細(xì)節(jié)實(shí)現(xiàn)都可以做具體的優(yōu)化方案,同時(shí)所有的組件自研,還可以更好的串聯(lián)起來(lái)使用。另外還有一個(gè)點(diǎn),就是這些開(kāi)源的組件,更容易被攻擊,如果有漏洞要升級(jí),那公司全升級(jí)一遍的成本,不亞于一次大規(guī)模裁員的賠償!當(dāng)然,一些中小廠還是用市面開(kāi)源的就好,因?yàn)樽匝械某杀静⒉坏停?/p>

那么為了讓大家更好的了解下大廠的API,今天我們就來(lái)體驗(yàn)一款大廠開(kāi)發(fā)的元原生API網(wǎng)關(guān)。有了這樣一個(gè)學(xué)習(xí),在看API網(wǎng)關(guān)項(xiàng)目,也會(huì)更清楚自己在做什么。

    • 官網(wǎng):https://higress.io/zh-cn/源碼:https://github.com/alibaba/higress部署:https://github.com/higress-group/higress-standalone -

獨(dú)立運(yùn)行版,用于測(cè)試

    • 案例:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-higress -

部署測(cè)試

Higress 是一套比較龐大的工程,為了讓大家可以方便的體驗(yàn)到,小傅哥會(huì)教給大家怎么做一個(gè)獨(dú)立的部署和配置網(wǎng)關(guān)負(fù)載。此外文末還提供了基于 Netty 的 API網(wǎng)關(guān)學(xué)習(xí)教程。

一、Higress 介紹

Higress 是基于阿里內(nèi)部?jī)赡甓嗟?Envoy Gateway 實(shí)踐沉淀,以開(kāi)源 Istio 與 Envoy 為核心構(gòu)建的云原生 API 網(wǎng)關(guān)。Higress 實(shí)現(xiàn)了安全防護(hù)網(wǎng)關(guān)、流量網(wǎng)關(guān)、微服務(wù)網(wǎng)關(guān)三層網(wǎng)關(guān)合一,可以顯著降低網(wǎng)關(guān)的部署和運(yùn)維成本。

    生產(chǎn)等級(jí);支持每秒請(qǐng)求量達(dá)數(shù)十萬(wàn)級(jí)的大規(guī)模場(chǎng)景。徹底擺脫 reload 引起的流量抖動(dòng),配置變更毫秒級(jí)生效且業(yè)務(wù)無(wú)感。平滑演進(jìn);支持 Nacos/Zookeeper/Eureka 等多種注冊(cè)中心,可以不依賴 K8s Service 進(jìn)行服務(wù)發(fā)現(xiàn),支持非容器架構(gòu)平滑演進(jìn)到云原生架構(gòu)。同時(shí)支持 Nginx、ServiceMesh。這些方面是非常重要的,也就是你之前部署的到各個(gè)方面的服務(wù),都可以被 Higress 統(tǒng)一管理,這也是我們?cè)O(shè)計(jì)網(wǎng)關(guān)的目的。便于擴(kuò)展;提供 Wasm、Lua、進(jìn)程外三種插件擴(kuò)展機(jī)制,支持多語(yǔ)言編寫(xiě)插件,生效粒度支持全局級(jí)、域名級(jí),路由級(jí)。插件支持熱更新,變更插件邏輯和配置都對(duì)流量無(wú)損。

接下來(lái),小傅哥就帶著大家安裝部署體驗(yàn)下。什么東西都是上手了才有感覺(jué)。

二、環(huán)境部署

    云服務(wù)器:2c4g 最低,我是用的 2c8g 體驗(yàn)的。https://yun.xfg.plus - 價(jià)格實(shí)惠。基礎(chǔ)環(huán)境:Docker、Portainer、Git 【在小傅哥的 bugstack.cn 路書(shū)中都有講解安裝和使用】

    整體安裝完會(huì)如圖所示。

1. 軟件準(zhǔn)備

1.1 方式一

在你的 Linux 服務(wù)器,通過(guò) Git 命令檢出安裝項(xiàng)目;

git?clone?https://github.com/higress-group/higress-standalone.git
1.2 方式二

手動(dòng)下載;https://github.com/higress-group/higress-standalone/archive/refs/heads/main.zip 在通過(guò) ssh 的 sftp 工具上傳到云服務(wù)器。之后解壓 unzip

2. 安裝 higress

2.1 執(zhí)行 configure.sh
[root@lavm-aqhgp9nber?github]#?cd?higress-standalone-main/bin/
[root@lavm-aqhgp9nber?bin]#?ls
base.sh??configure.sh??logs.sh??reset.sh??shutdown.sh??startup.sh??status.sh??update.sh
[root@lavm-aqhgp9nber?bin]#?./configure.sh
    執(zhí)行 ./configure.sh 后,注意選擇 nacos 其他的默認(rèn)值就可以,直接回車。執(zhí)行過(guò)程會(huì)自動(dòng)檢測(cè),nacos 的安裝和刪掉。這些不用操作。如果執(zhí)行中遇到了失敗或者自己選擇錯(cuò)了,可以重新執(zhí)行 ./configure.sh -r
2.2 執(zhí)行 startup.sh
[root@lavm-aqhgp9nber?bin]#?./startup.sh
    這一步就傻瓜式的了,直接就可以安裝完成。

3. 安裝 nginx

通過(guò)安裝 Nginx 模擬出2個(gè)請(qǐng)求服務(wù)地址,如果你部署 SpringBoot 提供出 HTTP 接口也是可以。

    • 上傳到服務(wù)器端執(zhí)行腳本

docker-compose -f nginx-docker-compose.yml up -d

三、網(wǎng)關(guān)配置

1. 服務(wù)來(lái)源

這里要配置的是,通過(guò) https://xxx/api 訪問(wèn)到網(wǎng)關(guān)服務(wù)后,要訪問(wèn)到哪些服務(wù)來(lái)源上。

    服務(wù)來(lái)源支持非常多的類型,包括;Nacos、Zookeeper、Consul、Eureka、固定地址、DNS 域名。這里小傅哥選擇固定地址配置。分別配置了 nginx-01、nginx-02 這樣我們配置路由的時(shí)候可以負(fù)載到這2個(gè)地址。

2. 路由配置

路由配置的作用就是指定你通過(guò)網(wǎng)關(guān)地址負(fù)載到對(duì)應(yīng)的目標(biāo)服務(wù)上,這里我們會(huì)讓 http://117.72.37.243/api/ 請(qǐng)求負(fù)載到2個(gè) nginx 上。

    通過(guò)路由api地址,訪問(wèn)到目標(biāo)服務(wù)。這里可以配置的玩法還有很多,可以自己在嘗試下。

3. 策略配置

    你可以為訪問(wèn)自己的路由接口配置對(duì)應(yīng)的插件,比如重寫(xiě)URl、跨域、限流等各項(xiàng)功能。

四、服務(wù)驗(yàn)證

    地址:http://117.72.37.243/api/ - 你需要換成自己的IP地址

    首先,我在 Nginx 的 HTML 中,配置了2個(gè)不同的請(qǐng)求結(jié)果,一個(gè) 01、一個(gè) 02之后,訪問(wèn)網(wǎng)關(guān)地址加上 /api 接下來(lái)訪問(wèn)就會(huì)看到結(jié)果的變化了。

有了這個(gè)大廠網(wǎng)關(guān)的體驗(yàn),大家就了解了一套網(wǎng)關(guān)是如何使用的,作用是什么啦。接下來(lái),如果感興趣技術(shù)的積累,想擴(kuò)展下自己,也可以學(xué)習(xí)一套網(wǎng)關(guān)代碼的實(shí)現(xiàn)。

五、網(wǎng)關(guān)學(xué)習(xí)

除了業(yè)務(wù)開(kāi)發(fā),小傅哥自己也是非常感興趣于這樣的網(wǎng)關(guān)技術(shù)組件的實(shí)現(xiàn),所以在日常的工作中也積累了很多網(wǎng)關(guān)的設(shè)計(jì)。后來(lái)在22年做了一套輕量的網(wǎng)關(guān)系統(tǒng),把核心的內(nèi)核邏輯實(shí)現(xiàn)出來(lái)讓大家學(xué)習(xí)。幫助了很多伙伴學(xué)習(xí)項(xiàng)目后找到了不錯(cuò)的工作。

1. 項(xiàng)目架構(gòu)

整個(gè)API網(wǎng)關(guān)設(shè)計(jì)核心內(nèi)容分為這么五塊;

第一塊:是關(guān)于通信的協(xié)議處理,也是網(wǎng)關(guān)最本質(zhì)的處理內(nèi)容。這里需要借助 NIO 框架 Netty 處理 HTTP 請(qǐng)求,并進(jìn)行協(xié)議轉(zhuǎn)換泛化調(diào)用到 RPC 服務(wù)返回?cái)?shù)據(jù)信息。

第二塊:是關(guān)于注冊(cè)中心,這里需要把網(wǎng)關(guān)通信系統(tǒng)當(dāng)做一個(gè)算力,每部署一個(gè)網(wǎng)關(guān)服務(wù),都需要向注冊(cè)中心注冊(cè)一個(gè)算力。而注冊(cè)中心還需要接收 RPC 接口的注冊(cè),這部分可以是基于 SDK 自動(dòng)掃描注冊(cè)也可以是人工介入管理。當(dāng) RPC 注冊(cè)完成后,會(huì)被注冊(cè)中心經(jīng)過(guò)AHP權(quán)重計(jì)算分配到一組網(wǎng)關(guān)算力上進(jìn)行使用。

第三塊:是關(guān)于路由服務(wù),每一個(gè)注冊(cè)上來(lái)的Netty通信服務(wù),都會(huì)與他對(duì)應(yīng)提供的分組網(wǎng)關(guān)相關(guān)聯(lián),例如:wg/(a/b/c)/user/... a/b/c 需要匹配到 Nginx 路由配置上,以確保不同的接口調(diào)用請(qǐng)求到對(duì)應(yīng)的 Netty 服務(wù)上。PS:如果對(duì)應(yīng)錯(cuò)誤或者為啟動(dòng),可能會(huì)發(fā)生類似B站事故。

第四塊:責(zé)任鏈下插件模塊的調(diào)用,鑒權(quán)、授信、熔斷、降級(jí)、限流、切量等,這些服務(wù)雖然不算是網(wǎng)關(guān)的定義下的內(nèi)容,但作為共性通用的服務(wù),它們通常也是被放到網(wǎng)關(guān)層統(tǒng)一設(shè)計(jì)實(shí)現(xiàn)和使用的。

第五塊:管理后臺(tái),作為一個(gè)網(wǎng)關(guān)項(xiàng)目少不了一個(gè)與之對(duì)應(yīng)的管理后臺(tái),用戶接口的注冊(cè)維護(hù)、mock測(cè)試、日志查詢、流量整形、網(wǎng)關(guān)管理等服務(wù)。

2. 項(xiàng)目流程

API網(wǎng)關(guān)除了基礎(chǔ)的功能模塊以外,還需要重點(diǎn)考慮負(fù)載均衡的設(shè)計(jì),只有這樣才能被橫向擴(kuò)展支撐高并發(fā)的吞吐量。所在負(fù)載設(shè)計(jì)這塊,小傅哥也是花了不少的時(shí)間來(lái)構(gòu)建,讓負(fù)載可以被動(dòng)態(tài)的管理。

這是一整套API網(wǎng)關(guān)的核心通信模型結(jié)構(gòu)圖,以API網(wǎng)關(guān)算力的多套服務(wù)注冊(cè)到網(wǎng)關(guān)中心開(kāi)始,拉取RPC應(yīng)用接口并完成映射HTTP調(diào)用操作。最終允許用戶通過(guò) Nginx 訪問(wèn)和路徑重寫(xiě)的負(fù)載均衡管理,調(diào)用到具體的網(wǎng)關(guān)算力中執(zhí)行協(xié)議解析和RPC接口的泛化調(diào)用并最終返回結(jié)果數(shù)據(jù)?!?就這套架構(gòu)設(shè)計(jì)學(xué)習(xí)完,就夠你晉升到P7崗了!

3. 項(xiàng)目目錄

第 1 部分 - 通信組件

    第1章:HTTP請(qǐng)求會(huì)話協(xié)議處理第2章:代理RPC泛化調(diào)用第3章:分治處理會(huì)話流程第4章:將連接(RPCHTTP其他)抽象為數(shù)據(jù)源第5章:HTTP請(qǐng)求參數(shù)解析第6章:引入執(zhí)行器封裝服務(wù)調(diào)用第7章:權(quán)限認(rèn)證組件(Shiro+Jwt)第8章:網(wǎng)關(guān)會(huì)話鑒權(quán)處理第16章:網(wǎng)絡(luò)通信配置提取

第 2 部分 - 注冊(cè)中心

    第9章:網(wǎng)關(guān)注冊(cè)中心服務(wù)初始創(chuàng)建第10章:網(wǎng)關(guān)注冊(cè)中心庫(kù)表結(jié)構(gòu)設(shè)計(jì)第11章:網(wǎng)關(guān)注冊(cè)算力節(jié)點(diǎn)領(lǐng)域服務(wù)實(shí)現(xiàn)第12章:網(wǎng)關(guān)注冊(cè)服務(wù)接口領(lǐng)域服務(wù)實(shí)現(xiàn)第14章:網(wǎng)關(guān)映射聚合信息查詢實(shí)現(xiàn)

第 3 部分 - 服務(wù)發(fā)現(xiàn)

    第13章:服務(wù)發(fā)現(xiàn)組件搭建和注冊(cè)網(wǎng)關(guān)連接第15章:服務(wù)配置拉取和組件使用驗(yàn)證第17章:核心通信組件管理和處理服務(wù)映射第18章:容器關(guān)閉監(jiān)聽(tīng)和異常管理第22章:訂閱服務(wù)注冊(cè)消息驅(qū)動(dòng)網(wǎng)關(guān)映射第25章:網(wǎng)關(guān)Nginx負(fù)載模型配置第26章:動(dòng)態(tài)刷新網(wǎng)關(guān)Nginx負(fù)載均衡配置第27章:實(shí)現(xiàn)網(wǎng)關(guān)算力節(jié)點(diǎn)動(dòng)態(tài)負(fù)載功能

第 4 部分 - 鏡像文件

    第19章:網(wǎng)關(guān)引擎打包鏡像部署

第 5 部分 - 服務(wù)注冊(cè)

    第20章:服務(wù)注冊(cè)組件搭建采集接口信息第21章:應(yīng)用服務(wù)接口注冊(cè)到注冊(cè)中心

第 6 部分 - 運(yùn)營(yíng)后臺(tái)

    第23章:網(wǎng)關(guān)運(yùn)營(yíng)管理后臺(tái)框架搭建第24章:前后端分離應(yīng)用的跨域接口調(diào)用

第 7 部分 - 擴(kuò)展功能

    第28章:網(wǎng)關(guān)組件工程模塊合并第29章:功能完善(算力關(guān)聯(lián)、接口上報(bào)、調(diào)用反饋)

走編程開(kāi)發(fā)這條路,就不能只是做業(yè)務(wù),也要學(xué)習(xí)一些核心組件的實(shí)現(xiàn)方案。公司是公司,個(gè)人是個(gè)人。多學(xué)一些,讓自己的全體系技術(shù)棧積累更加完善,也更有競(jìng)爭(zhēng)力。

六、加入學(xué)習(xí)

注意,本項(xiàng)目也只是【星球:碼農(nóng)會(huì)鎖】眾多項(xiàng)目中的1個(gè),其他的項(xiàng)目還包括:大營(yíng)銷、OpenAI 應(yīng)用、API網(wǎng)關(guān)、Lottery抽獎(jiǎng)、IM通信、SpringBoot Starter 組件開(kāi)發(fā)、IDEA Plugin 插件開(kāi)發(fā)等,并還有開(kāi)源項(xiàng)目學(xué)習(xí)。加入后,從星球課程入口進(jìn)入,組件項(xiàng)目 - 支付SDK設(shè)計(jì)和開(kāi)發(fā)

如果大家希望通過(guò)做有價(jià)值的編程項(xiàng)目,提高自己的編程思維和編碼能力,可以加入小傅哥的【星球:碼農(nóng)會(huì)鎖】。加入后解鎖所有往期項(xiàng)目,還可以學(xué)習(xí)后續(xù)新開(kāi)發(fā)的項(xiàng)目。

這樣成體系的全量項(xiàng)目學(xué)習(xí),放在一些平臺(tái)售賣(mài),至少都要上千塊。但小傅哥的星球,只需要100多,就可以獲得大廠架構(gòu)師對(duì)你手把手教學(xué)!

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
RMLV0808BGSB-4S2#AA0 1 Renesas Electronics Corporation 8Mb Advanced LPSRAM (1024k word x 8bit), TSOP(44), /Tray

ECAD模型

下載ECAD模型
$6.54 查看
ABS07AIG-32.768KHZ-9-T 1 Abracon Corporation CRYSTAL 32.768KHZ 9PF SMD

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看
SDINBDG4-8G-XI1 1 Western Digital Corp Flash,
$56.03 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

作者小傅哥多年從事一線互聯(lián)網(wǎng)Java開(kāi)發(fā),從19年開(kāi)始編寫(xiě)工作和學(xué)習(xí)歷程的技術(shù)匯總,旨在為大家提供一個(gè)較清晰詳細(xì)的核心技能學(xué)習(xí)文檔。如果本文能為您提供幫助,請(qǐng)給予支持(關(guān)注、點(diǎn)贊、分享)!