<meta charset="utf-8">
開篇
本文主要是介紹包括微服務的概念勾给,微服務與傳統(tǒng)的單系統(tǒng)架構以及 SOA 相比較的優(yōu)劣勢,最后簡單說了下微服務的設計原則椰于,開發(fā)環(huán)境,部署方式。
對于了解過微服務的大佬們褥民,這篇文章可能不存在任何有實際價值的地方,但是有些時候概念也是要了解一下的洗搂,很多時候我們雖然知道我們要描述的東西是什么但是卻無法通過語言來描述出來消返,筆者曾經(jīng)被問過:“什么是微服務?”耘拇,雖然平時大家都在說微服務撵颊,但是一旦讓自己去描述的時候可能真的就無法組織好語言。
什么是微服務
就目前看來惫叛,微服務的本身并沒有嚴格意思上的定義倡勇,每個人對微服務的理解都不同,Martin Fowler 在他的博客中這樣定義了微服務的概念:
微服務架構風格是一種將單體應用程序開發(fā)為一組小型服務的方法嘉涌,每個服務運行在自己的進程中妻熊,服務之間采用輕量級的通訊機制,這些服務圍繞業(yè)務能力構建并可以通過全自動部署仑最,這些服務共用一個最小型的集中式的管理扔役,每個服務可以使用不同的開發(fā)語言 ,使用不同的存儲技術警医。
總結來說微服務的本身應該具備以下特點:
- 每個服務獨立運行在自己的進程中
- 一系列個服務共同組成了整個系統(tǒng)
- 每個服務自負責系統(tǒng)中某一個模塊的業(yè)務功能
- 服務之間的通信采用的是輕量級的通訊機制
- 每個服務可以采用不同的開發(fā)語言以及可以使用不同的存儲技術
- 全自動的部署方式
為什么使用微服務
至于為什么使用微服務亿胸,傳統(tǒng)的思想告訴我,就像買一件商品一樣预皇,我們總會相同的價格去比較質量侈玄,相同的質量去比較價格,在我們選擇微服務的時候吟温,也很容易想到“微服務能給我們帶來那些好處”序仙,這里網(wǎng)絡上很多大佬都給出了很多關于微服務的優(yōu)勢,我這里打算從三個方面去闡述這個問題:
- 傳統(tǒng)服務(單體服務)
優(yōu)勢:(曾經(jīng))易開發(fā)溯街,易測試诱桂,易部署,直到目前為止很多簡單的系統(tǒng)任然會選擇這種傳 統(tǒng)的單服務的架構模式呈昔,其中的原因當然也是多方面的(技術挥等,經(jīng)濟的角度考慮)
劣勢:整個系統(tǒng)比較笨重,給后期的維護工作造成了 極大的壓力堤尾,單系統(tǒng)肝劲,單存儲系統(tǒng), 當系統(tǒng)的并發(fā)量到一定的程度,顯然給系統(tǒng)和 DB 會造成巨大的壓力
- SOA
SOA的提出是在企業(yè)計算領域辞槐,就是要將緊耦合的系統(tǒng)掷漱,劃分為面向業(yè)務的,粗粒度榄檬,松耦合卜范,無狀態(tài)的服務。服務發(fā)布出來供其他服務調(diào)用鹿榜,一組互相依賴的服務就構成了SOA架構下的系統(tǒng)海雪。基于這些基礎的服務舱殿,可以將業(yè)務過程用類似BPEL流程的方式編排起來奥裸,而BPEL反映的是業(yè)務處理的過程,這些過程對于業(yè)務人員更為直觀沪袭,調(diào)整也比hardcode的代碼更容易湾宙。
當然企業(yè)還需要對服務治理,比如服務注冊庫冈绊,監(jiān)控管理等侠鳄。
我們知道企業(yè)計算領域,如果不是交易系統(tǒng)的話焚碌,并發(fā)量都不是很大的畦攘,所以大多數(shù)情況下,一臺服務器就容納將許許多多的服務十电,這些服務采用統(tǒng)一的基礎設施,可能都運行在一個應用服務器的進程中叹螟。雖然說是面向服務了鹃骂,但還是單一的系統(tǒng)。
- 微服務
某乎上關于微服務和 SOA 的區(qū)別討論的話題很多罢绽,雖然二者都是面向服務的架構畏线,但是 SOA 實際上也只是做到了業(yè)務上分離,在部署的時候還是將所有的業(yè)務的服務部署在了同一個服務器上良价,這樣看來在并發(fā)量比較大的情況下寝殴,并沒有對整個系統(tǒng)的服務器的壓力帶來緩解。
微服務則不同明垢,不僅做到了每個服務單獨運行在自己的進程中蚣常,而且每個服務之間獨立部署,使用不同的 DB 系統(tǒng)痊银,這樣相比較 SOA 來說抵蚊,不僅可以做到減少服務器的壓力,而且降低了大量的 DB 操作壓力
怎么用微服務
- 單一職責原則
- 服務自治原則
- 輕量級通信原則
- 微服務粒度
這里就不再解釋每個職責的含義,至此不僅知道了微服務的定義贞绳,優(yōu)缺點谷醉,還總結了一些指導性的設計原則,下面來看下如何實現(xiàn)微服務的架構
從開發(fā)和運行平臺兩個角度來考慮技術的選型
- 開發(fā)框架的選擇:
可以使用 spring cloud 作為微服務的開發(fā)框架冈闭,不僅僅是因為spring cloud 具備開箱即用的 效果而且目前位置spring cloud 的文檔俱尼,等各個方面的技術支持還算是比較全面的,當然也可以選擇別的框架萎攒,如阿里的Dubbo遇八,等這些框架。
- 運行環(huán)境:
微服務的運行并不綁定運行平臺躺酒,微服務可以部署在PC Server押蚤,等云服務器上都是可以的,說到微服務的部署羹应,不得不需要知道的就是 Docker 揽碘,它的出現(xiàn)給微服務的自動化部署帶來極大的幫助,后面將詳細的介紹微服務的 Docker 環(huán)境下的部署