谈一下我对如何设计微服务接口的理解和思考
微服務(wù)是一個(gè)獨(dú)立運(yùn)行、自帶數(shù)據(jù)存儲(chǔ)管理,對外提供接口的自治系統(tǒng)。微服務(wù)設(shè)計(jì)很關(guān)鍵的一點(diǎn)是微服務(wù)接口的設(shè)計(jì)。不同微服務(wù)經(jīng)常是分配給不同的團(tuán)隊(duì)開發(fā)的,接口是各團(tuán)隊(duì)編程的契約。
下面只討論微服務(wù)間接口的設(shè)計(jì),至于微服務(wù)內(nèi)部子模塊間接口的設(shè)計(jì)比較靈活,內(nèi)部接口修改也不會(huì)有太大的影響,不在這里討論。
從我的理解來看,微服務(wù)接口設(shè)計(jì)要考慮以下幾個(gè)方面:1、接口協(xié)議選型。2、定義接口內(nèi)容。4、明確接口性能。5、做好接口管理。
二、 接口協(xié)議選型
考慮接口使用什么通信協(xié)議來傳遞數(shù)據(jù),是使用TCP、UDP,還是HTTP? 亦或是采用文件下載,數(shù)據(jù)庫共享,Redis緩存共享的方式?同一個(gè)微服務(wù)的不同接口都可能采用不同的方式:
現(xiàn)在微服務(wù)流行采用的http協(xié)議restful接口(語言無關(guān))。
RMI遠(yuǎn)程接口調(diào)用(Java語言支持)。
大數(shù)據(jù)傳遞采用文件離線下載的方式(FTP)。
狀態(tài)數(shù)據(jù)(如果進(jìn)度條)放在Redis中共享緩存。
數(shù)據(jù)庫共享。一般來說微服務(wù)的數(shù)據(jù)庫是隔離的,不同微服務(wù)不允許直接訪問彼此的數(shù)據(jù)庫。如涉及大數(shù)據(jù)有性能問題時(shí)可特殊考慮。
如果涉及機(jī)密數(shù)據(jù)的傳輸, 特別是在interenet上發(fā)布的接口為防止數(shù)據(jù)被人抓包分析,需要有加解密處理。
做了接口協(xié)議選型后就可以考慮采用哪些第方件,常用的cxf、spring boot是restful服務(wù)發(fā)布組件;RMI是Java原生支持的;C++可以采用SOAP。FTP存在安全性問題,可以采用SFTP。
三、 定義接口內(nèi)容
接口內(nèi)容包含接口名稱(url)、輸入?yún)?shù)、返回值、錯(cuò)誤碼。一個(gè)典型的restful接口內(nèi)容定義如下:?
?
補(bǔ)充說明:返回的錯(cuò)誤碼,1表示成功,0表示失敗。參數(shù)類型按http協(xié)議的定義一般有query參數(shù)、body參數(shù)、Header參數(shù)這幾種。
四、 明確接口性能
接口性能定義了接口單次響應(yīng)時(shí)間、單次查詢返回記錄條數(shù),每秒支持調(diào)用次數(shù)等。
數(shù)據(jù)量比較大的查詢接口一把都會(huì)設(shè)計(jì)成分頁查詢,需要定義好單次查詢返回的最大記錄條數(shù)。
微服務(wù)接口的支撐能力是有限的,必須定義好單位時(shí)間內(nèi)允許的最大請求次數(shù)(超過請求次數(shù)就不響應(yīng)或者返回錯(cuò)誤碼),否則海量的請求一下涌過來,服務(wù)就掛了。對于發(fā)布在interenet上的服務(wù),一般還會(huì)根據(jù)會(huì)員級(jí)別設(shè)定一天的請求次數(shù)上限等。
五、 做好接口管理
接口管理涵蓋接口版本管理、接口權(quán)限管理、接口管控。
同一個(gè)接口在不同時(shí)期可能有不同的訴求,當(dāng)有新需求來時(shí)我們就需要做版本升級(jí)。一般來說新增接口,舊的接口不會(huì)立即下線(因?yàn)檫€有很多其它的微服務(wù)在使用),這時(shí)候就通過加一個(gè)版本號(hào)來解決。在URL中帶上不同的版本號(hào),需要使用新特性的可以調(diào)用新版本的接口;不使用新特性的可以仍然沿用舊版本接口。
對外發(fā)布的接口需要做權(quán)限控制,未授權(quán)的微服務(wù)不允許訪問。可以采用在接口的header參數(shù)中加上加密的token作為權(quán)限認(rèn)證。
當(dāng)整個(gè)系統(tǒng)很龐大以后,各微服務(wù)發(fā)布的接口需要做可視化管理,包含服務(wù)的注冊、發(fā)布、調(diào)用、下線都需要在統(tǒng)一的運(yùn)維平臺(tái)上操作。
前面提到的接口版本管理對接口不同版本的兼容處理是不可能不限支持下去的。發(fā)布舊版本接口的下線公告到期后,如果在監(jiān)控平臺(tái)上發(fā)現(xiàn)舊版本接口已無人調(diào)用就可以下線了,如果還有人調(diào)用則通知他限期整改。
參考:https://blog.csdn.net/ylforever/article/details/79334416
總結(jié)
以上是生活随笔為你收集整理的谈一下我对如何设计微服务接口的理解和思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++11中的智能指针
- 下一篇: c++ 虚函数的实现机制