最近微服務架構在項目中的應用越來越多,我們知道在微服務架構風格中,一個大應用被拆分成為了多個小的服務系統提供出來,這些小的系統他們可以自成體系,也就是說這些小系統可以擁有自己的數據庫,框架甚至語言等,這些小系統通常以提供 Rest Api 風格的接口來被 H5, Android, IOS 以及第三方應用程序調用。
? ?? ???但是在UI上進行展示的時候,我們通常需要在一個界面上展示很多數據,這些數據可能來自于不同的微服務中,舉個例子。
? ?? ???在一個電商系統中,查看一個商品詳情頁,這個商品詳情頁包含商品的標題,價格,庫存,評論等,這些數據對于后端來說可能是位于不同的微服務系統之中,可能我后臺的系統是這樣來拆分我的服務的:
? ?? ???產品服務 – 負責提供商品的標題,描述,規格等。
? ?? ???價格服務 – 負責對產品進行定價,價格策略計算,促銷價等。
? ?? ???庫存服務 – 負責產品庫存。/ @0 x9 \( X( z% v: O: m; ?! c
? ?? ???評價服務 – 負責用戶對商品的評論,回復等。
? ?? ???現在,商品詳情頁需要從這些微服務中拉取相應的信息,問題來了?
? ?? ???問題由于我們使用的服務系統架構,所以沒辦法像傳統單體應用一樣依靠數據庫的 join 查詢來得到最終結果,那么如何才能訪問各個服務呢?9 K” t# ~5 z: h/ x( T2 b
? ?? ???按照微服務設計的指導原則,我們的微服務可能存在下面的問題:) r0 w7 \0 ???o/ d6 ?5 d+ o
? ?? ???服務使用了多種協議,因為不同的協議有不同的應場景用,比如可能同時使用 HTTP, AMQP, gRPC 等。+ z! r- F??o) P8 j??n, _
? ?? ???服務的劃分可能隨著時間而變化。
? ?? ???服務的實例或者Host+端口可能會動態的變化。
? ?? ???那么,對于前端的UI需求也可能會有以下幾種:+ W’ u” s2 ~$ _1 B’ H2 y: D; J
? ?? ???粗粒度的API,而微服務通常提供的細粒度的API,對于UI來說如果要調用細粒度的api可能需要調用很多次,這是個不小的問題。??c3 C/ e! Y6 S# G% g2 H9 O
? ?? ???不同的客戶端設備可能需要不同的數據。Web,H5,APP
? ?? ???不同設備的網絡性能,對于多個api來說,這個訪問需要轉移的服務端會快得多
? ?? ???以上,就是我們構建微服務的過程中可能會遇到的問題。那么如何解決呢?( y3 C8 A- ^% [4 d! i1 z! D
? ?? ???這種情況下, API 網關(API Gataway)誕生了。% S* E) k” z% N/ S6 e
? ?? ???API 網關API網關是一個服務器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統內部架構,為每個客戶端提供一個定制的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜態響應處理。
? ?? ???API網關方式的核心要點是,所有的客戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。通常,網關也是提供REST/HTTP的訪問API。服務端通過API-GW注冊和管理服務。5 |* N6 @) I/ g, H# l0 l
? ?? ???API網關網關的價值:$ D# h. D6 _! ?4 `
? ?? ???網關層對外部和內部進行了隔離,保障了后臺服務的安全性。
? ?? ???對外訪問控制由網絡層面轉換成了運維層面,減少變更的流程和錯誤成本
? ?? ???減少客戶端與服務的耦合,服務可以獨立發展。通過網關層來做映射。
? ?? ???通過網關層聚合,減少外部訪問的頻次,提升訪問效率。/ L& C0 y0 `0 |) a; d- S
? ?? ???節約后端服務開發成本,減少上線風險。
? ?? ???為服務熔斷,灰度發布,線上測試提供簡單方案。9 a3 H/ g) X# A2 y% r
? ?? ???當然現在市面上的Api網關開源項目,有以下項目9 l9 u2 `” ?! H& k
? ?? ???Tyk:Tyk是一個開放源碼的API網關,它是快速、可擴展和現代的。Tyk提供了一個API管理平臺,其中包括API網關、API分析、開發人員門戶和API管理面板。Try 是一個基于Go實現的網關服務。1 F’ S- F0 x% x
? ?? ???Kong:Kong是一個可擴展的開放源碼API Layer(也稱為API網關或API中間件)。Kong 在任何RESTful API的前面運行,通過插件擴展,它提供了超越核心平臺的額外功能和服務。+ U5 v2 v8 f0 h4 W/ }$ ~
? ?? ???Orange:和Kong類似也是基于OpenResty的一個API網關程序,是由國人開發的。
? ?? ???Netflix zuul:Zuul是一種提供動態路由、監視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基于JVM路由和服務端的負載均衡器。
? ?? ???apiaxle: Nodejs 實現的一個 API 網關。
? ?? ???api-umbrella: Ruby 實現的一個 API 網關。6 |$ Y% ?0 o4 Y2 `+ p0 C& C
? ?? ???這套課程就給大家介紹一下 nignx + lua方式的網關框架,也是很多公司常用的網關框架
〖課程目錄〗:1 a7 J0 C’ L; U% j5 O; R
? ?? ???第1節漫談網關架構: @1 D7 Y2 L’ _7 O
? ?? ???第2節網關技術選型
? ?? ???第3節nginx下載安裝
? ?? ???第4節正向代{過}{濾}理、反向代{過}{濾}理
? ?? ???第5節nginx命令、信號控制& F, W??c: d2 O6 Y1 U
? ?? ???第6節nginx平滑升級
? ?? ???第7節nginx配置文件說明
? ?? ???第8節nginx配置連接數
? ?? ???第9節nginx虛擬主機5 {/ M+ B” _9 b
? ?? ???第10節nginx日志以及切割* q7 Z7 Y- q: `, x” y7 S& j
? ?? ???第11節nginx的location詳解
? ?? ???第12節nginx的負載均衡
? ?? ???第13節nginx的echo模塊安裝
? ?? ???第14節openresty背景介紹
? ?? ???第15節openresty安裝
? ?? ???第16節openresty的helloworld
? ?? ???第17節lua介紹以及helloworld
? ?? ???第18節lua基本語法一8 i: U” X4 L/ \: _” f2 @+ O4 }
? ?? ???第19節lua基本語法二
? ?? ???第20節lua基本語法三0 [, g0 w% M/ U! X
? ?? ???第21節lua基本語法四
? ?? ???第22節lua運算符
? ?? ???第23節lua控制結構一7 T3 u8 }??n” @% g+ J1 a
? ?? ???第24節lua控制結構二
? ?? ???第25節lua的正則表達式
? ?? ???第26節lua的string操作
? ?? ???第27節lua的table操作
? ?? ???第28節lua變量% f” D) H. K8 U1 t9 ^+ d
? ?? ???第29節lua時間操作
? ?? ???第30節lua模塊
? ?? ???第31節lua元表1 [0 R3 r??@$ a7 ?! [- u??}
? ?? ???第32節lua面向對象* T1 W+ o& @; [‘ G
? ?? ???第33節openresty中使用lua
? ?? ???第34節openresty中使用json模塊2 [: g1 f3 Y. m0 x” R
? ?? ???第35節openresty中使用redis模塊
? ?? ???第36節openresty中封裝redis操作, G8 Z- A: A4 r
? ?? ???第37節openresty中使用mysql0 ], F$ V8 K% B! V! Q: q: \% }
? ?? ???第38節lua發起http請求2 [$ e. _??h9 x9 s
? ?? ???第39節openresty中使用http模塊
? ?? ???第40節openresty中使用全局緩存
? ?? ???第41節openresty執行流程
? ?? ???第42節openresty執行詳解之初始化階段
? ?? ???第43節openresty執行詳解之重寫賦值階段
? ?? ???第44節openresty執行詳解之重寫url階段
? ?? ???第45節openresty執行詳解之訪問階段
? ?? ???第46節openresty執行詳解之內容階段# c0 o3 x5 s+ B0 f% \” M. D
? ?? ???第47節openresty執行詳解之響應階段
? ?? ???第48節openresty實現訪問頻率控制/ p6 ~6 o% \8 Z??p& k
? ?? ???第49節openresty實現黑名單控制. ^: x1 r; u1 W1 d7 G
? ?? ???第50節openresty實現接口簽名驗證
? ?? ???第51節openresty實現網關框架7 u- Y5 {/ g+ b$ x??|
? ?? ???第52節openresty實現網關主入口0 K. q5 a4 G1 W’ H, I: c: f
? ?? ???第53節openresty實現網關插件可配置
? ?? ???第54節openresty實現網關插件加載) I6 c! t6 s; H6 [9 Z7 Q’ O! Y
? ?? ???第55節openresy實現網關之簽名驗證插件+ l’ N’ ]. Q: @# J* S3 F
? ?? ???第56節openresy實現網關之黑名單插件
? ?? ???第57節openresty實現網關之頻率插件4 H% p2 q/ J1 d, b$ r
? ?? ???第58節網關框架總結