云原生如何助力微服務(wù)?

AI課工場
隨著技術(shù)的發(fā)展,我們云托管時代逐步的向云原生演進(jìn)了。所謂云原生,就是將微服務(wù)、DevOps的架構(gòu)理念與云所提供的容器、Serverless無服務(wù)器更好的結(jié)合,提升資源的使用效率,提高研發(fā)運維效率。

隨著技術(shù)的發(fā)展,我們云托管時代逐步的向云原生演進(jìn)了。所謂云原生,就是將微服務(wù)、DevOps的架構(gòu)理念與云所提供的容器、Serverless無服務(wù)器更好的結(jié)合,提升資源的使用效率,提高研發(fā)運維效率。那么在云原生時代,微服務(wù)應(yīng)該如何與云原生相輔相成呢?

我們來看看微服務(wù)的定義,即將一個單體應(yīng)用拆分成多個微服務(wù),由微服務(wù)來一起協(xié)同對外提供服務(wù)支持。在微服務(wù)的運行中就存在這三個問題:

1、如何管理微服務(wù)的生命周期;

2、如何治理不同技術(shù)棧微服務(wù)之間的通信;

3、如何處理不同技術(shù)棧的微服務(wù)請求?

對于如何管理微服務(wù)的生命周期,我們來一起看看。最初服務(wù)都是單體式的,上線時直接部署某些機(jī)器資源上就可以了,當(dāng)出現(xiàn)異常時,直接下線該機(jī)器上的服務(wù)版本,服務(wù)與資源的關(guān)系是比較簡單的,沒有動態(tài)的依賴關(guān)系。當(dāng)我們把服務(wù)拆分成微服務(wù)之后,不同的微服務(wù)部署在不同的機(jī)器上,最后組成整個應(yīng)用呈現(xiàn)給到用戶,此時服務(wù)與資源的關(guān)系變得復(fù)雜起來了。如果應(yīng)用是由不同的技術(shù)棧開發(fā)實現(xiàn),比如有的微服務(wù)用C++、有的用Java、有的用PHP、有的用Golang,那么部署每個服務(wù)時還需要在機(jī)器上安裝對應(yīng)的運行環(huán)境,整個應(yīng)用的運維成本又增加了。但是在云原生時代,有了容器如Docker、容器平臺技術(shù)如Kubernetes把這一切都變得簡單了。Docker容器技術(shù)通過標(biāo)準(zhǔn)的封裝、標(biāo)準(zhǔn)的運行時將微服務(wù)的部署變得標(biāo)準(zhǔn)化,Kubernetes技術(shù)則是把已經(jīng)標(biāo)準(zhǔn)化的微服務(wù)便捷的運行在機(jī)器上,運維人員不再需要將微服務(wù)分配到某個具體的機(jī)器上,并且在Kubernetes中的Pod模型對外提供了單個容器運行狀態(tài)接口、DNS地址服務(wù),通過簡單的二次開發(fā)可以看到每個微服務(wù)在哪些地址上的運行狀態(tài),簡化了整個微服務(wù)生命周期的管理。

對于如何治理不同技術(shù)棧微服務(wù)之間的通信,我們一起來看看,最初服務(wù)是單體式的,模塊與模塊之間的通信都是靜態(tài)編譯產(chǎn)生的,比較簡單。當(dāng)我們把服務(wù)拆分成微服務(wù)之后,模塊與模塊之間的通信就是動態(tài)關(guān)聯(lián)的了,微服務(wù)如何找到另外一個微服務(wù)變得復(fù)雜起來。一些微服務(wù)框架,如Java的Spring簡化了開發(fā)人員的負(fù)擔(dān),只要是Java系服務(wù)的開發(fā)就不用再寫一遍微服務(wù)之間通信的邏輯。但是當(dāng)一個業(yè)務(wù)引入多個技術(shù)棧時,常見的如上層用Java編寫,底層用Golang編寫,不同微服務(wù)之間的通信框架都不一樣,無疑又增加了開發(fā)人員的成本。但是在云原生時代,我們有了ServiceMesh服務(wù)網(wǎng)格,通過通信劫持,實現(xiàn)了比較好的服務(wù)間通信監(jiān)測與管理。在servicemesh中,有一個sidecar邊車容器的概念,它把微服務(wù)之間通信的能力從業(yè)務(wù)中抽象,單獨成一個容器與微服務(wù)并行,再使用Istio所提供的管控能力,將微服務(wù)與邊車容器搭成一個網(wǎng)狀的數(shù)據(jù)平面,在這上面進(jìn)行服務(wù)之間通信的配置、管理、監(jiān)測。

對于如何處理不同技術(shù)棧的微服務(wù)請求,我們一起來看看,原來的外部請求通過瀏覽器或app進(jìn)來之后,會經(jīng)過應(yīng)用層/網(wǎng)絡(luò)層的負(fù)載均衡決定分發(fā)給到哪臺機(jī)器去處理,單體式應(yīng)用因為是一個大整體,直接分發(fā)即可,還是比較簡單的,而微服務(wù)則需要經(jīng)過復(fù)雜的邏輯判斷給到哪個服務(wù)、哪臺機(jī)器。在多技術(shù)棧開發(fā)的情況下,每個微服務(wù)框架都需要寫一遍請求邏輯。但是在云原生時代,我們有了Serverless無服務(wù)器的概念,我們可以把請求類型、請求管理、請求處理的邏輯全抽出來標(biāo)準(zhǔn)化,在業(yè)務(wù)層只需要前端去調(diào)用該函數(shù)即可,后面的請求處理分發(fā)就再也不用管理了。

微服務(wù)的出現(xiàn),確實推動技術(shù)向前演進(jìn)了一大步,但是微服務(wù)并不是萬能的,在使用它的同時,必然要承擔(dān)它的復(fù)雜性所帶來的成本。不過微服務(wù)確實是良藥,有了云原生技術(shù)出現(xiàn)后,對于該良藥所帶來的副作用便能消解很多,云原生必定是企業(yè)落地微服務(wù)的最佳伴侶~

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論