什么是微服務(wù)?
微服務(wù)沒有一個標準統(tǒng)一的概念,個人理解為:微服務(wù)是一種可以讓軟件職責(zé)單一、松耦合、自包含、可以獨立運行和部署的架構(gòu)思想。
關(guān)鍵思想就是:拆分、單一、獨立、組件化。把原本一個龐大、復(fù)雜的項目按業(yè)務(wù)邊界拆分一個一個獨立運行的小項目,通過接口的方式組裝成一個大的項目。
微服務(wù)解決了什么問題?
微服務(wù)的出現(xiàn)及流行,一定有它的過人之處,既解決了非微服務(wù)項目的部分問題或缺點。
相對于微服務(wù),普通的項目都會包含很多功能的,是一個大而全的“超級”工程。比如:以普通架構(gòu)方式實現(xiàn)的電商平臺會是一個包含:登錄、權(quán)限、會員、商品庫存、訂單、收藏、關(guān)注、購物車等功能的單一項目。隨著項目業(yè)務(wù)越來越復(fù)雜、開發(fā)人員越來越多相應(yīng)開發(fā)、編譯、部署、技術(shù)擴展、水平擴展都會受到限制。
開發(fā)
太多功能在一個項目中,可能會讓代碼復(fù)雜、結(jié)構(gòu)混亂、業(yè)務(wù)關(guān)聯(lián)混亂、技術(shù)單一。過多的功能,讓整個項目結(jié)構(gòu)復(fù)雜,業(yè)務(wù)相互交織,可能導(dǎo)致開發(fā)人員對業(yè)務(wù)的理解和代碼實現(xiàn)相互交織,最后沒人能完全理解整個項目。而且也很難控制每個開發(fā)人員能“合法合規(guī)”的編碼,可能會把兩個本來松耦合、互不影響的功能因為實現(xiàn)“簡單”就偷懶強關(guān)聯(lián)在一起。
技術(shù)單一
單一的項目為了技術(shù)的統(tǒng)一和管理的簡單方便,一般都會采用統(tǒng)一的技術(shù)實現(xiàn)。但是超大型業(yè)務(wù)如電商平臺,不可能只采用一種技術(shù)(如:java),可能會結(jié)合業(yè)務(wù)及不同技術(shù)優(yōu)缺點和技術(shù)團隊優(yōu)執(zhí)采用不同的技術(shù)。如果把項目拆分成不同的小項目,每個小項目可以根據(jù)自己的特點采用不同技術(shù),只需要提供統(tǒng)一的接口實現(xiàn)對接即可,最大化技術(shù)的優(yōu)勢。
編譯
過于龐大的代碼也會導(dǎo)致整個項目編譯時間過長,一次簡單的修改或一個簡單的單元測試需要漫長的編譯和啟動。
版本控制
過多的開發(fā)人員在同一個項目中共同開發(fā)不同業(yè)務(wù)模塊,也會大大增加版本沖突。
部署
一個簡單的修改需要部署整個項目。當多個功能同時上線,但僅僅因為一個小功能失敗,就會導(dǎo)致其它所有功能一起回滾。
擴展
互聯(lián)網(wǎng)的飛速發(fā)展,用戶和請求量急劇增加,傳統(tǒng)的項目很難擴展(水平、垂直),即集群和分布式擴展的問題。
微服務(wù)如何解決上面問題?
以上就是單個(單體)大項目的問題,微服務(wù)就是要解決上面的問題。
核心思路很簡單,就是拆分,即然是單體項目的問題,那么直接把項目拆分成一個個小項目是不是就可以完美解決。
微服務(wù)有哪些缺點?
然而,這并不是銀彈,也不是最完美的解決方案。微服務(wù)有自己的優(yōu)點,也帶來了相應(yīng)的劣勢。具體如下:
如何拆分:微服務(wù)的核心就是拆分項目,把整個項目模塊化、組件化;職責(zé)更單一,精中力量做好一件事。但是如何拆分才是合理的?通常的作法是,按業(yè)務(wù)拆分,功能從業(yè)務(wù)上分類,非常耦合的分在同一個微服務(wù)中;反之,耦合性非常低的則放到不同的微服務(wù)。
事務(wù):原本在同一個項目中的兩個操作,如果拆分到不同的項目中,那么就可能會遇到分布式事務(wù)的問題。這是一個棘手但沒有完美解決方案的問題?;驹瓌t是,需要在同一事務(wù)中實現(xiàn)的兩個操作屬于強耦合業(yè)務(wù),最好拆分到同一個微服務(wù)。如果確實是兩個微服務(wù)(如:減庫存、扣款)則通過其它方式(如:消息隊列、分布式事務(wù)鎖、重試機制、對賬)來解決
spring cloud
微服務(wù)是一個架構(gòu)思想,并不是一種實現(xiàn),它指明了解決單體應(yīng)該缺點的方向,但并沒有給定相應(yīng)的實現(xiàn)和解決方案以及細節(jié)。
spring cloud是spring提供的,基于spring boot以及結(jié)合Netflix 相關(guān)思想和代碼對微服務(wù)理念的java實現(xiàn)。spring cloud本質(zhì)上是分布式解決方案,但微服務(wù)最終也落實到分布式,因此也是對微服務(wù)的實現(xiàn)方案。
Spring Cloud 為開發(fā)人員提供了一些可以用于快速構(gòu)建分布式系統(tǒng)通用模式的工具(例如:配置管理、服務(wù)注冊與發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線)。分布式系統(tǒng)的協(xié)調(diào)趨于一些模版模式, 并且,使用Spring Cloud使開發(fā)人員可以快速創(chuàng)建實現(xiàn)了這些模式的服務(wù)和應(yīng)用。 他們可以在任何的分布式環(huán)境中良好運行,這些環(huán)境包括開發(fā)人員自己的筆記本、裸機上的數(shù)據(jù)中心、像Cloud Foundry這樣的托管平臺(云平臺)。
spring cloud主要提供了分布系統(tǒng)中以下幾個開箱即用的功能:
分布式/版本化/集中化配置 - spring cloud config 服務(wù)注冊發(fā)現(xiàn) - Netflix Eureka 路由 - Netflix Zuul 服務(wù)之間的點對點調(diào)用(Service-to-service calls)負載均衡-Netflix Ribbon 斷路器 - Netflix Hystrix 分布式消息
五大核心組件:
服務(wù)注冊發(fā)現(xiàn) - Netflix Eureka
配置中心 - spring cloud config
負載均衡-Netflix Ribbon
斷路器 - Netflix Hystrix
路由(網(wǎng)關(guān)) - Netflix Zuul
電子商務(wù)社交平臺源碼請加企鵝求求:三五三六二四七二五九