apigateway apisix架構設計——總結

2020-12-24 蝸牛OR兔子

最近在github上發現了一個國人發起的api gateway項目(https://github.com/apache/apisix),自測下來性能相比於kong(https://docs.konghq.com)在不加載插件4個worker的時候要高1.6倍左右,加載插件後性能高五倍多。

apisix歸根結底還是openresty的擴展,功能以及使用方式和kong類似,支持插件式開發流程,官方介紹:

Apache APISIX 是一個動態、實時、高性能的 API 網關,基於 Nginx 網絡庫和 etcd 實現, 提供負載均衡、動態上遊、灰度發布、服務熔斷、身份認證、可觀測性等豐富的流量管理功能。 可以使用 Apache APISIX 來處理傳統的南北向流量,以及服務間的東西向流量, 也可以當作k8s ingress controller 來使用。

下面主要闡述一下apisix架構設計、結構以及一些API使用總結(如何配置route,service服務發現)

架構圖如下:

apisix architecture official

APISIX 定義的結構主要有以下幾種:

consumer

獲取 consumer_id:通過授權認證,即可自然獲取到對應的 Consumer id,它是 Consumer 對象的唯一識別標誌。獲取 Consumer 上綁定的 Plugin 或 Upstream 信息:完成對不同 Consumer 做不同配置的效果。Upstream 是虛擬主機抽象,對給定的多個服務節點按照配置規則進行負載均衡。Upstream 的地址信息可以直接配置到 Route(或 Service) 上,當 Upstream 有重複時,就需要用「引用」方式避免重複了

upstream調度算法:

chash或者wrr可採用type欄位配置

curl http://127.0.0.1:9080/apisix/admin/upstreams/100 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '

{"type":"roundrobin", ##chash or roundrobin"nodes": {"10.123.16.48:80":1,"127.0.0.2:80":2}, "name": "ups100", "checks":{},"timeout": {"connect":15, "send":15, "read":15} }

其他根據請求header、consumer等可以用hash on進行hash shcedule

"upstream": {"key": "sid","type ": "chash","hash_on ": "cookie","nodes ": {"127.0.0.1:1981": 1}} 示例

還可以配置健康檢查:

"upstream": {"nodes": {"39.97.63.215:80": 1}"type": "roundrobin","retries": 2,"checks": {"active": {"http_path": "/status","host": "foo.com","healthy": {"interval": 2, "successes": 1},"unhealthy": {"interval": 1, "http_failures": 2}}}}

Service

某類 API 的抽象(也可以理解為一組 Route 的抽象)。它通常與上遊服務抽象upstream是一一對應的,Route 與 Service 之間,通常是 N:1 的關係,為什麼有了upstream還需要Service,在我理解是為了解決插件重複設置的問題。

Route 字面意思就是路由,通過定義一些規則來匹配客戶端的請求,然後根據匹配結果加載並執行相應的插件,並把請求轉發給到指定 Upstream。或者說是client直接接觸的API

Route 中主要包含三部分內容:匹配規則(比如 uri、host、remote_addr 等),插件配置(限流限速等)和上遊信息。

apisix配置服務發現流程:

註冊域名服務到consul集群:curl -X PUT -d '{"Datacenter":"wh_test","Node":"server-node03","Address": "192.168.1.48", "Service":{"Service":"web","port":80}}' http://localhost:8500/v1/catalog/registerdig測試服務DNS:dig @consul-IP -p 8600 web.service.consul SRVapisix(consul客戶端)dnsmasq配置consul後綴域名解析server=/consul/consul-IP#8600到/etc/dnsmasq.d/resolv.conf或/etc/dnsmasq.conf;重啟dnsmasq註冊route到apisix:(refer to: https://gist.github.com/moonming/32aed4922ea428db1abfe2edfd730b3a)curl http://127.0.0.1:9080/apisix/admin/routes/8 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{"uri": "/healthz","upstream": {"type": "roundrobin", "nodes": {"web.service.consul:80": 1}}}'更多配置參考官網或者下面總結(https://blog.csdn.net/l5678go/article/details/108941689), https可以通過新增loader選項至ssl配置,加載其他語言的動態連結庫,如C語言的so可參考aline模塊

相關焦點

  • 阿里技術官架構使用總結:Spring+MyBatis源碼+Tomcat架構解析等
    今天就由阿里一線P8架構師揭秘,對他使用的技術進行了一個總結,這個PDF總結主要涉及到Spring、MyBatis源碼以及Tomcat等,希望能夠幫助到大家,對自己有一定提升。需要PDF版的朋友,直接私信我【架構】即可免費領取哦~01 Spring源碼深度解析第一部分 核心實現第1章 Spring整體架構和環境搭建
  • 什麼是微內核架構設計?
    阿里妹導讀:作為一名Java程式設計師,相信同學們都聽說過微內核架構設計,也有自己的理解。那麼微內核是如何被提出來的?微內核在作業系統內核的設計中又有什麼作用?本文從插件化(Plug-in)架構的角度來詮釋微內核架構設計,通過微內核架構和微服務架構的對比,分享其對微服務設計的參考意義。
  • SWE.2軟體架構設計
    ,識別哪些軟體需求應該分配給軟體的哪些要素,並根據已定義的標準評估軟體架構設計。;及 6)對軟體架構設計達成一致並與所有受影響的各方進行溝通。 最佳實踐:SWE.2.BP1:開發軟體架構設計。開發並編制軟體架構設計,該設計指定了與功能和非功能軟體需求相關的軟體要素。[outcome1] 注1:軟體被分解為跨越適當的層次級別的要素,直到詳細設計中描述的軟體組件(軟體架構設計的最低層次的要素)。
  • Redesign:Lofter的信息架構改版設計
    值得注意的是,在你開始著手做改版工作的時候很容易陷入其中而忘記思路,所以需要一個清晰的方法指導你完成整個改版設計而不迷失自己。除了上篇文章提到的在設計方案之前要做好需求分析,競品分析之外,還需要靈活運用各個研究方法,比較卡片分析法,用戶訪談,尼爾森十項原則等等,這些方法很好的幫助你完成你的設計,也讓你的設計更專業有理可循。什麼是信息架構?
  • 15 年架構設計經驗:我眼中的那些優秀架構師
    所以我面試的時候,就從他做過架構設計的項目出發,摘了幾個具體的點去深度溝通。 然而,當我真的圍繞「架構師」職責去考察時,卻發現,他對「架構師」的理解,還停留在接到需求後,依據產品設計給出實現的階段。對於接下來的模塊分解、代碼重構、技術選型、性能優化等方面,雖然他有所了解和接觸,但實在太過皮毛,缺乏體系化的理解。
  • 大數據架構流程圖
    平臺數據架構流程圖標準大數據平臺架構,標準大數據平臺架構,大數據平臺架構,數據倉庫,數據集市,大數據平臺層級結構,數據挖掘,舉報,包含該模版的分享。數據架構設計(數據架構組) 概述 總體描述 相對於業務架構和應用架構,數據架構在總體架構中處於基礎和核心地位。
  • 軟體項目實訓及課程設計指導——系統設計中的系統架構設計示例
    軟體項目實訓及課程設計指導——軟體系統設計中的系統架構設計示例1、軟體系統概要設計中所涉及的主要設計內容和工作過程(1)在軟體應用系統項目的系統概要設計工作中,首先是要完成軟體系統的總體架構設計及系統的分層設計,然後再利用UML包視圖體現出軟體系統架構設計的最終結果
  • SCA軟體架構設計理念分析
    本文主要分析Apache Tuscany開源項目 (http://incubator.apache.org/tuscany/)中的SCA設計架構;因為我們不能滿足於會用,而從這些大師們的作品中汲取營養,知其然,也要知其所以然,當我們面對需求(比如說SCA規範),都擁有同樣的語言功底,如何設計一個開放性,可擴展性的架構,就是一個挑戰。
  • 從Elasticsearch來看分布式系統架構設計
    這篇文章中,重點會討論下分布式數據系統的設計,比如分布式存儲系統,分布式搜索系統,分布式分析系統等。  我們先來簡單看下Elasticsearch的架構。  Elasticsearch 集群架構  Elasticsearch是一個非常著名的開源搜索和分析系統,目前被廣泛應用於網際網路多種領域中,尤其是以下三個領域特別突出。
  • 因為產品架構設計變了
    表面上還是互動設計、視覺設計不一樣了,底層邏輯是產品的架構設計變了。本文作者將圍繞產品架構設計展開三方面的分析,希望對你有幫助。當前市場中的很多產品形態,與剛進入市場的時候完全不一樣了。表面上看,互動設計和視覺設計都不一樣了;但從底層邏輯上看,產品的信息架構、目標和業務量級有著翻天覆地的變化。
  • (全文收藏)電能路由器設計自動化綜述:設計流程架構和遺傳算法
    電力系統及發電設備安全控制和仿真國家重點實驗室(清華大學電機系)的研究人員袁立強、陸子賢、孫建寧、段任之、趙爭鳴,在2020年第18期《電工技術學報》上撰文,在系統總結當前主流的電力電子系統的設計流程和設計軟體架構的基礎上,分析了遺傳算法解決電力電子設計自動化問題的適用性,總結了電能路由器設計自動化潛在的問題和挑戰,並給出相應的建議。
  • 典型的MCU+DC-DC架構的移動電源設計
    典型的MCU+DC-DC架構的移動電源設計 李倩 發表於 2018-07-11 15:54:14 PD快充的發展 PD全稱PowerDelivery,
  • 業務變化不息,架構演進不止 第四屆領域驅動設計峰會線上開啟
    作為軟體架構設計新的潮流,領域驅動設計(Domain Driven Design,簡稱DDD)強調業務和技術的統一性,為複雜領域軟體工程的設計決策提供實踐框架,幫助企業不斷拓展數位化業務。領域驅動設計峰會(DDD Conference)是由國內領域驅動設計(DDD)思想和實踐的領軍者——ThoughtWorks的架構諮詢師們組織發起,希望為國內的領域驅動設計(DDD) 實踐者們提供一個互相交流、分享自己團隊的成功經驗的平臺,使得領域驅動設計(DDD)的架構思想能夠在國內被更多人所認知,從而形成更大的規模效應。
  • 閱讀架構和權限方面的書籍,更好的輔助設計產品
    第四本:《Web信息架構——設計大型網站》可以較系統的建立網站信息架構設計的思想。對思考如何設計一個大型網站比較有幫助。信息架構,注意這幾個詞所涉及的知識。 第五本:《高性能網站建設》,對web前端架構做了非常好的講解。
  • Uber下一代支付平臺的系統架構設計
    新系統和架構的優勢基於作業/訂單的系統對於運行餘額和用戶實體的記帳來說,基於交易的系統很難擴展。跟蹤和執行零和原則是很困難的。我們的新架構現在使用基於作業/訂單的系統。每份作業都代表著一次拼車旅行或吃飯/送餐。由於調整、獎勵、小費等原因,同一份作業可能會有多個訂單。每個訂單都包含多個訂單條目,每個訂單條目代表著進出用戶帳戶的金額。
  • 基於Intranet架構的校園監控系統的方案設計
    打開APP 基於Intranet架構的校園監控系統的方案設計 中國安防行業網 發表於 2021-01-07 11:29:28 行業特點
  • RISC和CISC架構6大方面的差異
    有關RISC和CISC的區別方面, 之前就有一些零零碎碎的理解, 這裡再次做一次總結, 以求深入。 指令執行所需要的時鐘周期 在CISC架構中,不同指令所需要的時鐘周期是不同的(比如乘法和加法的周期就不太可能相同)。而RISC架構的處理器,大部分的指令都可以在一個時鐘周期內完成,這應該可以降低指令流水線設計的複雜度。 CISC架構的很多複雜指令都通過CPU內的微碼來完成, 這樣那些微碼比較複雜的指令就需要多個時鐘周期才能完成。
  • 如何基於用戶洞察,設計2B產品的業務架構?
    、產品架構與業務架構」解析, 我們大概釐清了產品在進入正式研發階段的三個關鍵設計成果:業務架構、產品架構和信息架構。022B業務架構設計復盤在前文解析 「產品的信息架構、產品架構與業務架構」 時,我們基於「業務驅動產品」的思路,勾畫出整個O2O平臺的業務框架模型,圖下所圖示。
  • 南航會員日移動端系統架構設計和優化
    2016年隨著移動端做為公司電子直銷戰略的重點,原來的APP架構和研發模式遇到了很大挑戰。2016年每天系統請求超過300萬,會員日當天更是達到高峰,系統處理事務量約1000萬次,尤其是28日會員日凌晨的高並發,基本將系統壓力提升至難以負荷程度,南航移動端架構設計和優化面臨巨大挑戰。
  • 微服務中消息總線架構設計應用
    現有消息總線架構1.下遊消費端必須增加MQ消息消費處理代碼,代碼會比較複雜,開發者必須掌握MQ消費端開發。3.當下遊多個消費端執行需要有先後關係時,比如優惠券發完了才能推送微信消息,這樣就大大增加了系統設計的複雜程度。優化設計針對以上幾個問題對消息總線系統進行了優化設計,看下圖: