一起來學(xué)Spring Cloud | 前言:Spring Cloud 與Spring Boot

目前大家都在說微服務(wù)郎嫁,其實(shí)微服務(wù)不是一個名字泽铛,是一個架構(gòu)的概念辑鲤,大家現(xiàn)在使用的基于RPC框架(dubbo、thrift等)架構(gòu)其實(shí)也能算作一種微服務(wù)架構(gòu)弛随。

目前越來越多的公司開始使用微服務(wù)架構(gòu)舀透,所以在目前招聘java崗位時(shí)礁击,有springcloud經(jīng)驗(yàn)還是會占一點(diǎn)優(yōu)勢逗载,今天young就和大家一起來學(xué)習(xí)Spring Cloud微服務(wù)框架厉斟。

本章擦秽,我們先解決新人都頭疼的一個問題感挥,spring Cloud 與spring Boot到底是什么關(guān)系越败?究飞?亿傅??

一 谅阿、什么是spring Boot

在講解什么是spring Boot之前签餐,我們先可以思考一下贱田,目前使用spring時(shí)嘴脾,有沒有感覺以下的兩個問題經(jīng)常被頻繁的吐槽

  1. 在過去的 Spring 發(fā)中译打,需要引入大量的 xml 文件奏司。Spring 2.5 引入了包掃描韵洋,消除了顯式的配置 Bean黄锤。 Spring 3.0 又引入了基于 JavaBean 的配置鸵熟,這種方式可以取代 xml 文件流强。
    盡管如此打月,在實(shí)際的開發(fā)中還是需要配置 xml 文件蚕捉,例如配 SpringMVC 事務(wù)管理器鱼冀、過濾器千绪、切面等等荸型。

  2. 在項(xiàng)目的開發(fā)過程中瑞妇,會引入大量的第三方依賴辕狰,選擇依賴是一件不容易的事蔓倍,解決依賴與依賴之間的沖突也很耗費(fèi)精力偶翅。所以聚谁,在以前的Spring開發(fā)中艰垂,依賴管理也是一件棘手的事情蹦魔。

結(jié)合上面Spring的兩點(diǎn)瑕疵撞牢,我們在來總結(jié)一下憔披,什么是SpringBoot:

  1. Spring Boot并不是一個全新的框架,它不是spring解決方案的一個替代品芬膝,而是spring的一個封裝望门。所以,你以前可以用spring做的事情锰霜,現(xiàn)在用spring Boot都可以做筹误。

  2. Spring Boot是一種全新的編程規(guī)范,是一個服務(wù)于框架的框架癣缅,服務(wù)范圍是簡化配置文件和起步依賴厨剪,他的產(chǎn)生簡化了框架的使用,所謂簡化是指簡化了Spring眾多框架中所需的大量且繁瑣的配置文件友存。

二 祷膳、什么是spring Cloud

  1. Spring Cloud是一個微服務(wù)框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系統(tǒng)解決方案屡立,它依賴于 Spring Boot 膨俐,有快速開發(fā)、持續(xù)交付和容易部署等特點(diǎn)兄淫。

  2. Spring Cloud不像其他Spring子項(xiàng)目那樣相對獨(dú)立赂乐,它是一個擁有諸多子項(xiàng)目的大型綜合項(xiàng)目崩溪。

三 乳幸、Spring Cloud與Spring Boot的對比

  1. Spring Boot 是 Spring的一套快速配置腳手架,可以基于Spring Boot 快速開發(fā)單個微服務(wù);Spring Cloud是一個基于Spring Boot實(shí)現(xiàn)的云應(yīng)用開發(fā)工具养筒;

  2. Spring Boot專注于快速兵多、方便集成的單個個體;Spring Cloud是關(guān)注全局的服務(wù)治理框架您宪;

  3. Spring Boot使用了默認(rèn)大于配置的理念,很多集成方案已經(jīng)幫你選擇好了捏卓,能不配置就不配置;Spring Cloud很大的一部分是基于Spring Boot來實(shí)現(xiàn)。

  4. Spring Boot可以離開Spring Cloud獨(dú)立使用開發(fā)項(xiàng)目,但是SpringCloud離不開Spring Boot厢呵,屬于依賴的關(guān)系蝌矛。

四椭岩、Spring Cloud的常用組件

Spring Cloud 提供了開發(fā)分布式微服務(wù)系統(tǒng)的一些常用組件塌计,例如服務(wù)注冊和發(fā)現(xiàn)热芹、配置中心、熔斷器、 智能路由 祷蝌、微代理糊啡、控制總線、全局鎖役拴、分布式會話等。

spring Cloud的子項(xiàng)目很多,但是目前在實(shí)際工作中门驾,我們一般業(yè)務(wù)項(xiàng)目使用到的組件就是常規(guī)的幾個聂沙,其它的一般開發(fā)用不到,做為新手,我們先熟悉常用且重要的幾個闯冷。

接下來的這8個常用組件的描述來自(方志朋的《深入理解Spring Cloud 與微服務(wù)構(gòu)建一書》)

(1)服務(wù)注冊和發(fā)現(xiàn)組件 Eureka

利用 Eureka 組件可以很輕松地實(shí)現(xiàn)服務(wù)的注冊和發(fā)現(xiàn)功能洒琢。 Eureka 組件提供了服務(wù)的健康監(jiān)測,以及界面友好的 UI 汪厨。通過 Eureka 組件提供的 UI, Eureka 組件可以讓開發(fā)人員隨時(shí)了解服務(wù)單元的運(yùn)行情況。另外 Spring Cloud 也支持 Consul 和Zookeepe 采盒,用于注冊和發(fā)現(xiàn)服務(wù)嫡纠。

(2)熔斷組件 Hystrix

Hystrix是一個 熔斷組件,它除了有一些基本的熔斷器功能外者蠕,還能夠?qū)崿F(xiàn)服務(wù)降級踱侣、服務(wù)限流的功能逞壁。另外 Hystrix 提供了熔斷器的健康監(jiān)測,以及熔斷器健康數(shù)據(jù)的 API 口擅腰。 Hystrix Dashboard 組件提供了單個服務(wù)熔斷器的健康狀態(tài)數(shù)據(jù)的界面展示功能取刃,Hystrix Turbine 組件提供了多個服務(wù)的熔斷器的健康狀態(tài)數(shù)據(jù)的界面展示功能出刷。

(3)負(fù)載均衡組件 Ribbon

Ribbon 是一個負(fù)載均衡組件璧疗,它通常和 Eureka 、Zuul馁龟、 RestTemplate崩侠、Feign 配合使用。Ribbon 和Zuul 配合坷檩,很容易做到負(fù)載均衡却音,將請求根據(jù)負(fù)載均衡策略分配到不同的服務(wù)實(shí)例中。Ribbon和RestTemplate淌喻、Feign配合僧家,在消費(fèi)服務(wù)時(shí)能夠做到負(fù)載均衡。

(4)路由網(wǎng)關(guān) Zuul

路由網(wǎng)關(guān) Zuul 有智能路由和過濾的功能裸删。內(nèi)部服務(wù)的 API 接口通過 Zuul 網(wǎng)關(guān)統(tǒng)一對外暴露八拱,內(nèi)部服務(wù)的 API 接口不直接暴露,防止了內(nèi)部服務(wù)敏感信息對外暴露涯塔。在默認(rèn)的情況下肌稻,Zuul和Ribbon相結(jié)合,能夠做到負(fù)載均衡匕荸、智能路由爹谭。Zuul過濾功能是通過攔截請求來實(shí)現(xiàn)的,可以對一些用戶的角色和權(quán)限進(jìn)行判斷榛搔,起到安全驗(yàn)證的作用诺凡,同時(shí)也可以用于輸出實(shí)時(shí)的請求曰志东揣。
上述的4個組件都來自于 Netflix 的公司,稱為 Spring Cloud Netflix腹泌。

(5)Spring Cloud Config

Spring Cloud Config 組件提供了配置文件統(tǒng)一管理的功能嘶卧。Spring Cloud Config包括Server端和Client端,Server 端讀取本地倉庫或者遠(yuǎn)程倉庫的配置文件凉袱,所有的Client 向Server讀取配置信息芥吟,從而達(dá)到配置文件統(tǒng)一管理的目的。 通常情況下专甩, Spring Cloud Config 和 Spring Cloud Bus 相互配合刷新指定 Client 或所有Client的配置文件钟鸵。

(6) Spring Cloud Security

Spring Cloud Security 是對 Spring Security 組件的封裝,Spring Cloud Security 向服務(wù)單元提供了用戶驗(yàn)證和權(quán)限認(rèn)證涤躲。一般來說棺耍,單獨(dú)在微服務(wù)系統(tǒng)中使用 Spring Cloud Security 是很少見的,一般它會配合 Spring Security 0Auth2 組件一起使用篓叶, 通過搭建授權(quán)服務(wù)烈掠,驗(yàn)證 Token或者 JWT 這種形式對整個微服務(wù)系統(tǒng)進(jìn)行安全驗(yàn)證。

(7)Spring Cloud Sleuth

Spring Cloud Sleuth 是一個分布式鏈路追蹤組件缸托,它封裝了 Dapper Zipkin 和 Kibana 等組件左敌,通過它可以知道服務(wù)之間的相互依賴關(guān)系,并實(shí)時(shí)觀察鏈路的調(diào)用情況俐镐。

(8)Spring Cloud Stream

Spring Cloud Stream Spring Cloud 框架的數(shù)據(jù)流操作包矫限,可以封裝 RabbitMq 、ActiveMq 佩抹、Kafka 叼风、Redis 等消息組件,利用 Spring Cloud Stream 可以實(shí)現(xiàn)消息的接收和發(fā)送棍苹。

五无宿、微服務(wù)相比單體服務(wù)的優(yōu)缺點(diǎn)

關(guān)于微服務(wù)的優(yōu)缺點(diǎn),我也不想用官網(wǎng)模板或者書上說的一大堆枢里,young我也經(jīng)歷了從單體服務(wù)到微服務(wù)項(xiàng)目的過渡孽鸡,接下來,我就從個人工作體會接地氣的講解一下微服務(wù)的優(yōu)缺點(diǎn)栏豺。

優(yōu)點(diǎn):

  1. 新人上手快:新人在參與新項(xiàng)目時(shí)彬碱,只需要下載需求相關(guān)模塊的代碼,了解這部分代碼就行了奥洼,不需要關(guān)注整個項(xiàng)目的代碼邏輯巷疼,可以減少上手時(shí)間。

  2. 本地調(diào)試快:以前修改一個功能灵奖,整個項(xiàng)目啟動嚼沿,花費(fèi)時(shí)間很長」琅蹋現(xiàn)在只啟動修改的單個模塊,啟動很快骡尽。(不知道有沒有和我一樣忿檩,以前本地啟動一個復(fù)雜項(xiàng)目花費(fèi)30s-60s,調(diào)試啟動一次就能喝杯茶了)爆阶。

  3. 開發(fā)進(jìn)度加快:以前一個項(xiàng)目,多個人開發(fā)沙咏,你改的代碼辨图,影響我,我改的代碼影響你肢藐,某個人改了錯誤代碼提交故河,整個項(xiàng)目都啟動不了。微服務(wù)不同功能模塊吆豹,互不影響鱼的,你自己的鍋?zhàn)约罕场?/p>

  4. 測試難度降低: 單體應(yīng)用修改一個功能,很容易影響到其他功能痘煤,測試難度加大凑阶。

  5. 跨語言合作: 同一個項(xiàng)目不同的功能模塊可以使用不同語言開發(fā),java衷快,js宙橱,php,隨心所欲蘸拔。不同語言只需要提供 http 客戶端师郑,便可以實(shí)現(xiàn)跨語言調(diào)用。

  6. 簡單的分庫: 同一個項(xiàng)目调窍,不同模塊連接不同的數(shù)據(jù)庫宝冕,主要是配置簡單。(我們項(xiàng)目就連接3個不同的mysql業(yè)務(wù)數(shù)據(jù)庫邓萨,1個redis集群地梨,1個mongo集群)。

  7. 服務(wù)集群擴(kuò)展容易 :現(xiàn)在springcloud做服務(wù)集群先誉,節(jié)省資源湿刽,并且搭建速度快。比如項(xiàng)目中褐耳,資源服務(wù)功能模塊壓力大诈闺,運(yùn)維只要快速copy一份配置,部署一臺資源服務(wù)模塊的服務(wù)就行了铃芦,其它功能服務(wù)模塊不用管雅镊。

缺點(diǎn):

  1. 運(yùn)維人員壓力大: 單體應(yīng)用以前運(yùn)維同事只要監(jiān)控個一個應(yīng)用正常運(yùn)行襟雷,而現(xiàn)在卻需要保證幾十甚至上百個應(yīng)用運(yùn)轉(zhuǎn)正常,這是一個艱巨的任務(wù)仁烹。

  2. 事務(wù)耸弄、異步、測試面臨挑戰(zhàn):跨進(jìn)程之間的事務(wù)卓缰、大量的異步處理计呈、多個微服務(wù)之間的整體測試都需要有一整套的解決方案,而現(xiàn)在看起來征唬,這些技術(shù)并沒有成熟捌显。

  3. 服務(wù)分割難度大:對于一個項(xiàng)目,如何進(jìn)行功能劃分总寒,哪些功能歸屬同一個服務(wù)模塊扶歪,對架構(gòu)師和設(shè)計(jì)人員的要求較高。

如果你對我的文章感興趣摄闸,可以觀看更多我的文章
請點(diǎn)擊善镰,前往我的博客:https://www.cnblogs.com/haly/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市年枕,隨后出現(xiàn)的幾起案子炫欺,更是在濱河造成了極大的恐慌,老刑警劉巖画切,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竣稽,死亡現(xiàn)場離奇詭異,居然都是意外死亡霍弹,警方通過查閱死者的電腦和手機(jī)毫别,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來典格,“玉大人岛宦,你說我怎么就攤上這事∷=桑” “怎么了砾肺?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長防嗡。 經(jīng)常有香客問我变汪,道長,這世上最難降的妖魔是什么蚁趁? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任裙盾,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘番官。我一直安慰自己庐完,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布徘熔。 她就那樣靜靜地躺著门躯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酷师。 梳的紋絲不亂的頭發(fā)上讶凉,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音山孔,去河邊找鬼缀遍。 笑死,一個胖子當(dāng)著我的面吹牛饱须,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播台谊,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蓉媳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锅铅?” 一聲冷哼從身側(cè)響起酪呻,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盐须,沒想到半個月后玩荠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贼邓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年阶冈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塑径。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡女坑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出统舀,到底是詐尸還是另有隱情匆骗,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布誉简,位于F島的核電站碉就,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闷串。R本人自食惡果不足惜瓮钥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骏庸,春花似錦毛甲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至一姿,卻和暖如春七咧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叮叹。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工艾栋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛉顽。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓蝗砾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親携冤。 傳聞我的和親對象是個殘疾皇子悼粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容