目的
- 避免讓客戶端感知微服務(wù)邊界的存在
- 不同的后端边锁、前端團(tuán)隊(duì)需要統(tǒng)一的接口設(shè)計移必、接入規(guī)范
思路
- API網(wǎng)關(guān)是請求進(jìn)入系統(tǒng)的唯一節(jié)點(diǎn)
- API網(wǎng)關(guān)負(fù)責(zé)服務(wù)請求路由及協(xié)議轉(zhuǎn)換
- 它可能還具有其它職責(zé),如身份驗(yàn)證顾彰、權(quán)限控制首尼、負(fù)載均衡耙替、“請求整形”與管理
參考鏈接
https://www.nginx.com/blog/building-microservices-using-an-api-gateway/
功能
-
協(xié)議解析
以透明的方式實(shí)現(xiàn)Http到Rpc調(diào)用的轉(zhuǎn)換:
http請求到rpc調(diào)用實(shí)例的映射;
無類型的參數(shù)轉(zhuǎn)換為帶類型的參數(shù)胶逢;
- 服務(wù)代理
-
組合調(diào)用
dubbo attachement提供了一種從consumer到provider的隱式傳參機(jī)制
dubbo notification機(jī)制
是擴(kuò)展的從provider向consumer的旁路消息機(jī)制厅瞎。
變更DubboCodec中encodeResponseData,增加notification寫入初坠;
變更DecodeableRpcResult中decode和簸,增加notification解析;
不同于attachement的傳遞屬性碟刺,默認(rèn)notification只傳遞給服務(wù)consumer不再向上傳遞锁保,對于特定的notification需要一直向上傳遞我們通過DubboFilter機(jī)制實(shí)現(xiàn)copy and write隱式的完成特定notfication的連續(xù)傳播
- 安全驗(yàn)證
目的:api gateway作為外部訪問api的唯一入口,需要盡可能的攔截掉非正常請求,解析出真實(shí)的設(shè)備/用戶信息爽柒,再向微服務(wù)發(fā)起調(diào)用吴菠。
主要手段:設(shè)備識別;數(shù)字簽名浩村; - 集中式日志與監(jiān)控
ELK:Elasticsearch(日志檢索引擎,OLAP)做葵,Logstash(日志采集) Kibana(數(shù)據(jù)可視化)
Zabbix(系統(tǒng)監(jiān)控和通知)
使用es數(shù)據(jù)源,按照服務(wù)心墅、錯誤碼等維度聚合錯誤 - 敏捷開發(fā)工具
靈感:SOAP使用WSDL進(jìn)行stub生成
實(shí)現(xiàn):ApiParser解析得到了完備的接口信息蜂挪,基于這個信息我們采用模板技術(shù)(xslt/velocity/handlerbars),生成出java/oc/js的客戶端調(diào)用代碼嗓化,以及在線文檔棠涮; - 熱發(fā)布(scan變?yōu)殡x線操作,推送ApiMethodInfo+Interface至apigateway,并動態(tài)創(chuàng)建新的代理實(shí)例刺覆,進(jìn)行熱替換)
附圖
在項(xiàng)目啟動的時候严肪,會連上zookeeper,進(jìn)入docker,下載docker項(xiàng)目中的Jar包谦屑,并解析內(nèi)容