微服务的概念——《微服务设计》读书笔记
《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》(Eric Evans):告訴我們用代碼呈現(xiàn)真實(shí)世界的重要性,并且告訴我們?nèi)绾胃玫亟!?/span>
? ? ? 持續(xù)交付理論:如何更有效及更高效地發(fā)布軟件品,并指出保持每次提交均可發(fā)布的重要性。
? ? ? 六邊形架構(gòu)理論(Alistair Cockburn):把我們從分層架構(gòu)中拯救出來(lái),從而能更好地體現(xiàn)業(yè)務(wù)邏輯。(http://alistair.cockburn.us/Hexagonal+architecture)
? ? ? 隨著領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、持續(xù)交付、按需要虛擬化、基礎(chǔ)設(shè)施自動(dòng)化、小型自治團(tuán)隊(duì)、大型集群系統(tǒng)這些實(shí)踐的流行,微服務(wù)也就應(yīng)運(yùn)而生。
?
什么是微服務(wù)?
? ? ? 微服務(wù)就是一些協(xié)同工作的小而自治的服務(wù)。
1.小,專(zhuān)注
? ? ??單一職責(zé)原則:把因相同原因而變化的東西聚合在一起,把因不同原因而變化的東西分享開(kāi)來(lái)。(Single Resonsibility Principle,http://programmer.97things.oreilly.com/wiki/index.php/The_Single_Responsibility_Principle)
微服務(wù)將內(nèi)聚性應(yīng)用在獨(dú)立的服務(wù)上,根據(jù)業(yè)務(wù)的邊界來(lái)確定服務(wù)的邊界,可避免代碼庫(kù)過(guò)大衍生的問(wèn)題。
? ? ? 討論:多小才算小?
? ? ? 使用代碼行來(lái)衡量是有問(wèn)題的。大家都認(rèn)為自己的系統(tǒng)過(guò)于龐大,卻不知道什么才算是小。ok,那么就一直拆分,直到你不再感覺(jué)它過(guò)于龐大,那么它有可能就足夠小了。另外,如果你的小團(tuán)隊(duì)無(wú)法正常維護(hù),那么它就太大了。
? ? ? 小的優(yōu)點(diǎn)與缺點(diǎn):獨(dú)立性帶來(lái)的好處越多,但管理也越復(fù)雜。
2.自治性
? ? ? 一個(gè)微服務(wù)是一個(gè)獨(dú)立的實(shí)體,它可以獨(dú)立部署,獨(dú)立修改,服務(wù)之間通過(guò)暴露API來(lái)進(jìn)行通信,API的實(shí)現(xiàn)技術(shù)應(yīng)避免與具體技術(shù)相關(guān),以保證技術(shù)的選擇不受限制。
? ? ? 自治性其實(shí)就是要求你的服務(wù)與其他的服務(wù)之間很好的解藕,判斷是否解藕的黃金法則:你是否能夠修改一個(gè)服務(wù)并對(duì)其進(jìn)行部署,而不影響其他任何服務(wù)?
? ? ?
微服務(wù)的好處
1.技術(shù)異構(gòu)性
? ? ??對(duì)于微服務(wù)而言,我們可以根據(jù)需要采用最適合這個(gè)服務(wù)所需要的技術(shù)。
? ? ? 對(duì)于微服務(wù)系統(tǒng)而言,總會(huì)存在一些地方讓我們可以嘗試新技術(shù),這種可以快速采用新技術(shù)的能力對(duì)很多組織而言是非常有價(jià)值的。
2.彈性
? ? ? 如果系統(tǒng)中的一個(gè)組件不可用,但并沒(méi)有傳染到其他的組件,沒(méi)有導(dǎo)致級(jí)聯(lián)故障,系統(tǒng)的其他部分還可以正常工作。
3.擴(kuò)展
? ? ? 龐大的單塊服務(wù)只能作為一個(gè)整體進(jìn)行擴(kuò)展,即使系統(tǒng)中只有一小部分存在性能問(wèn)題,也需要對(duì)整個(gè)服務(wù)進(jìn)行擴(kuò)展。如果使用較小的多個(gè)服務(wù),則可以對(duì)只需要進(jìn)行擴(kuò)展的服務(wù)進(jìn)行擴(kuò)展,這樣就可以把那些不需要擴(kuò)展的服務(wù)運(yùn)行在更小的、性能稍差的硬件上。
4.簡(jiǎn)化部署
? ? ? 在有幾百萬(wàn)行代碼的單塊應(yīng)用中,即使只修改了一行代碼,也需要重新部署整個(gè)應(yīng)用程序才能發(fā)布該變更。這種部署影響很大、風(fēng)險(xiǎn)很高,于是部署的頻率就會(huì)降低,兩次部署的差異越大,出錯(cuò)的可能性就更大!
? ? ? 在微服務(wù)架構(gòu)中,各個(gè)服務(wù)的部署都是獨(dú)立的,這樣就可以更快地對(duì)特定部分的代碼進(jìn)行部署,如果真出了問(wèn)題,也只會(huì)影響一個(gè)服務(wù),并且容易快速回滾,這樣就意味著客戶(hù)可以快速使用我們的新功能。
5.與組織結(jié)構(gòu)相匹配
? ? ? 可以避免出現(xiàn)龐大的代碼庫(kù),從而獲得理想的團(tuán)隊(duì)大小及生產(chǎn)力。
6.可組合性
? ? ? 分布式系統(tǒng)和面向服務(wù)架構(gòu)的主要好處是易于重用已有功能。不同于以往的單純的Web、PC端程序,人們有更多的選擇使用同一個(gè)功能。微服務(wù)中會(huì)開(kāi)放很多接口供外部調(diào)用,當(dāng)情況發(fā)生改變時(shí),可以使用不同的方式構(gòu)建應(yīng)用。
7.可替代
? ? ? 在單塊系統(tǒng)中,刪除一百行代碼會(huì)讓人心惶惶,而在微服務(wù)系統(tǒng)中,可以輕易地重寫(xiě)服務(wù),或刪除不再使用的服務(wù)。
?
面向服務(wù)的架構(gòu)(SOA)
? ? ? SOA是一種設(shè)計(jì)方法,它通過(guò)提供服務(wù)向外提供一系列功能,服務(wù)之間通過(guò)網(wǎng)絡(luò)調(diào)用,而非采用進(jìn)程內(nèi)調(diào)用的方式進(jìn)行通信。
? ? ? SOA可以用來(lái)應(yīng)用龐大的單塊應(yīng)用程序,從而提高軟件的復(fù)用性,比如多個(gè)終端共享一個(gè)服務(wù)。但大多數(shù)人對(duì)SOA的理解未達(dá)成共識(shí),而微服務(wù)就是實(shí)現(xiàn)SOA的一種新方法,就像XP或Scrum是敏捷軟件開(kāi)發(fā)的一種特定方法一樣。
?
其他分解技術(shù)
1.共享庫(kù)
? ? ? 有些共享庫(kù)不屬于任何一個(gè)業(yè)務(wù)領(lǐng)域,并且可以在整個(gè)組織中進(jìn)行重用。但還是需要小心,如果使用共享庫(kù)來(lái)做服務(wù)之間的通信的話(huà),那么它會(huì)成為一個(gè)藕合點(diǎn)。
2.模塊
? ? ??有些語(yǔ)言提供自己的模塊分解技術(shù),它允許對(duì)模塊進(jìn)行生命周期管理,這就可以把模塊部署到運(yùn)行的進(jìn)程中并且可以不在停止整個(gè)進(jìn)程的前提下對(duì)某個(gè)模塊進(jìn)行修改,但很少有人這么做,因?yàn)楸M管在單塊進(jìn)程中創(chuàng)建隔離性很好的模塊是可能的,但是它們這些模塊會(huì)迅速和其他代碼藕合在一起。
? ? ? 同時(shí),在單進(jìn)程中采用模塊化技術(shù),也會(huì)大大限制我們采用新技術(shù)和獨(dú)立服務(wù)進(jìn)行擴(kuò)展的能力。
?
參考
? ? ? 《微服務(wù)設(shè)計(jì)》(Sam Newman 著 / 崔力強(qiáng) 張駿 譯)
原文地址:http://www.cnblogs.com/gudi/p/6531370.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的微服务的概念——《微服务设计》读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NET Core 2.0及.NET S
- 下一篇: netcore实践:跨平台动态加载nat