加入星計劃,您可以享受以下權益:

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

體驗下,大廠的API網關!

04/22 13:50
3631
閱讀需 16 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

大家好,我是技術UP主小傅哥。

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

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

后來才知道,因為之前用過一些開源組件,在流程承載方面發(fā)生過重大事故。因為是開源的組件,沒法對每一個細節(jié)進行把控。而全部的自研,就會有非常強的把控力度,各個細節(jié)實現(xiàn)都可以做具體的優(yōu)化方案,同時所有的組件自研,還可以更好的串聯(lián)起來使用。另外還有一個點,就是這些開源的組件,更容易被攻擊,如果有漏洞要升級,那公司全升級一遍的成本,不亞于一次大規(guī)模裁員的賠償!當然,一些中小廠還是用市面開源的就好,因為自研的成本并不低!

那么為了讓大家更好的了解下大廠的API,今天我們就來體驗一款大廠開發(fā)的元原生API網關。有了這樣一個學習,在看API網關項目,也會更清楚自己在做什么。

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

獨立運行版,用于測試

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

部署測試

Higress 是一套比較龐大的工程,為了讓大家可以方便的體驗到,小傅哥會教給大家怎么做一個獨立的部署和配置網關負載。此外文末還提供了基于 Netty 的 API網關學習教程。

一、Higress 介紹

Higress 是基于阿里內部兩年多的 Envoy Gateway 實踐沉淀,以開源 Istio 與 Envoy 為核心構建的云原生 API 網關。Higress 實現(xiàn)了安全防護網關、流量網關、微服務網關三層網關合一,可以顯著降低網關的部署和運維成本。

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

接下來,小傅哥就帶著大家安裝部署體驗下。什么東西都是上手了才有感覺。

二、環(huán)境部署

    云服務器:2c4g 最低,我是用的 2c8g 體驗的。https://yun.xfg.plus - 價格實惠?;A環(huán)境:Docker、Portainer、Git 【在小傅哥的 bugstack.cn 路書中都有講解安裝和使用】

    整體安裝完會如圖所示。

1. 軟件準備

1.1 方式一

在你的 Linux 服務器,通過 Git 命令檢出安裝項目;

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

手動下載;https://github.com/higress-group/higress-standalone/archive/refs/heads/main.zip 在通過 ssh 的 sftp 工具上傳到云服務器。之后解壓 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 其他的默認值就可以,直接回車。執(zhí)行過程會自動檢測,nacos 的安裝和刪掉。這些不用操作。如果執(zhí)行中遇到了失敗或者自己選擇錯了,可以重新執(zhí)行 ./configure.sh -r
2.2 執(zhí)行 startup.sh
[root@lavm-aqhgp9nber?bin]#?./startup.sh
    這一步就傻瓜式的了,直接就可以安裝完成。

3. 安裝 nginx

通過安裝 Nginx 模擬出2個請求服務地址,如果你部署 SpringBoot 提供出 HTTP 接口也是可以。

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

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

三、網關配置

1. 服務來源

這里要配置的是,通過 https://xxx/api 訪問到網關服務后,要訪問到哪些服務來源上。

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

2. 路由配置

路由配置的作用就是指定你通過網關地址負載到對應的目標服務上,這里我們會讓 http://117.72.37.243/api/ 請求負載到2個 nginx 上。

    通過路由api地址,訪問到目標服務。這里可以配置的玩法還有很多,可以自己在嘗試下。

3. 策略配置

    你可以為訪問自己的路由接口配置對應的插件,比如重寫URl、跨域、限流等各項功能。

四、服務驗證

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

    首先,我在 Nginx 的 HTML 中,配置了2個不同的請求結果,一個 01、一個 02之后,訪問網關地址加上 /api 接下來訪問就會看到結果的變化了。

有了這個大廠網關的體驗,大家就了解了一套網關是如何使用的,作用是什么啦。接下來,如果感興趣技術的積累,想擴展下自己,也可以學習一套網關代碼的實現(xiàn)。

五、網關學習

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

1. 項目架構

整個API網關設計核心內容分為這么五塊;

第一塊:是關于通信的協(xié)議處理,也是網關最本質的處理內容。這里需要借助 NIO 框架 Netty 處理 HTTP 請求,并進行協(xié)議轉換泛化調用到 RPC 服務返回數據信息。

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

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

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

第五塊:管理后臺,作為一個網關項目少不了一個與之對應的管理后臺,用戶接口的注冊維護、mock測試、日志查詢、流量整形、網關管理等服務。

2. 項目流程

API網關除了基礎的功能模塊以外,還需要重點考慮負載均衡的設計,只有這樣才能被橫向擴展支撐高并發(fā)的吞吐量。所在負載設計這塊,小傅哥也是花了不少的時間來構建,讓負載可以被動態(tài)的管理。

這是一整套API網關的核心通信模型結構圖,以API網關算力的多套服務注冊到網關中心開始,拉取RPC應用接口并完成映射HTTP調用操作。最終允許用戶通過 Nginx 訪問和路徑重寫的負載均衡管理,調用到具體的網關算力中執(zhí)行協(xié)議解析和RPC接口的泛化調用并最終返回結果數據?!?就這套架構設計學習完,就夠你晉升到P7崗了!

3. 項目目錄

第 1 部分 - 通信組件

    第1章:HTTP請求會話協(xié)議處理第2章:代理RPC泛化調用第3章:分治處理會話流程第4章:將連接(RPCHTTP其他)抽象為數據源第5章:HTTP請求參數解析第6章:引入執(zhí)行器封裝服務調用第7章:權限認證組件(Shiro+Jwt)第8章:網關會話鑒權處理第16章:網絡通信配置提取

第 2 部分 - 注冊中心

    第9章:網關注冊中心服務初始創(chuàng)建第10章:網關注冊中心庫表結構設計第11章:網關注冊算力節(jié)點領域服務實現(xiàn)第12章:網關注冊服務接口領域服務實現(xiàn)第14章:網關映射聚合信息查詢實現(xiàn)

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

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

第 4 部分 - 鏡像文件

    第19章:網關引擎打包鏡像部署

第 5 部分 - 服務注冊

    第20章:服務注冊組件搭建采集接口信息第21章:應用服務接口注冊到注冊中心

第 6 部分 - 運營后臺

    第23章:網關運營管理后臺框架搭建第24章:前后端分離應用的跨域接口調用

第 7 部分 - 擴展功能

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

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

六、加入學習

注意,本項目也只是【星球:碼農會鎖】眾多項目中的1個,其他的項目還包括:大營銷、OpenAI 應用、API網關、Lottery抽獎、IM通信、SpringBoot Starter 組件開發(fā)、IDEA Plugin 插件開發(fā)等,并還有開源項目學習。加入后,從星球課程入口進入,組件項目 - 支付SDK設計和開發(fā)

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

這樣成體系的全量項目學習,放在一些平臺售賣,至少都要上千塊。但小傅哥的星球,只需要100多,就可以獲得大廠架構師對你手把手教學!

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
MOC3021SR2M 1 Rochester Electronics LLC 1 CHANNEL TRIAC OUTPUT OPTOCOUPLER, SURFACE MOUNT, DIP-6
$0.68 查看
FM25CL64B-GA 1 Ramtron International Corporation Memory Circuit, 8KX8, CMOS, PDSO8, GREEN, MS-012AA, SOIC-8
$4.61 查看
B39431R964H110 1 TDK Corporation 1-Port Saw Resonator, 434.15MHz Nom, ROHS COMPLIANT, SMD, DCC6E, 6 PIN
暫無數據 查看

相關推薦

電子產業(yè)圖譜

作者小傅哥多年從事一線互聯(lián)網Java開發(fā),從19年開始編寫工作和學習歷程的技術匯總,旨在為大家提供一個較清晰詳細的核心技能學習文檔。如果本文能為您提供幫助,請給予支持(關注、點贊、分享)!