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