資料介紹
軟件簡(jiǎn)介
TarsGateway是基于tars框架開(kāi)發(fā)的一套通用api網(wǎng)關(guān),請(qǐng)求為http協(xié)議,后端同時(shí)支持tars-tup&tars-tars協(xié)議、tars-json協(xié)議、http協(xié)議。 除了協(xié)議轉(zhuǎn)發(fā)之外,還支持流量控制,黑白名單等功能。
支持版本說(shuō)明
- TarsCpp: >= v2.4.5
- TarsJava: >= v1.7.2
- TarsGo: >= v1.1.4
- TarsNode: rpc: >= v2.0.14, stream: >= v2.0.3, tars2node: >= v20200707
- TarsPHP: tars-server: >= v0.6.0
功能介紹
1. 代理類型的判斷
TarsGateway 是根據(jù)請(qǐng)求host+url 判斷當(dāng)前請(qǐng)求是什么類型的請(qǐng)求,具體host和url通過(guò)配置設(shè)定。配置及對(duì)應(yīng)邏輯說(shuō)明如下:
- 配置所在域: /main/base
- tup_host: tup請(qǐng)求對(duì)應(yīng)的host,如果請(qǐng)求host在tup_host列表中,那么會(huì)進(jìn)行后面的tup&&json請(qǐng)求的判斷。如果列表配置為空,那么也會(huì)判斷,這里支持前通配符。
- tup_path: tup或tars請(qǐng)求的基礎(chǔ)path,默認(rèn)為 /tup ;
- json_path: json 請(qǐng)求的基礎(chǔ)path,默認(rèn)為 /json ;
- monitor_url: TarsGateway 的監(jiān)控地址,用來(lái)遠(yuǎn)程判斷服務(wù)是否存活。
- 配置舉例:
#tup_host 如果不配置,那么所有host開(kāi)頭的,且沒(méi)有path或者path為 / , 也判斷為 tup 請(qǐng)求
tup_host=prx.tup.whup.com|prx2.tup.whup.com|*.prx.upchina.com
tup_path=/tup
json_path=/json
monitor_url=/monitor/monitor.html
2. TARS-tup && TARS-tars 協(xié)議代理
TARS-tup協(xié)議代理,必須為post請(qǐng)求類型,路徑為/tup,body內(nèi)容為RequestPacket包tars序列化的內(nèi)容。TarsGateway收到包后,去反序列化body的內(nèi)容解析出RequestPacket包,然后根據(jù)其中的sServantName在配置中查找真是的tars服務(wù)的obj。如果配置auto_proxy=1,那么客戶端調(diào)用時(shí) sServantName 可以填真實(shí)的obj地址。這里建議:直接對(duì)C外網(wǎng)暴露的TarsGateway,建議配置auto_proxy=0,避免內(nèi)網(wǎng)的服務(wù)都直接對(duì)外暴露。另外,proxy的配置還可以支持 sServerName:sFuncName 的配置,會(huì)優(yōu)先根據(jù), 這種類型配置優(yōu)先級(jí)高于只配置sServerName 類型的配置。 proxy配置如下:
hello = TestApp.HelloServer.HelloObj
hello:sayhello = TestApp.Hello2Server.HelloObj
經(jīng)過(guò)TarsGateway調(diào)用后端服務(wù),客戶端請(qǐng)求的http頭,可以通過(guò)配置采用tars的context進(jìn)行http頭的透?jìng)鳎J(rèn)情況下,REMOTE_IP (客戶端ip)都會(huì)透?jìng)鹘o后端。配置為 filterheaders,可以是多個(gè),比如:
filterheaders = X-GUID|X-XUA
調(diào)用后端tars服務(wù)時(shí),TarsGateway默認(rèn)采用tars自己的缺省輪訓(xùn)負(fù)載均衡策略(robin輪訓(xùn)),也可以通過(guò)配置自定義hash策略,hash_type為1時(shí),根據(jù)客戶端請(qǐng)求id進(jìn)行tarshash調(diào)用; hash_type為2時(shí),根據(jù)指定http頭(配種中的httpheader)進(jìn)行tarshash調(diào)用,比如http頭中的 X-GUID,注意這里選擇httpheader需要合理,避免過(guò)于集中某個(gè)值導(dǎo)致負(fù)載均衡過(guò)于不均勻的現(xiàn)象; hash_type為3時(shí),則根據(jù)客戶端的ip進(jìn)行tarshash調(diào)用。 如果obj后面沒(méi)有配置hash_type,那么采用tars默認(rèn)輪訓(xùn)調(diào)用。配置舉例如下:
# servant = server_full_obj [| hash_type [| http header key] ]
# hash_type: 0, 輪訓(xùn); 1: requestid, 2: http頭, 3: client ip
# Hello=TestApp.HelloServer.HelloObj | 1
# Hello=TestApp.HelloServer.HelloObj | 2 | X-GUID
# Hello=TestApp.HelloServer.HelloObj | 3
hello = TestApp.HelloServer.HelloObj | 3
hello:sayhello = TestApp.Hello2Server.HelloObj
3. TARS-JSON 協(xié)議代理
TARS-JSON協(xié)議代理,支持兩種類型的接口。
- servantName和funcName在http url路徑中指定
路徑為/json/servantName/funcName,其中/json是固定的,后面分別是servantName 和 funcName。
請(qǐng)求:
url: http://xx.xx.com/json/Test.GetSumServer.GetSumObj/getSumEx
{"req":{"userKey":"upchina","userToken":"upchinatoken","x":1,"y":9900989}}
響應(yīng):
{ "rsp": { "otherMsg": [ "1 + 9900989 = 9900990" ], "msg": "succ.", "sum": 9900990, "ret": 0 }, "": 0 }
- 相關(guān)參數(shù)都在http body中指定:
必須為post請(qǐng)求類型,路徑為/json,body內(nèi)容為json結(jié)構(gòu)。其中必須有reqid, obj, func, data 四個(gè)字段,分別表示請(qǐng)求id、服務(wù)servant、服務(wù)接口、接口參數(shù),對(duì)應(yīng)RequestPacket中的reqid:iRequestId, obj:sServantName, func:sFuncName。data內(nèi)容為接口中的參數(shù),key為參數(shù)名,value為參數(shù)內(nèi)容。除了以上必選四個(gè)字段之外,context為可選字段?;匕鼉?nèi)容包括 reqid 和 data, data為接口出參內(nèi)容,其中 "" 的key對(duì)應(yīng)內(nèi)容為函數(shù)返回值。 這里除了這里包格式不一樣,其他后面的邏輯都和TARS-tup類型一樣。請(qǐng)求參數(shù)舉例如下:
請(qǐng)求包:
{
"reqid": 99999,
"obj": "getsum",
"func": "getSumEx",
"data": "{"req":{"userKey":"upchina","userToken":"upchinatoken","x":1,"y":9900989}}"
}
響應(yīng)包:
{
"data": "{ "rsp": { "otherMsg": [ "1 + 9900989 = 9900990" ], "msg": "succ.", "sum": 9900990, "ret": 0 }, "": 0 }",
"reqid": 99999
}
4. 普通HTTP協(xié)議代理
普通HTTP協(xié)議代理,類似nginx的反向代理功能,主要功能包括根據(jù)domain和url進(jìn)行請(qǐng)求轉(zhuǎn)發(fā),后端負(fù)載均衡,容錯(cuò)容災(zāi),黑名單屏蔽,流量控制等功能。
- 路由策略
先匹配server_name,再匹配path,然后根據(jù) proxy_pass 路徑進(jìn)行轉(zhuǎn)發(fā),具體規(guī)則如下:
server_name 匹配邏輯:
{
1、查找全匹配
2、通配符在前匹配
3、通配符在后面匹配
4、正則匹配
5、如果server_name為空, 則默認(rèn)都匹配
}
path 匹配邏輯:
{
1、= 全匹配: /login
2、^~ uri以某個(gè)常規(guī)字符串開(kāi)頭: ^~ /static/ (一旦匹配成功, 不再往后面匹配)
3、~ 正則匹配(區(qū)分大小寫): ~ \.(gif|jpg|png|js|css)$ (正則表達(dá)式匹配多個(gè)的情況下, 按最長(zhǎng)的匹配)
4、~* 正則匹配(不區(qū)分大小寫):~* \.png$
5、!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配 的正則: !~ \.xhtml$, !~* \.xhtml$
6、/xxx 從頭開(kāi)始匹配路徑(匹配長(zhǎng)度越長(zhǎng)優(yōu)先級(jí)越高)
7、/ 任何請(qǐng)求都會(huì)匹配
}
proxy_pass:
{
1、如果proxy_pass配置中沒(méi)有路徑(http://host/ 這個(gè)是有路徑的 /),這時(shí)候 location 匹配的完整路徑將直接透?jìng)鹘o url
2、proxy_pass配置中包含路徑(哪怕只有一個(gè) / , 也算), 新路徑 = proxypassPath + (訪問(wèn)路徑-location路徑)
3、當(dāng) location 中為正則時(shí), proxy_pass 不能帶路徑
}
- 負(fù)載均衡
支持普通輪訓(xùn)和帶權(quán)重輪訓(xùn)策略,默認(rèn)權(quán)重(weight)為1,數(shù)據(jù)越大,權(quán)重越高。權(quán)重表示在一次輪訓(xùn)周期內(nèi)輪訓(xùn)的次數(shù)。
- 容錯(cuò)容災(zāi)
當(dāng)后端節(jié)點(diǎn)為多個(gè)節(jié)點(diǎn)時(shí)(大于等于2個(gè)節(jié)點(diǎn)),可以支持后端熔斷策略,這里是否進(jìn)行熔斷可以配置,默認(rèn)是打開(kāi)的。
失效屏蔽:如果出現(xiàn)連接出錯(cuò),那么就會(huì)直接臨時(shí)屏蔽該節(jié)點(diǎn),對(duì)應(yīng)inactive配置,其中的值為RequestCallback::FAILED_CODE類型。加入到失效的節(jié)點(diǎn),如果該站點(diǎn)配置了monitor_url,那么會(huì)定時(shí)輪訓(xùn)該url,如果出現(xiàn)http 200,那么恢復(fù)該節(jié)點(diǎn),輪訓(xùn)檢測(cè)間隔遞增,最大為2分鐘。如果沒(méi)有配置 monitor_url, 那么直接connect該節(jié)點(diǎn)的ip:port,能夠正常連接,那么恢復(fù)該節(jié)點(diǎn)。
超時(shí)切換:當(dāng)超時(shí)次數(shù)在指定時(shí)間窗口達(dá)到一定閾值時(shí),或者超過(guò)一定比例時(shí),那么臨時(shí)屏蔽一段時(shí)間,一定時(shí)間后會(huì)嘗試超時(shí)恢復(fù)。
配置如下:
# 定義哪些返回碼做超時(shí)容錯(cuò)處理,哪些返回碼做出錯(cuò)容災(zāi)處理
inactive=2|6
timeout=1|3
RequestCallback::FAILED_CODE類型定義如下:
enum FAILED_CODE
{
Failed_Net = 0x01, //網(wǎng)絡(luò)出錯(cuò)
Failed_Connect = 0x02, //連接服務(wù)器出錯(cuò)
Failed_Timeout = 0x03, //超時(shí)
Failed_Interrupt = 0x04, //中斷接收數(shù)據(jù)
Failed_Close = 0x05, //服務(wù)器主動(dòng)關(guān)閉了鏈接
Failed_ConnectTimeout = 0x06, //鏈接超時(shí)
};
IP黑名單和流控策略, 同時(shí)支持TarsGateway的三種協(xié)議,所以后面統(tǒng)一介紹。
5. 流量控制
可以支持訪問(wèn)TarsGateway 訪問(wèn)后端進(jìn)行流量控制,支持單機(jī)控制,也支持多機(jī)協(xié)同控制,也可以關(guān)閉流控。
開(kāi)關(guān)控制:?配置flow_control_onoff可以對(duì)流控進(jìn)行開(kāi)關(guān)控制。另外如果服務(wù)servant沒(méi)有配置FlowControlObj,那么就不會(huì)開(kāi)啟流控策略。
流控策略:?一定時(shí)間內(nèi)最多訪問(wèn)多少次, 通過(guò)時(shí)間滑動(dòng)窗口動(dòng)態(tài)控制,滑動(dòng)窗口大小為1s,超過(guò)次數(shù)則直接返回http 403。
多機(jī)協(xié)同:?配置了tup_report_obj,那么會(huì)通過(guò)該obj進(jìn)行多機(jī)協(xié)同流量控制,否則進(jìn)行單機(jī)控制。注意,如果是單機(jī)的策略,那么流控配置的一定時(shí)間內(nèi)最多可以訪問(wèn)多少次就是單機(jī)最多可以訪問(wèn)該站點(diǎn)多少次;如果是多機(jī)協(xié)同,那么就是多機(jī)同時(shí)允許訪問(wèn)該站點(diǎn)多少次。
配置說(shuō)明:?如果是TARS-tup或者TARS-JSON協(xié)議,那么流控的站點(diǎn)ID為服務(wù)Obj,如果是http協(xié)議,那么站點(diǎn)ID為配置中的stationId.
6. 黑名單策略
黑名單為IP黑名單,支持全局黑名單和站點(diǎn)黑名單兩個(gè)級(jí)別。
黑名單格式:?客戶端IP地址,支持通配符。如 192.168.2.130, 192.168.10.*
全局黑名單:?對(duì)所有訪問(wèn)TarsGateway進(jìn)行控制,包括TARS-tup、TARS-JSON和普通HTTP協(xié)議。
站點(diǎn)黑名單:?只針對(duì)指定站點(diǎn)控制,其他站點(diǎn)不首影響。
站點(diǎn)白名單:?站點(diǎn)一旦配置了白名單,那么就只能是指定IP才能訪問(wèn),主要用于內(nèi)部系統(tǒng)控制指定ip訪問(wèn),或者開(kāi)放給指定合作伙伴調(diào)用。
7. 配置熱更新
支持常用配置熱更新,包括:
- loadProxy: 通過(guò)該tars命令可以實(shí)現(xiàn)TARS-tup&TARS-JSON協(xié)議的servant代理配置更新;
- loadHttp: 通過(guò)該配置可以進(jìn)行普通HTTP協(xié)議的路由策略, 后端節(jié)點(diǎn)配置,監(jiān)控url配置等;
- loadComm: 通過(guò)該命令可以進(jìn)行一些公共的配置加載,主要包括黑白名單加載;
- 流控策略自動(dòng)動(dòng)態(tài)加載DB。
- LabView工具包WebSocket-API主機(jī)下載 68次下載
- 使用通用傳感器API的人類活動(dòng)識(shí)別
- 紅綠燈倒計(jì)時(shí)API開(kāi)發(fā)文檔
- 使用通用傳感器API和Google進(jìn)行用戶活動(dòng)識(shí)別
- local-data-api-gateway本地?cái)?shù)據(jù)API網(wǎng)關(guān)
- 碩士學(xué)位論文《家庭智能網(wǎng)關(guān)的研究與實(shí)現(xiàn)》 24次下載
- 人體行為識(shí)別API接口aip-php-sdk-4.15.4 3次下載
- 串口屏LUA教程7-繪圖API使用說(shuō)明
- 演示版:NanEye_EvalSW_API_FiberOpticBox_csharp_pWin_v2-3-3-1.exe 0次下載
- 演示版:NanEye2D_EvalSW_API_NanoUSB2_cpackage_pWin_v1-1-3-1.exe 0次下載
- API-Shop-OCR-營(yíng)業(yè)執(zhí)照識(shí)別API接口Python調(diào)用示例代碼說(shuō)明 6次下載
- 微信小程序如何開(kāi)發(fā)?微信小程序教程視頻常用組件API開(kāi)發(fā)項(xiàng)目實(shí)戰(zhàn) 88次下載
- TMS320F281x Flash編程的API的版本變化 0次下載
- 通用工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)的設(shè)計(jì)與評(píng)測(cè) 1次下載
- 一種基于Salvo的通用CAN/LIN網(wǎng)關(guān)
- Kubernetes Gateway API攻略教程 676次閱讀
- API測(cè)試框架Grillon概述 1895次閱讀
- 企業(yè)怎么選擇API網(wǎng)關(guān) 552次閱讀
- Katalon:API測(cè)試 840次閱讀
- Service Mesh和API網(wǎng)關(guān)正在逐步融合 1086次閱讀
- 關(guān)于API接口相關(guān)知識(shí) API的權(quán)限與安全問(wèn)題 1591次閱讀
- 什么是API,不同場(chǎng)景中的API 2013次閱讀
- 工業(yè)網(wǎng)關(guān)主要功能_工業(yè)智能網(wǎng)關(guān)應(yīng)用 6360次閱讀
- 什么是API網(wǎng)關(guān)為什么需要API網(wǎng)關(guān) 1.2w次閱讀
- 簡(jiǎn)要分析Thread的通用GPIO設(shè)備驅(qū)動(dòng) 1413次閱讀
- 50個(gè)機(jī)器學(xué)習(xí)實(shí)用API 4180次閱讀
- 如何搭建API程序_框架api接口規(guī)范 1.1w次閱讀
- api接口類型有哪些_API設(shè)計(jì)的基本要求 3.5w次閱讀
- 如何使用API_api接口有什么優(yōu)點(diǎn) 2w次閱讀
- API設(shè)計(jì)過(guò)程中的通用準(zhǔn)則和約定準(zhǔn)則 4511次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多