Unix哲学,Microservices和DDD (2)
Microservice是微型-服務(wù)的合成詞,一個(gè)近年來(lái)很新的buzzword。Buzzword意為每個(gè)人都喜歡講的流行術(shù)語(yǔ)(大數(shù)據(jù)是另一個(gè)有趣的buzzword)。
像其他工程名詞一樣,微服務(wù)并沒(méi)有嚴(yán)格的定義。寫(xiě)這篇筆記的時(shí)候搜到一個(gè)定義如下:
微服務(wù)架構(gòu)
微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶(hù)提供最終價(jià)值。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP協(xié)議的RESTful API)。每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立的部署到生產(chǎn)環(huán)境、類(lèi)生產(chǎn)環(huán)境等。另外,應(yīng)當(dāng)盡量避免統(tǒng)一的、集中式的服務(wù)管理機(jī)制,對(duì)具體的一個(gè)服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文,選擇合適的語(yǔ)言、工具對(duì)其進(jìn)行構(gòu)建。
單純看這樣的描述并不會(huì)有什么感覺(jué),因此還是先介紹下微服務(wù)相關(guān)的一些技術(shù)背景。從上面的定義對(duì)進(jìn)程、協(xié)作的強(qiáng)調(diào)可以看出,微服務(wù)是強(qiáng)調(diào)并行化、可擴(kuò)展的模式,因此首先從可擴(kuò)展性角度分析微服務(wù)的價(jià)值。
可擴(kuò)展性(scalability)也是被廣泛討論的話(huà)題。為了優(yōu)化軟件的運(yùn)行速度,可以縱向擴(kuò)展(升級(jí)運(yùn)行軟件的硬件),也可以橫向擴(kuò)展(增加更多的硬件)。在橫向擴(kuò)展的基礎(chǔ)上,又有三種可用的策略:
The Scale Cube
X. 在網(wǎng)絡(luò)中部署同一軟件的多個(gè)拷貝,并使用負(fù)載均衡手段在軟件的各個(gè)副本之間分配任務(wù)
Y. 將軟件按照功能模塊拆分,并將不同模塊部署到不同的機(jī)器上
Z. 數(shù)據(jù)分區(qū),把每一區(qū)的數(shù)據(jù)放在不同的機(jī)器上存儲(chǔ)和處理
而應(yīng)用總的可擴(kuò)展性(圖中表示為長(zhǎng)方體的體積)與應(yīng)用在這三個(gè)方面的可擴(kuò)展性相關(guān)。傳統(tǒng)網(wǎng)站應(yīng)用(CRUD/MVC/RDBMS/3-tier/..)較為容易實(shí)現(xiàn)第一種擴(kuò)展方式。如果要在其他坐標(biāo)上擴(kuò)展,則需要首先解答更多的問(wèn)題:
如何保證拆分軟件模塊的正確性(Y)?
如何保證數(shù)據(jù)庫(kù)的拆分不會(huì)降低性能(Z)?
如何對(duì)待分布式系統(tǒng)中的一致性等問(wèn)題?
總結(jié)
以上是生活随笔為你收集整理的Unix哲学,Microservices和DDD (2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hibernate 、多表关联映射-组件
- 下一篇: 有效用例分析阅读笔记一