2018年12月28日
最近項目上需要通過微服務(wù)的方式進行實現(xiàn),同時,我也學(xué)習(xí)查閱大量關(guān)于微服務(wù)架構(gòu)的介紹,總是感覺自己已經(jīng)了解了微服務(wù)架構(gòu)革为,但有是模糊不清的,所以我最近購買了一本《微服務(wù)設(shè)計原理與架構(gòu)》進行系統(tǒng)性的學(xué)習(xí)舵鳞,在此我需要記錄一下學(xué)習(xí)筆記震檩。
什么是微服務(wù)?
所謂微服務(wù)(Microservices),就是一些具有足夠小的粒度蜓堕、能夠相互協(xié)作且自治的服務(wù)體系抛虏。每個微服務(wù)都比較單一,僅關(guān)注完成一個具體業(yè)務(wù)功能并能很好地完成該功能套才,而這里的功能代表都是一種業(yè)務(wù)能力嘉蕾。
你是不是覺得這是什么狗屁解釋,怎么這么難以理解霜旧?O(∩_∩)O哈哈~错忱,說真的我也是一臉懵逼,所以只能耐心繼續(xù)學(xué)習(xí)了挂据。
微服務(wù)以清,關(guān)鍵在于它的“微”特性,“微”是“小”的同義詞崎逃,那么微服務(wù)就是小型的服務(wù)嗎掷倔?
微服務(wù)的大小:微服務(wù)一個業(yè)務(wù)獨立个绍、部署獨立勒葱、數(shù)據(jù)獨立的最小工作單元。
什么是單塊系統(tǒng)巴柿?
所謂單塊系統(tǒng)凛虽,是一個系統(tǒng)所涉及的各個組件都打包成一個一體化結(jié)構(gòu)并進行部署和運行。在JAVA EE 領(lǐng)域广恢,這種一體化結(jié)構(gòu)很多時候體現(xiàn)為一個WAR包凯旋,而部署和運行的環(huán)境是以Tomcat為代表的各種應(yīng)用服務(wù)器。
什么是分布式系統(tǒng)钉迷?
分布式系統(tǒng)至非,是指硬件或者軟件組成分布在不同的網(wǎng)絡(luò)計算機上,彼此之間僅僅通過消息傳遞進行通信和協(xié)調(diào)的系統(tǒng)糠聪。如圖所示荒椭,該分布式系統(tǒng)包含分布式服務(wù)、消息中間件和分布式緩存等常見的用于構(gòu)建分布式系統(tǒng)的技術(shù)實現(xiàn)方式舰蟆。他們位于一個封閉或者開放的網(wǎng)絡(luò)環(huán)境中趣惠,相互之間通過服務(wù)的注冊和發(fā)現(xiàn)狸棍、消息傳遞、數(shù)據(jù)的緩存共享等機制完成協(xié)作信卡。
? ? ? ?在分布式系統(tǒng)中,為了打破單塊系統(tǒng)中集中式的系統(tǒng)架構(gòu),需要引入系統(tǒng)拆分的思想和實踐隔缀。拆分的需求來自組織結(jié)構(gòu)變化题造、交付速度傍菇、業(yè)務(wù)需求以及技術(shù)需求所引起的変化。一般認(rèn)為系統(tǒng)拆分的基本思路有兩種,即縱向( Vertical)拆分和橫向( Horizontal)拆分界赔。
? ? ? 所謂縱向拆分,就是將一個大應(yīng)用拆分為多個小應(yīng)用,如果新業(yè)務(wù)較為獨立,那么就直接 將其設(shè)計部署為一個獨立的應(yīng)用系統(tǒng)即可丢习。如圖所示,我們可以將移動醫(yī)療系統(tǒng)中的預(yù) 約掛號業(yè)務(wù)拆分成訂單、醫(yī)院和用戶等獨立業(yè)務(wù)子系統(tǒng)淮悼「赖停縱向拆分關(guān)注于業(yè)務(wù),通過梳理產(chǎn)品 線,將內(nèi)聚度較高的相關(guān)業(yè)務(wù)進行剝離從而形成不同的子系統(tǒng)。?
相對于縱向拆分的面向業(yè)務(wù)特性,橫向拆分更多地關(guān)注于技術(shù)袜腥。所謂橫向拆分,就是通過 將可以復(fù)用的業(yè)務(wù)拆分出來,獨立部署為分布式服務(wù),調(diào)用這些分布式服務(wù),構(gòu)建復(fù)雜的新業(yè) 務(wù)见擦。所以,橫向拆分的關(guān)鍵在于識別可復(fù)用的業(yè)夤,設(shè)計服務(wù)接口并拠范眼務(wù)依賴關(guān)。橫向拆分的基本實現(xiàn)方式是構(gòu)建分布式服務(wù)體系,圖1-6是對圖1-5所示的預(yù)約掛號業(yè)務(wù)進行橫 向拆分的結(jié)果羹令±鹇牛可以看到,當(dāng)我們把訂單、醫(yī)生福侈、號源和用戶等業(yè)務(wù)抽象成獨立的垂直化服 務(wù),并在各個服務(wù)上層實現(xiàn)分布式環(huán)境下的調(diào)用和管理框架,系統(tǒng)的業(yè)務(wù)就可以轉(zhuǎn)變?yōu)橐环N排 列組合的構(gòu)建方式酒来。如基于訂單和支付服務(wù),我們可以構(gòu)建出業(yè)務(wù)1,而業(yè)務(wù)2可能只依賴于 醫(yī)院和用戶管理服務(wù)。分布式服務(wù)框製提供了一利校間枚建的機?限近各個分布式服務(wù)的 故術(shù)團隊肪凛、交付獨立發(fā)展的前提下,確保業(yè)務(wù)整合的靈活性和高效堰汉。