概念介紹
APIGateway是微服務(wù)對外提供服務(wù)的一個屏障,它的核心點在于:
- 屏蔽微服務(wù)之間通過消息隊列算墨、rpc等通信方式,為Web頁面和移動APP提供基于HTTP協(xié)議的RESTful API接口
- 對每一個http業(yè)務(wù)請求進行必要的鑒權(quán)和數(shù)據(jù)完整性、合法性檢查,以減少微服務(wù)的負擔(dān)榨婆,讓微服務(wù)的代碼更純粹
- 微服務(wù)部署體系中,每個微服務(wù)可能會部署多個實例褒侧,Gateway還承擔(dān)著在這些實例中進行負載均衡的功能
- 進行必要的日志輸出良风、監(jiān)控打點等功能颜武,對每一個來自于APP和頁面的http請求,生成一個唯一的trace id拖吼,并將trace id傳導(dǎo)到每一個后續(xù)的微服務(wù)中,以便后續(xù)的查錯和性能調(diào)優(yōu)
- Gateway的每一個http請求都是無狀態(tài)的这吻,采用JWT(Json Web Token)機制實現(xiàn)一個客戶端的請求狀態(tài)信息的傳遞
APIGateway架構(gòu)
訪問控制鏈:
Token(JWT)
JSON Web Token(JWT)是一個非常輕巧的規(guī)范(RFC 7951)吊档。這個規(guī)范允許我們使用JWT在用戶和服務(wù)器之間傳遞安全可靠的信息。
一個JWT實際上就是一個字符串唾糯,它由三部分組成怠硼,頭部、載荷與簽名移怯。
頭部(Header):
JWT需要一個頭部香璃,頭部用于描述關(guān)于該JWT的最基本的信息,例如其類型以及簽名所用的算法等,被表示成一個JSON對象舟误。
{
"typ": "JWT",
"alg": "HS256"
}
載荷(Payload):
JWT中存放數(shù)據(jù)的結(jié)構(gòu)葡秒,被表示成一個JSON對象
{
"iss": "",
"iat": 1441593502,
"exp": 1441594722,
"aud": "www.example.com",
"sub": "",
"from_user": "B",
"target_user": "A"
}
簽名(簽名):
將上述兩部分進行base64編碼,并用對應(yīng)的算法HS256進行加密就可以得到簽名嵌溢,簽名的密鑰眯牧,雙方事先約定。完整的JWT如下:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
Permission 權(quán)限控制
可以基于現(xiàn)有權(quán)限系統(tǒng)對訪問路由權(quán)限進行控制赖草。
Rate Limiting 接口訪問頻次限制
開放接口限制每段時間只能請求一定的次數(shù)学少。限制的單位時間有每小時、每天秧骑;限制的維度有單授權(quán)用戶和單IP版确;部分特殊接口有單獨的請求次數(shù)限制。例如:
- 一個應(yīng)用內(nèi)單授權(quán)用戶每小時只能請求開放接口n次
- 一個應(yīng)用內(nèi)單授權(quán)用戶每天累計只能請求開放接口m次
- 一個IP地址每小時只能請求開放接口x次
這樣的限制可以有效的保障系統(tǒng)的穩(wěn)定和安全乎折,并對應(yīng)緊急情況可以進行接口的熔斷和降級處理绒疗。
Logging 日志系統(tǒng)
基于APIGateway的日志系統(tǒng)優(yōu)勢:
- 設(shè)立統(tǒng)一的應(yīng)用實例標(biāo)識符
- 統(tǒng)一日志規(guī)范,如:使用UTC時間
- 統(tǒng)一的生成請求標(biāo)識符笆檀,方便調(diào)試和排除以及追蹤數(shù)據(jù)流
- 更有效利用聚合工具進行日志管理:GayLog
任務(wù)隊列
APIGateway可以更加可靠的對任務(wù)進行管理和處理忌堂。通常的手段有RPC和REST HTTP兩種。
RPC
RPC優(yōu)勢:
- 開發(fā)速度快:
- 接口維護簡單高效
- 學(xué)習(xí)成本低
- 多語言/跨語言支持
- 已驗證成熟穩(wěn)定
架構(gòu)圖:
RESTful
- 每一個URI代表一種資源
- 客戶端和服務(wù)器之間酗洒,傳遞這種資源的某種表現(xiàn)層
-
客戶端通過四個HTTP動詞士修,對服務(wù)器端資源進行操作,實現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"
配置中心
Secret
為每個應(yīng)用配置獨立的密鑰
Service Registry
通過配置中心樱衷,注冊服務(wù)
Service心跳檢測
當(dāng)微服務(wù)實例注冊到服務(wù)中心后棋嘲,微服務(wù)需要定時向服務(wù)中心發(fā)送心跳。若服務(wù)中心在一定時間內(nèi)沒有收到心跳信息矩桂,則會注銷此實例沸移。
IP Table
防火墻,白名單/黑明單。
Permission Group
應(yīng)用權(quán)限分組雹锣,方便權(quán)限分配网沾。