1.服務(wù)如何定義
對(duì)于單體應(yīng)用來(lái)說(shuō),不同功能模塊之前相互交互時(shí),通常是以類庫(kù)的方式來(lái)提供各個(gè)模塊的功能。對(duì)于微服務(wù)來(lái)說(shuō),每個(gè)服務(wù)都運(yùn)行在各自的進(jìn)程之中,應(yīng)該以何種形式向外界傳達(dá)自己的信息呢?答案就是接口,無(wú)論采用哪種通訊協(xié)議,是HTTP還是RPC,服務(wù)之間的調(diào)用都通過(guò)接口描述來(lái)約定,約定內(nèi)容包括接口名、接口參數(shù)以及接口返回值。
2.服務(wù)如何注冊(cè)和發(fā)現(xiàn)
單體應(yīng)用由于部署在同一個(gè)WAR包里,接口之間的調(diào)用屬于進(jìn)程內(nèi)的調(diào)用。而拆分為微服務(wù)獨(dú)立部署后,服務(wù)提供者該如何對(duì)外暴露自己的地址,服務(wù)調(diào)用者該如何查詢所需要調(diào)用的服務(wù)的地址呢?這個(gè)時(shí)候你就需要一個(gè)類似登記處的地方,能夠記錄每個(gè)服務(wù)提供者的地址以供服務(wù)調(diào)用者查詢,在微服務(wù)架構(gòu)里,這個(gè)地方就是注冊(cè)中心。
3.服務(wù)如何監(jiān)控
通常對(duì)于一個(gè)服務(wù),我們最關(guān)心的是QPS(調(diào)用量)、AvgTime(平均耗時(shí))以及P999(99.9%的請(qǐng)求性能在多少毫秒以內(nèi))這些指標(biāo)。這時(shí)候你就需要一種通用的監(jiān)控方案,能夠覆蓋業(yè)務(wù)埋點(diǎn)、數(shù)據(jù)收集、數(shù)據(jù)處理,最后到數(shù)據(jù)展示的全鏈路功能。
4.服務(wù)如何治理
可以想象,拆分為微服務(wù)架構(gòu)后,服務(wù)的數(shù)量變多了,依賴關(guān)系也變復(fù)雜了。比如一個(gè)服務(wù)的性能有問題時(shí),依賴的服務(wù)都勢(shì)必會(huì)受到影響。可以設(shè)定一個(gè)調(diào)用性能閾值,如果一段時(shí)間內(nèi)一直超過(guò)這個(gè)值,那么依賴服務(wù)的調(diào)用可以直接返回,這就是熔斷,也是服務(wù)治理最常用的手段之一。
5.故障如何定位
在單體應(yīng)用拆分為微服務(wù)之后,一次用戶調(diào)用可能依賴多個(gè)服務(wù),每個(gè)服務(wù)又部署在不同的節(jié)點(diǎn)上,如果用戶調(diào)用出現(xiàn)問題,你需要有一種解決方案能夠?qū)⒁淮斡脩粽?qǐng)求進(jìn)行標(biāo)記,并在多個(gè)依賴的服務(wù)系統(tǒng)中繼續(xù)傳遞,以便串聯(lián)所有路徑,從而進(jìn)行故障定位。