課程學(xué)習(xí)地址:
http://www.xuetuwuyou.com/course/386
課程出自學(xué)途無憂網(wǎng):http://www.xuetuwuyou.com
? ?最近 微服務(wù)架構(gòu)在項目中的應(yīng)用越來越多,我們知道在微服務(wù)架構(gòu)風(fēng)格中,一個大應(yīng)用被拆分成為了多個小的服務(wù)系統(tǒng)提供出來,這些小的系統(tǒng)他們可以自成體系,也就是說這些小系統(tǒng)可以擁有自己的數(shù)據(jù)庫,框架甚至語言等,這些小系統(tǒng)通常以提供 Rest Api 風(fēng)格的接口來被 H5, Android, IOS 以及第三方應(yīng)用程序調(diào)用。
? ? ? ? 但是在UI上進(jìn)行展示的時候,我們通常需要在一個界面上展示很多數(shù)據(jù),這些數(shù)據(jù)可能來自于不同的微服務(wù)中,舉個例子。
? ? ? ? 在一個電商系統(tǒng)中,查看一個商品詳情頁,這個商品詳情頁包含商品的標(biāo)題,價格,庫存,評論等,這些數(shù)據(jù)對于后端來說可能是位于不同的微服務(wù)系統(tǒng)之中,可能我后臺的系統(tǒng)是這樣來拆分我的服務(wù)的:
? ? ? ? 1、產(chǎn)品服務(wù) - 負(fù)責(zé)提供商品的標(biāo)題,描述,規(guī)格等。
? ? ? ? 2、價格服務(wù) - 負(fù)責(zé)對產(chǎn)品進(jìn)行定價,價格策略計算,促銷價等。
? ? ? ? 3、庫存服務(wù) - 負(fù)責(zé)產(chǎn)品庫存。
? ? ? ? 4、評價服務(wù) - 負(fù)責(zé)用戶對商品的評論,回復(fù)等。
? ? ? ? 現(xiàn)在,商品詳情頁需要從這些微服務(wù)中拉取相應(yīng)的信息,問題來了?
? ? ? ? 問題
? ? ? ? 由于我們使用的服務(wù)系統(tǒng)架構(gòu),所以沒辦法像傳統(tǒng)單體應(yīng)用一樣依靠數(shù)據(jù)庫的 join 查詢來得到最終結(jié)果,那么如何才能訪問各個服務(wù)呢?
? ? ? ? 按照微服務(wù)設(shè)計的指導(dǎo)原則,我們的微服務(wù)可能存在下面的問題:
? ? ? ? 服務(wù)使用了多種協(xié)議,因為不同的協(xié)議有不同的應(yīng)場景用,比如可能同時使用 HTTP, AMQP, gRPC 等。
? ? ? ? 服務(wù)的劃分可能隨著時間而變化。
? ? ? ? 服務(wù)的實例或者Host+端口可能會動態(tài)的變化。
? ? ? ? 那么,對于前端的UI需求也可能會有以下幾種:
? ? ? ? 粗粒度的API,而微服務(wù)通常提供的細(xì)粒度的API,對于UI來說如果要調(diào)用細(xì)粒度的api可能需要調(diào)用很多次,這是個不小的問題。
? ? ? ? 不同的客戶端設(shè)備可能需要不同的數(shù)據(jù)。Web,H5,APP
? ? ? ? 不同設(shè)備的網(wǎng)絡(luò)性能,對于多個api來說,這個訪問需要轉(zhuǎn)移的服務(wù)端會快得多
? ? ? ? 以上,就是我們構(gòu)建微服務(wù)的過程中可能會遇到的問題。那么如何解決呢?
? ? ? ? 這種情況下, API 網(wǎng)關(guān)(API Gataway)誕生了。
? ? ? ? API 網(wǎng)關(guān)
? ? ? API網(wǎng)關(guān)是一個服務(wù)器,是系統(tǒng)的唯一入口。從面向?qū)ο笤O(shè)計的角度看,它與外觀模式類似。API網(wǎng)關(guān)封裝了系統(tǒng)內(nèi)部架構(gòu),為每個客戶端提供一個定制的API。它可能還具有其它職責(zé),如身份驗證、監(jiān)控、負(fù)載均衡、緩存、請求分片與管理、靜態(tài)響應(yīng)處理。
? ? ? ? API網(wǎng)關(guān)方式的核心要點是,所有的客戶端和消費端都通過統(tǒng)一的網(wǎng)關(guān)接入微服務(wù),在網(wǎng)關(guān)層處理所有的非業(yè)務(wù)功能。通常,網(wǎng)關(guān)也是提供REST/HTTP的訪問API。服務(wù)端通過API-GW注冊和管理服務(wù)。
? ? ? API網(wǎng)關(guān)網(wǎng)關(guān)的價值:
? ? ? 網(wǎng)關(guān)層對外部和內(nèi)部進(jìn)行了隔離,保障了后臺服務(wù)的安全性。
? ? ? 對外訪問控制由網(wǎng)絡(luò)層面轉(zhuǎn)換成了運(yùn)維層面,減少變更的流程和錯誤成本
? ? ? 減少客戶端與服務(wù)的耦合,服務(wù)可以獨立發(fā)展。通過網(wǎng)關(guān)層來做映射。
? ? ? 通過網(wǎng)關(guān)層聚合,減少外部訪問的頻次,提升訪問效率。
? ? ? 節(jié)約后端服務(wù)開發(fā)成本,減少上線風(fēng)險。
? ? ? 為服務(wù)熔斷,灰度發(fā)布,線上測試提供簡單方案。
? ? ? 當(dāng)然現(xiàn)在市面上的Api網(wǎng)關(guān)開源項目,有以下項目
? ? ? 1、Tyk:Tyk是一個開放源碼的API網(wǎng)關(guān),它是快速、可擴(kuò)展和現(xiàn)代的。Tyk提供了一個API管理平臺,其中包括API網(wǎng)關(guān)、API分析、開發(fā)人員門戶和API管理面板。Try 是一個基于Go實現(xiàn)的網(wǎng)關(guān)服務(wù)。
? ? ? 2、Kong:Kong是一個可擴(kuò)展的開放源碼API Layer(也稱為API網(wǎng)關(guān)或API中間件)。Kong 在任何RESTful API的前面運(yùn)行,通過插件擴(kuò)展,它提供了超越核心平臺的額外功能和服務(wù)。
? ? ? 3、Orange:和Kong類似也是基于OpenResty的一個API網(wǎng)關(guān)程序,是由國人開發(fā)的。
? ? ? 4、Netflix zuul:Zuul是一種提供動態(tài)路由、監(jiān)視、彈性、安全性等功能的邊緣服務(wù)。Zuul是Netflix出品的一個基于JVM路由和服務(wù)端的負(fù)載均衡器。
? ? ? 5、apiaxle: Nodejs 實現(xiàn)的一個 API 網(wǎng)關(guān)。
? ? ? 6、api-umbrella: Ruby 實現(xiàn)的一個 API 網(wǎng)關(guān)。
? ? ? 老顧這系列課程就給大家介紹一下nignx + lua方式的網(wǎng)關(guān)框架,也是很多公司常用的網(wǎng)關(guān)框架