太牛了!這是我見過把SpringCloud微服務架構講的最好的|附面試題


現如今微服務架構十分流行,而采用微服務構建系統也會帶來更清晰的業務划分和可擴展性。同時,支持微服務的技術棧也是多種多樣的,而Spring Cloud就是這些技術中的翹楚。

作為新一代的服務框架,Spring Cloud提出的口號是開發“面向雲環境的應用程序”,它為微服務架構提供了更加全面的技術支持。

而且作為Spring的拳頭項目,它也能夠與Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring項目完美融合,這些對於微服務而言是至關重要的。

理論概念的梳理

在系統架構與設計的實踐中,從宏觀上可以總結為三個階段;

  • 集中式架構:就是把所有的功能、模塊都集中到一個項目中,部署在一台服務器上,從而對外提供服務(單體架構、單體服務、單體應用);

直白一點:就是只有一個項目,只有一個war;

  • 分布式架構:就是把所有的功能、模塊拆分成不同的子項目,部署在多台不同的服務器上,這些子項目相互協作共同對外提供服務。

直白一點:就是有很多項目,有很多war包,這些項目相互協作完成需要的功能,不是一 個war能完成的,一個war包完成不了;

比如:

Shop項目:單體應用

Shop項目:拆分--> (user-center, order-center, trade-center) 分布式應用

  • 微服務架構:分布式強調系統的拆分,微服務也是強調系統的拆分,微服務架構屬於分布式架構的范疇;

並且到目前為止,微服務並沒有一個統一的標准的定義,那么微服務究竟是什么?

微服務一詞源於 Martin Fowler(馬丁.福勒)的名為 Microservices 的博文,可以在他的官方博客上找到這篇文章:

http://martinfowler.com/articles/microservices.html

中文翻譯版本:

https://www.martinfowler.cn/articles/microservices.html

簡單地說, 微服務是系統架構上的一種設計風格, 它的主旨是將一個原本獨立的系統拆分成多個小型服務,這些小型服務都在各自獨立的進程中運行,服務之間通過基於 HTTP 的 RESTful API 進行通信協作;

(dubbo -->dubbo協議 )

RESTful API (controller --> 調用 congtroller)

被拆分后的每一個小型服務都專注於完成系統中的某一項業務功能,職責單一, 並且每個服務都是一個獨立的項目,可以進行獨立的測試、開發和部署等;

由於各個獨立的服務之間使用的是基於 HTTP 的 JSON 作為數據通信協作的基礎,所以這些微服務也可以使用不同的語言來開發;

比如:項目里面有User模塊和Order模塊,但是User模塊和Order模塊並沒有直接關系,僅僅只是一些數據需要交互,那么就可以把這2個模塊單獨分開來,當user需要調用order的時候,order是一個服務方,但是order需要調用user的時候,user又是服務方了, 所以,它們並不在乎誰是服務方誰是調用方,他們都是2個獨立的服務,這就是微服務的概念;

經典面試:分布式和微服務有什么區別?

分布式,就是將巨大的一個系統划分為多個模塊,這一點和微服務是一樣的,都是要把系統進行拆分,部署到不同機器上,因為一台機器可能承受不了這么大的訪問壓力,或者說要支撐這么大的訪問壓力需要采購一台性能超級好的服務器,其財務成本非常高,有這些預算完全可以采購很多台普通的服務器了,分布式系統各個模塊通過接口進行數據交互,其實分布式也是一種微服務,因為都是把模塊拆分變為獨立的單元,提供接口來調用,那么它們本質的區別是什么?

它們的本質的區別體現在“目標”上, 何為目標,就是你采用分布式架構或者采用微服務架構,你最終是為了什么,要達到什么目的?

分布式架構的目標是什么? 就是訪問量很大一台機器承受不了,或者是成本問題,不得不使用多台機器來完成服務的部署;

而微服務的目標是什么?只是讓各個模塊拆分開來,不會被互相影響,比如模塊的升級或者出現BUG或者是重構等等都不要影響到其他模塊,微服務它是可以在一台機器上部署;

但是:分布式也是微服務的一種,微服務也屬於分布式;

面試:微服務與Spring-Cloud的關系或區別?

微服務只是一種項目的架構方式、架構理念,或者說是一種概念,就如同我們的MVC架構一樣, 那么Spring Cloud便是對這種架構方式的技術落地實現;

面試:微服務一定要使用Spring Cloud嗎?

微服務只是一種項目的架構方式、架構理念,所以任何技術都可以實現這種架構理念,只是微服務架構里面有很多問題需要我們去解決,比如:負載均衡,服務的注冊與發現,服務調用,服務路由,服務熔斷等等一系列問題,如果你自己從0開始實現微服務的架構理念,那頭發都掉光了,所以Spring Cloud 幫我們做了這些事情,Spring Cloud將處理這些問題的的技術全部打包好了,我們只需要開箱即用;

What is Spring Cloud?

官網:
https://spring.io/projects/spring-cloud

版本:Greenwich SR3

出自官方:

Spring Cloud為開發人員提供了一些工具用來快速構建分布式系統中的一些常見模式和解決一些常見問題(例如配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性令牌、全局鎖、領導選舉、分布式會話、群集狀態)。分布式系統的協調導致了很多樣板式的代碼(很多固定套路的代碼),使用Spring Cloud開發人員可以快速建立實現這些模式的服務和應用程序。它們在任何分布式環境中都能很好地運行,包括開發人員自己的筆記本電腦、裸機數據中心和雲計算等托管平台;


Spring Cloud是目前最流行的進行微服務架構的框架之一,是一個一站式的開發分布式系統的框架,為開發者提供了一系列的構建分布式系統的工具集。

目前已經在各大互聯網公司得到廣泛應用,是進行微服務架構的優先選擇工具,也是程序員進階和架構師必備的技術。

本課程將全面細致地講授Spring Cloud的方方面面,涵蓋Spring Cloud進行微服務架構的常用工具集,如:注冊中心eureka、ribbon、hystrix、feign、zuul、config等,並通過一個個示例為大家清晰地展示Spring Cloud進行微服務開發的點點滴滴,讓你學習更快更輕松。

在線觀看:https://www.bilibili.com/video/BV1ZV411y7ix

資料下載:http://www.bjpowernode.com/javavideo/204.html


Spring Cloud特性

Spring Cloud為分布式系統開發的典型應用場景提供良好的開箱即用的功能,比如:

  • 分布式/版本化配置
  • 服務注冊和發現
  • 路由
  • 服務與服務間的調用
  • 負載均衡
  • 斷路器
  • 全局鎖
  • 領導選舉與集群狀態
  • 分布式消息傳遞

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是由一系列獨立項目組成的,每個獨立的項目具有不同的發布節奏,每次Spring Cloud發布版本時,就會組合這一系列的子項目,Spring Cloud為了避免大家對版本號的誤解,避免與子項目版本號混淆,所以Spring Cloud發布的版本是一個按照字母順序的倫敦地鐵站的名字(“天使”是第一個版本,“布里克斯頓”是第二個),字母順序是從A-Z,目前最新穩定版本Greenwich SR3,當Spring Cloud里面的某些子項目出現關鍵性bug或重大更新,則發布序列將推出名稱以“.SRX”結尾的版本,其中“X”是一個數字,比如:Greenwich SR1、Greenwich SR2、Greenwich SR3;

Spring Cloud是微服務開發的一整套解決方案,采用Spring Cloud開發,每個項目依然是使用Spring Boot;

Spring Cloud 與 Spring Boot的兼容版本

Spring Cloud 的整體架構

  • Service Provider: 暴露服務的服務提供方。
  • Service Consumer:調用遠程服務的服務消費方。
  • EureKa Server: 服務注冊中心和服務發現中心。

服務消費方直接調用服務提供方

我們知道,Springcloud 構建微服務是基於 SpringBoot 開發的。

1、創建一個 SpringBoot 工程,並且添加 SpringBoot 的相關依賴;

2、創建服務提供者的訪問方法,也就是后續消費者如何訪問提供者;

Spring Cloud 是基於 rest 的訪問,所以我們添加一個 Controller,在該Controller 中提供一個訪問入口:

3、啟動運行該 SpringBoot 程序,訪問該 controller;

服務消費者也是一個 SpringBoot 項目,服務消費者主要用來消費服務提供者提供的服務;

1、創建一個 SpringBoot 工程,並且添加 SpringBoot 的相關依賴;

2、開發一個消費者方法,去消費服務提供者提供的服務,這個消費者方法也是

一個 Controller:

3、啟動該 SpringBoot 程序,測試服務消費者調用服務提供者;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM