顧名思義陨帆,微服務(wù)就是微小的服務(wù)素跺,這里的服務(wù)和SOA(面向服務(wù)的架構(gòu))中的服務(wù)是一個概念齐苛,舉個例子,你通過百度地圖API能夠把一個地址轉(zhuǎn)化成一個經(jīng)緯度抗悍,這就是百度地圖提供的一個服務(wù)驹饺。
那什么是“微”钳枕?多“微”才算微缴渊?這里有一個很重要的原則,就是“高內(nèi)聚鱼炒,低耦合”衔沼,一個微服務(wù)在內(nèi)部必須是高內(nèi)聚的,它和其它服務(wù)必須是低耦合的昔瞧,如果你設(shè)計的服務(wù)和其它的服務(wù)緊密地耦合在一起指蚁,其它服務(wù)的變化會影響你的服務(wù)或者你的服務(wù)變化會要求其它服務(wù)跟著一起變化,你就享受不到微服務(wù)帶來的好處自晰。
我喜歡微服務(wù)主要是因為下面3點理由:
使用微服務(wù)之后凝化,團(tuán)隊開始有機(jī)會嘗試多種開發(fā)語言與新技術(shù)。 舉個例子酬荞,我們之前的一個單塊系統(tǒng)搓劫,后端一直使用Java EE,前臺一直使用ExtJs混巧,持續(xù)了很多年枪向,開發(fā)人員都用吐了,直到我們開始把一些獨立的模塊從單塊系統(tǒng)剝離出來之后咧党,我們才開始嘗鮮各種新技術(shù)秘蛔,比如MongoDB, NodeJs, AngularJs和VueJs等技術(shù)。
微服務(wù)能使改變局部化傍衡。舉個例子深员,我們開發(fā)的其中一個單塊系統(tǒng)隨著時間的變化越來越龐大,代碼的編譯蛙埂,打包倦畅,測試和上線都要花很長的時間。即使改動了一行代碼箱残,也會觸發(fā)整個系統(tǒng)的構(gòu)建滔迈,感覺非常重量級止吁。自從我們把一些模塊剝離出來以后,我們才有機(jī)會把改動限制在一個模塊之內(nèi)燎悍,如果這個模塊非常輕量級敬惦,上線的速度會非常快谈山,比如我們只改了NodeJs上的一個文件俄删,都不用編譯其它任何代碼,就能在1分鐘之內(nèi)把變動部署到線上奏路。
微服務(wù)能避免分布式團(tuán)隊畴椰。如果一個單塊系統(tǒng)很龐大,開發(fā)和運(yùn)維人員就會很多鸽粉,人員一多斜脂,就很有可能分布在各地。舉個例子触机,我們有一個單塊系統(tǒng)的成員就分布在上海帚戳,珠海和美國三地,要上線一個功能需要依賴三地同事的協(xié)同合作儡首,很多時間都浪費(fèi)在異地的溝通和等待上了片任。但是如果使用微服務(wù)設(shè)計,把一個大的單塊系統(tǒng)分解成足夠小的微服務(wù)蔬胯,就有可能把一個微服務(wù)的所有控制權(quán)交給一個本地小團(tuán)隊对供,大幅度地減少溝通和等待的成本。同時這個小團(tuán)隊的積極性氛濒,主動性以及創(chuàng)造性也會大幅增長产场。
當(dāng)然要享受到上述的三點好處是不容易的,怎么把一個單塊系統(tǒng)重構(gòu)成高內(nèi)聚低耦合的多個相互協(xié)同的微服務(wù)絕對是一個挑戰(zhàn)泼橘,如果你對微服務(wù)也開始感興趣了涝动,墻裂推薦《微服務(wù)設(shè)計》這本書,邊讀邊實踐炬灭,相信你一定會獲益匪淺醋粟。