1. 程式人生 > >從0開始學習微服務(一)

從0開始學習微服務(一)

話不多說,首先介紹微服務的相關概念

所謂微服務就是將單體應用的本地呼叫改變為通過HTTP或者RPC遠端呼叫的多應用

相比於傳統單體應用的優缺點

單體應用缺點:

不同模組直接邏輯耦合性高

任何一個模組程式碼有改動時即使是不相關的模組也要重新打包部署

部署程式碼時候要時刻更改依賴版本,容易出錯

部署時間久

任何一塊程式碼邏輯錯誤可能導致整個系統崩潰

一些併發量高的模組和一些併發量低的模組部署在一起容易導致伺服器壓力過大系統效率低下,吞吐量變低

不同的功能模組分屬不同的專案,可以部署在各個地方,擴充套件性好

模組之間耦合性低,模組之間的互相呼叫通過HTTP或者RPC的方式進行,可以引入訊息佇列等中介軟體,當一個模組出問題時不會影響其他模組
對於一些併發量高的模組可以單獨部署,通過增加機器,叢集部署來提高系統吞吐量,同時不會給別的伺服器帶來訪問壓力

實現一個微服務需要的相關元件

整體來看所謂微服務就是將邏輯上功能比較分離的模組拆分成一個單獨的專案,比如淘寶的個人中心,當在其他模組,比如購物車模組,需要使用使用者資訊的時候就可以遠端呼叫個人中心提供的相應服務,也就是介面,來獲取個人資訊,這個過程有幾個關鍵的點

1.個人資訊服務的描述

試想一下,在一個模組想要遠端呼叫另一個模組提供的服務,首先要明白這個服務即介面需要哪些引數,會返回哪些資訊,這些內容就是服務的描述

常用的服務描述比如進行restful api開發的時候可以使用swagger進行服務描述,可以表明該介面需要哪幾種引數分別是什麼型別等

2.個人資訊的註冊

當一個服務寫完之後必須讓別人知道怎麼呼叫到改服務,這時候就需要註冊,往往需要一個註冊中心,常見的spring cloud,dubbo,wso2等開源框架都提供了註冊中心,在註冊中心註冊完畢的服務可以暴露給其他模組呼叫

3.服務之間的呼叫方式

購物車模組現在明白了個人中心模組需要什麼引數,也知道在哪裡呼叫這個模組,下一個問題就是呼叫的方式了,是通過http掉還是Rpc呼叫

4.資料傳輸方式

模組之間的傳輸方式也必須事先規定,是json還是xml等

5.服務監控

在經過以上步驟後,兩個服務直接可以正常呼叫了,此時我們需要對服務進行監控,記錄不同介面的呼叫情況和成功率,這些資訊可以幫助我們分析服務,比如某個服務的呼叫頻率比較大,可以適當的進行叢集部署並進行負載均衡,spring cloud等框架也提供了服務的檢測,同時會將檢測資訊在dashboard上進行展示,比較直觀

6.服務追蹤

當購物者模組呼叫個人中心模組的服務時,會在本地生成一個requestID,當進行呼叫時會將requestId作為引數傳遞,個人中心在得到requestID後悔進行處理, 此時當調用出問題時,我們可以利用requestID進行追蹤,從而快速定位問題

7.服務治理

不管是服務檢查還是服務追蹤最終的目的都是對服務進行治理,這也是微服務對比於單體應用的優點之一,比如服務直接調用出現問題時,比如網路不通,微服務框架可以重試,當重試也不能修復時會直接返回,不會一直卡在呼叫這一步而導致整個應用崩潰,比如spring cloud就提供了熔斷機制,這也是服務治理的一個方面