太牛了,這是我見(jiàn)過(guò)SpringCloud微服務(wù)架構(gòu)講的詳細(xì)的|附面試題
現(xiàn)如今微服務(wù)架構(gòu)十分流行,而采用微服務(wù)構(gòu)建系統(tǒng)也會(huì)帶來(lái)更清晰的業(yè)務(wù)劃分和可擴(kuò)展性。同時(shí),支持微服務(wù)的技術(shù)棧也是多種多樣的,而Spring Cloud就是這些技術(shù)中的翹楚。
作為新一代的服務(wù)框架,Spring Cloud提出的口號(hào)是開(kāi)發(fā)“面向云環(huán)境的應(yīng)用程序”,它為微服務(wù)架構(gòu)提供了更加全面的技術(shù)支持。而且作為Spring的拳頭項(xiàng)目,它也能夠與Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring項(xiàng)目完美融合,這些對(duì)于微服務(wù)而言是至關(guān)重要的。
Spring Cloud的完整技術(shù)組成:
- 今天就給大家分享大概講的最全最通俗易懂的spring cloud視頻
- SpringCloud微服務(wù)架構(gòu)實(shí)戰(zhàn)
- https://www.ixigua.com/6895923297481916939
理論概念的梳理
在系統(tǒng)架構(gòu)與設(shè)計(jì)的實(shí)踐中,從宏觀上可以總結(jié)為三個(gè)階段;
集中式架構(gòu):就是把所有的功能、模塊都集中到一個(gè)項(xiàng)目中,部署在一臺(tái)服務(wù)器上,從而對(duì)外提供服務(wù)(單體架構(gòu)、單體服務(wù)、單體應(yīng)用);
直白一點(diǎn):就是只有一個(gè)項(xiàng)目,只有一個(gè)war;
分布式架構(gòu):就是把所有的功能、模塊拆分成不同的子項(xiàng)目,部署在多臺(tái)不同的服務(wù)器上,這些子項(xiàng)目相互協(xié)作共同對(duì)外提供服務(wù)。
直白一點(diǎn):就是有很多項(xiàng)目,有很多war包,這些項(xiàng)目相互協(xié)作完成需要的功能,不是一 個(gè)war能完成的,一個(gè)war包完成不了;
比如:
Shop項(xiàng)目:?jiǎn)误w應(yīng)用
Shop項(xiàng)目:拆分--> (user-center, order-center, trade-center) 分布式應(yīng)用
微服務(wù)架構(gòu):分布式強(qiáng)調(diào)系統(tǒng)的拆分,微服務(wù)也是強(qiáng)調(diào)系統(tǒng)的拆分,微服務(wù)架構(gòu)屬于分布式架構(gòu)的范疇;
并且到目前為止,微服務(wù)并沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)的定義,那么微服務(wù)究竟是什么?
微服務(wù)一詞源于 Martin Fowler(馬丁.福勒)的名為 Microservices 的博文,可以在他的官方博客上找到這篇文章:
http://martinfowler.com/articles/microservices.html
中文翻譯版本:
https://www.martinfowler.cn/articles/microservices.html
簡(jiǎn)單地說(shuō), 微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計(jì)風(fēng)格, 它的主旨是將一個(gè)原本獨(dú)立的系統(tǒng)拆分成多個(gè)小型服務(wù),這些小型服務(wù)都在各自獨(dú)立的進(jìn)程中運(yùn)行,服務(wù)之間通過(guò)基于 HTTP 的 RESTful API 進(jìn)行通信協(xié)作;
- (dubbo -->dubbo協(xié)議 )
- RESTful API (controller --> 調(diào)用 congtroller)
被拆分后的每一個(gè)小型服務(wù)都專注于完成系統(tǒng)中的某一項(xiàng)業(yè)務(wù)功能,職責(zé)單一, 并且每個(gè)服務(wù)都是一個(gè)獨(dú)立的項(xiàng)目,可以進(jìn)行獨(dú)立的測(cè)試、開(kāi)發(fā)和部署等;
由于各個(gè)獨(dú)立的服務(wù)之間使用的是基于 HTTP 的 JSON 作為數(shù)據(jù)通信協(xié)作的基礎(chǔ),所以這些微服務(wù)也可以使用不同的語(yǔ)言來(lái)開(kāi)發(fā);
比如:項(xiàng)目里面有User模塊和Order模塊,但是User模塊和Order模塊并沒(méi)有直接關(guān)系,僅僅只是一些數(shù)據(jù)需要交互,那么就可以把這2個(gè)模塊單獨(dú)分開(kāi)來(lái),當(dāng)user需要調(diào)用order的時(shí)候,order是一個(gè)服務(wù)方,但是order需要調(diào)用user的時(shí)候,user又是服務(wù)方了, 所以,它們并不在乎誰(shuí)是服務(wù)方誰(shuí)是調(diào)用方,他們都是2個(gè)獨(dú)立的服務(wù),這就是微服務(wù)的概念;
經(jīng)典面試:分布式和微服務(wù)有什么區(qū)別?
分布式,就是將巨大的一個(gè)系統(tǒng)劃分為多個(gè)模塊,這一點(diǎn)和微服務(wù)是一樣的,都是要把系統(tǒng)進(jìn)行拆分,部署到不同機(jī)器上,因?yàn)橐慌_(tái)機(jī)器可能承受不了這么大的訪問(wèn)壓力,或者說(shuō)要支撐這么大的訪問(wèn)壓力需要采購(gòu)一臺(tái)性能超級(jí)好的服務(wù)器,其財(cái)務(wù)成本非常高,有這些預(yù)算完全可以采購(gòu)很多臺(tái)普通的服務(wù)器了,分布式系統(tǒng)各個(gè)模塊通過(guò)接口進(jìn)行數(shù)據(jù)交互,其實(shí)分布式也是一種微服務(wù),因?yàn)槎际前涯K拆分變?yōu)楠?dú)立的單元,提供接口來(lái)調(diào)用,那么它們本質(zhì)的區(qū)別是什么?
它們的本質(zhì)的區(qū)別體現(xiàn)在“目標(biāo)”上, 何為目標(biāo),就是你采用分布式架構(gòu)或者采用微服務(wù)架構(gòu),你最終是為了什么,要達(dá)到什么目的?
分布式架構(gòu)的目標(biāo)是什么? 就是訪問(wèn)量很大一臺(tái)機(jī)器承受不了,或者是成本問(wèn)題,不得不使用多臺(tái)機(jī)器來(lái)完成服務(wù)的部署;
而微服務(wù)的目標(biāo)是什么?只是讓各個(gè)模塊拆分開(kāi)來(lái),不會(huì)被互相影響,比如模塊的升級(jí)或者出現(xiàn)BUG或者是重構(gòu)等等都不要影響到其他模塊,微服務(wù)它是可以在一臺(tái)機(jī)器上部署;
但是:分布式也是微服務(wù)的一種,微服務(wù)也屬于分布式;
面試:微服務(wù)與Spring-Cloud的關(guān)系或區(qū)別?
微服務(wù)只是一種項(xiàng)目的架構(gòu)方式、架構(gòu)理念,或者說(shuō)是一種概念,就如同我們的MVC架構(gòu)一樣, 那么Spring Cloud便是對(duì)這種架構(gòu)方式的技術(shù)落地實(shí)現(xiàn);
面試:微服務(wù)一定要使用Spring Cloud嗎?
微服務(wù)只是一種項(xiàng)目的架構(gòu)方式、架構(gòu)理念,所以任何技術(shù)都可以實(shí)現(xiàn)這種架構(gòu)理念,只是微服務(wù)架構(gòu)里面有很多問(wèn)題需要我們?nèi)ソ鉀Q,比如:負(fù)載均衡,服務(wù)的注冊(cè)與發(fā)現(xiàn),服務(wù)調(diào)用,服務(wù)路由,服務(wù)熔斷等等一系列問(wèn)題,如果你自己從0開(kāi)始實(shí)現(xiàn)微服務(wù)的架構(gòu)理念,那頭發(fā)都掉光了,所以Spring Cloud 幫我們做了這些事情,Spring Cloud將處理這些問(wèn)題的的技術(shù)全部打包好了,我們只需要開(kāi)箱即用;
What is Spring Cloud?
官網(wǎng):
https://spring.io/projects/spring-cloud
版本:Greenwich SR3
出自官方:
Spring Cloud為開(kāi)發(fā)人員提供了一些工具用來(lái)快速構(gòu)建分布式系統(tǒng)中的一些常見(jiàn)模式和解決一些常見(jiàn)問(wèn)題(例如配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、一次性令牌、全局鎖、領(lǐng)導(dǎo)選舉、分布式會(huì)話、群集狀態(tài))。分布式系統(tǒng)的協(xié)調(diào)導(dǎo)致了很多樣板式的代碼(很多固定套路的代碼),使用Spring Cloud開(kāi)發(fā)人員可以快速建立實(shí)現(xiàn)這些模式的服務(wù)和應(yīng)用程序。它們?cè)谌魏畏植际江h(huán)境中都能很好地運(yùn)行,包括開(kāi)發(fā)人員自己的筆記本電腦、裸機(jī)數(shù)據(jù)中心和云計(jì)算等托管平臺(tái);
Spring Cloud特性
Spring Cloud為分布式系統(tǒng)開(kāi)發(fā)的典型應(yīng)用場(chǎng)景提供良好的開(kāi)箱即用的功能,比如:
- 分布式/版本化配置
- 服務(wù)注冊(cè)和發(fā)現(xiàn)
- 路由
- 服務(wù)與服務(wù)間的調(diào)用
- 負(fù)載均衡
- 斷路器
- 全局鎖
- 領(lǐng)導(dǎo)選舉與集群狀態(tài)
- 分布式消息傳遞
Spring Cloud下的主要項(xiàng)目
- Spring Cloud Config
- Spring Cloud Netflix
- Spring Cloud Bus
- Spring Cloud Cloudfoundry
- Spring Cloud Open Service Broker
- Spring Cloud Cluster
- Spring Cloud Consul
- Spring Cloud Security
- Spring Cloud Sleuth
- Spring Cloud Data Flow
- Spring Cloud Stream
- Spring Cloud Stream App Starters
- Spring Cloud Task
- Spring Cloud Task App Starters
- Spring Cloud Zookeeper
- Spring Cloud AWS
- Spring Cloud Connectors
- Spring Cloud Starters
- Spring Cloud CLI
- Spring Cloud Contract
- Spring Cloud Gateway
- Spring Cloud OpenFeign
- Spring Cloud Pipelines
- Spring Cloud Function
Spring Cloud的版本
Spring Cloud是由一系列獨(dú)立項(xiàng)目組成的,每個(gè)獨(dú)立的項(xiàng)目具有不同的發(fā)布節(jié)奏,每次Spring Cloud發(fā)布版本時(shí),就會(huì)組合這一系列的子項(xiàng)目,Spring Cloud為了避免大家對(duì)版本號(hào)的誤解,避免與子項(xiàng)目版本號(hào)混淆,所以Spring Cloud發(fā)布的版本是一個(gè)按照字母順序的倫敦地鐵站的名字(“天使”是第一個(gè)版本,“布里克斯頓”是第二個(gè)),字母順序是從A-Z,目前最新穩(wěn)定版本Greenwich SR3,當(dāng)Spring Cloud里面的某些子項(xiàng)目出現(xiàn)關(guān)鍵性bug或重大更新,則發(fā)布序列將推出名稱以“.SRX”結(jié)尾的版本,其中“X”是一個(gè)數(shù)字,比如:Greenwich SR1、Greenwich SR2、Greenwich SR3;
Spring Cloud是微服務(wù)開(kāi)發(fā)的一整套解決方案,采用Spring Cloud開(kāi)發(fā),每個(gè)項(xiàng)目依然是使用Spring Boot;
Spring Cloud 與 Spring Boot的兼容版本
Spring Cloud 的整體架構(gòu)
- Service Provider: 暴露服務(wù)的服務(wù)提供方。
- Service Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
- EureKa Server: 服務(wù)注冊(cè)中心和服務(wù)發(fā)現(xiàn)中心。
服務(wù)消費(fèi)方直接調(diào)用服務(wù)提供方
我們知道,Springcloud 構(gòu)建微服務(wù)是基于 SpringBoot 開(kāi)發(fā)的。
1、創(chuàng)建一個(gè) SpringBoot 工程,并且添加 SpringBoot 的相關(guān)依賴;
2、創(chuàng)建服務(wù)提供者的訪問(wèn)方法,也就是后續(xù)消費(fèi)者如何訪問(wèn)提供者;
Spring Cloud 是基于 rest 的訪問(wèn),所以我們添加一個(gè) Controller,在該Controller 中提供一個(gè)訪問(wèn)入口:
3、啟動(dòng)運(yùn)行該 SpringBoot 程序,訪問(wèn)該 controller;
服務(wù)消費(fèi)者也是一個(gè) SpringBoot 項(xiàng)目,服務(wù)消費(fèi)者主要用來(lái)消費(fèi)服務(wù)提供者提供的服務(wù);
1、創(chuàng)建一個(gè) SpringBoot 工程,并且添加 SpringBoot 的相關(guān)依賴;
2、開(kāi)發(fā)一個(gè)消費(fèi)者方法,去消費(fèi)服務(wù)提供者提供的服務(wù),這個(gè)消費(fèi)者方法也是
一個(gè) Controller:
3、啟動(dòng)該 SpringBoot 程序,測(cè)試服務(wù)消費(fèi)者調(diào)用服務(wù)提供者;