走進(jìn)微服務(wù)

<meta charset="utf-8">

開篇

什么是微服務(wù)

為什么使用微服務(wù)

怎么用微服務(wù)

開篇

本文主要是介紹包括微服務(wù)的概念,微服務(wù)與傳統(tǒng)的單系統(tǒng)架構(gòu)以及 SOA 相比較的優(yōu)劣勢(shì),最后簡(jiǎn)單說了下微服務(wù)的設(shè)計(jì)原則,開發(fā)環(huán)境,部署方式。

對(duì)于了解過微服務(wù)的大佬們,這篇文章可能不存在任何有實(shí)際價(jià)值的地方,但是有些時(shí)候概念也是要了解一下的,很多時(shí)候我們雖然知道我們要描述的東西是什么但是卻無法通過語(yǔ)言來描述出來,筆者曾經(jīng)被問過:“什么是微服務(wù)?”,雖然平時(shí)大家都在說微服務(wù),但是一旦讓自己去描述的時(shí)候可能真的就無法組織好語(yǔ)言。

什么是微服務(wù)

就目前看來,微服務(wù)的本身并沒有嚴(yán)格意思上的定義,每個(gè)人對(duì)微服務(wù)的理解都不同,Martin Fowler 在他的博客中這樣定義了微服務(wù)的概念:

微服務(wù)架構(gòu)風(fēng)格是一種將單體應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中,服務(wù)之間采用輕量級(jí)的通訊機(jī)制,這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并可以通過全自動(dòng)部署,這些服務(wù)共用一個(gè)最小型的集中式的管理,每個(gè)服務(wù)可以使用不同的開發(fā)語(yǔ)言 ,使用不同的存儲(chǔ)技術(shù)。

總結(jié)來說微服務(wù)的本身應(yīng)該具備以下特點(diǎn):

  • 每個(gè)服務(wù)獨(dú)立運(yùn)行在自己的進(jìn)程中
  • 一系列個(gè)服務(wù)共同組成了整個(gè)系統(tǒng)
  • 每個(gè)服務(wù)自負(fù)責(zé)系統(tǒng)中某一個(gè)模塊的業(yè)務(wù)功能
  • 服務(wù)之間的通信采用的是輕量級(jí)的通訊機(jī)制
  • 每個(gè)服務(wù)可以采用不同的開發(fā)語(yǔ)言以及可以使用不同的存儲(chǔ)技術(shù)
  • 全自動(dòng)的部署方式

為什么使用微服務(wù)

至于為什么使用微服務(wù),傳統(tǒng)的思想告訴我,就像買一件商品一樣,我們總會(huì)相同的價(jià)格去比較質(zhì)量,相同的質(zhì)量去比較價(jià)格,在我們選擇微服務(wù)的時(shí)候,也很容易想到“微服務(wù)能給我們帶來那些好處”,這里網(wǎng)絡(luò)上很多大佬都給出了很多關(guān)于微服務(wù)的優(yōu)勢(shì),我這里打算從三個(gè)方面去闡述這個(gè)問題:

  • 傳統(tǒng)服務(wù)(單體服務(wù))

優(yōu)勢(shì):(曾經(jīng))易開發(fā),易測(cè)試,易部署,直到目前為止很多簡(jiǎn)單的系統(tǒng)任然會(huì)選擇這種傳 統(tǒng)的單服務(wù)的架構(gòu)模式,其中的原因當(dāng)然也是多方面的(技術(shù),經(jīng)濟(jì)的角度考慮)

劣勢(shì):整個(gè)系統(tǒng)比較笨重,給后期的維護(hù)工作造成了 極大的壓力,單系統(tǒng),單存儲(chǔ)系統(tǒng), 當(dāng)系統(tǒng)的并發(fā)量到一定的程度,顯然給系統(tǒng)和 DB 會(huì)造成巨大的壓力

  • SOA

SOA的提出是在企業(yè)計(jì)算領(lǐng)域,就是要將緊耦合的系統(tǒng),劃分為面向業(yè)務(wù)的,粗粒度,松耦合,無狀態(tài)的服務(wù)。服務(wù)發(fā)布出來供其他服務(wù)調(diào)用,一組互相依賴的服務(wù)就構(gòu)成了SOA架構(gòu)下的系統(tǒng)?;谶@些基礎(chǔ)的服務(wù),可以將業(yè)務(wù)過程用類似BPEL流程的方式編排起來,而BPEL反映的是業(yè)務(wù)處理的過程,這些過程對(duì)于業(yè)務(wù)人員更為直觀,調(diào)整也比hardcode的代碼更容易。

當(dāng)然企業(yè)還需要對(duì)服務(wù)治理,比如服務(wù)注冊(cè)庫(kù),監(jiān)控管理等。

我們知道企業(yè)計(jì)算領(lǐng)域,如果不是交易系統(tǒng)的話,并發(fā)量都不是很大的,所以大多數(shù)情況下,一臺(tái)服務(wù)器就容納將許許多多的服務(wù),這些服務(wù)采用統(tǒng)一的基礎(chǔ)設(shè)施,可能都運(yùn)行在一個(gè)應(yīng)用服務(wù)器的進(jìn)程中。雖然說是面向服務(wù)了,但還是單一的系統(tǒng)。

  • 微服務(wù)

某乎上關(guān)于微服務(wù)和 SOA 的區(qū)別討論的話題很多,雖然二者都是面向服務(wù)的架構(gòu),但是 SOA 實(shí)際上也只是做到了業(yè)務(wù)上分離,在部署的時(shí)候還是將所有的業(yè)務(wù)的服務(wù)部署在了同一個(gè)服務(wù)器上,這樣看來在并發(fā)量比較大的情況下,并沒有對(duì)整個(gè)系統(tǒng)的服務(wù)器的壓力帶來緩解。

微服務(wù)則不同,不僅做到了每個(gè)服務(wù)單獨(dú)運(yùn)行在自己的進(jìn)程中,而且每個(gè)服務(wù)之間獨(dú)立部署,使用不同的 DB 系統(tǒng),這樣相比較 SOA 來說,不僅可以做到減少服務(wù)器的壓力,而且降低了大量的 DB 操作壓力

怎么用微服務(wù)

  • 單一職責(zé)原則
  • 服務(wù)自治原則
  • 輕量級(jí)通信原則
  • 微服務(wù)粒度

這里就不再解釋每個(gè)職責(zé)的含義,至此不僅知道了微服務(wù)的定義,優(yōu)缺點(diǎn),還總結(jié)了一些指導(dǎo)性的設(shè)計(jì)原則,下面來看下如何實(shí)現(xiàn)微服務(wù)的架構(gòu)

從開發(fā)和運(yùn)行平臺(tái)兩個(gè)角度來考慮技術(shù)的選型

  • 開發(fā)框架的選擇:

可以使用 spring cloud 作為微服務(wù)的開發(fā)框架,不僅僅是因?yàn)閟pring cloud 具備開箱即用的 效果而且目前位置spring cloud 的文檔,等各個(gè)方面的技術(shù)支持還算是比較全面的,當(dāng)然也可以選擇別的框架,如阿里的Dubbo,等這些框架。

  • 運(yùn)行環(huán)境:

微服務(wù)的運(yùn)行并不綁定運(yùn)行平臺(tái),微服務(wù)可以部署在PC Server,等云服務(wù)器上都是可以的,說到微服務(wù)的部署,不得不需要知道的就是 Docker ,它的出現(xiàn)給微服務(wù)的自動(dòng)化部署帶來極大的幫助,后面將詳細(xì)的介紹微服務(wù)的 Docker 環(huán)境下的部署

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容