天天看點

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

前言

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

本文為 Spring Cloud Alibaba介紹 相關知識,下邊将對

微服務介紹

(包括:

系統架構演變

微服務架構介紹

常見微服務架構

),

Spring Cloud Alibaba介紹

(包括:

Spring Cloud Alibaba 的定位

Spring Cloud 各套實作對比

Spring Cloud Alibaba 生态

)及

Spring Cloud Alibaba環境搭建

等進行詳盡介紹~

📌部落客首頁:小新要變強 的首頁

👉Java全棧學習路線可參考:【Java全棧學習路線】最全的Java學習路線及知識清單,Java自學方向指引,内含最全Java全棧學習技術清單~

👉算法刷題路線可參考:算法刷題路線總結與相關資料分享,内含最詳盡的算法刷題路線指南及相關資料分享~

👉Java微服務開源項目可參考:企業級Java微服務開源項目(開源架構,用于學習、畢設、公司項目、私活等,減少開發工作,讓您隻關注業務!)

目錄

Spring Cloud Alibaba介紹

  • 前言
  • 目錄
  • 一、微服務介紹
    • 1️⃣系統架構演變
    • 2️⃣微服務架構介紹
    • 3️⃣常見微服務架構
  • 二、Spring Cloud Alibaba介紹
    • 1️⃣Spring Cloud Alibaba 的定位
    • 2️⃣Spring Cloud 各套實作對比
    • 3️⃣Spring Cloud Alibaba 生态
  • 三、Spring Cloud Alibaba環境搭建
  • 後記
Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

一、微服務介紹

1️⃣系統架構演變

随着網際網路的發展,網站應用的規模也在不斷的擴大,進而導緻系統架構也在不斷的進行變化。

從網際網路早起到現在,系統架構大體經曆了下面幾個過程: 單體應用架構—>垂直應用架構—>分布

式架構—>SOA架構—>微服務架構,當然還有悄然興起的Service Mesh(服務網格化)。

接下來我們就來了解一下每種系統架構是什麼樣子的, 以及各有什麼優缺點。

🍀(1)單體應用架構

網際網路早期,一般的網站應用流量較小,隻需一個應用,将所有功能代碼都部署在一起就可以,這樣可以減少開發、部署和維護的成本。

比如說一個電商系統,裡面會包含很多使用者管理,商品管理,訂單管理,物流管理等等很多子產品,我們會把它們做成一個web項目,然後部署到一台tomcat伺服器上。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

優點:

  • 項目架構簡單,小型項目的話, 開發成本低
  • 項目部署在一個節點上, 維護友善

缺點:

  • 全部功能內建在一個工程中,對于大型項目來講不易開發和維護
  • 項目子產品之間緊密耦合,單點容錯率低
  • 無法針對不同子產品進行針對性優化和水準擴充

🍀(2)垂直應用架構

随着通路量的逐漸增大,單一應用隻能依靠增加節點來應對,但是這時候會發現并不是所有的子產品都會有比較大的通路

量.

還是以上面的電商為例子, 使用者通路量的增加可能影響的隻是使用者和訂單子產品, 但是對消息子產品的影響就比較小. 那麼此時我們希望隻多增加幾個訂單子產品, 而不增加消息子產品. 此時單體應用就做不到了, 垂直應用就應運而生了.

所謂的垂直應用架構,就是将原來的一個應用拆成互不相幹的幾個應用,以提升效率。比如我們可以将上面電商的單體

應用拆分成:

  • 電商系統(使用者管理 商品管理 訂單管理)
  • 背景系統(使用者管理 訂單管理 客戶管理)
  • CMS系統(廣告管理 營銷管理)

這樣拆分完畢之後,一旦使用者通路量變大,隻需要增加電商系統的節點就可以了,而無需增加背景和CMS的節點。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

優點:

  • 系統拆分實作了流量分擔,解決了并發問題,而且可以針對不同子產品進行優化和水擴充
  • 一個系統的問題不會影響到其他系統,提高容錯率

缺點:

  • 系統之間互相獨立, 無法進行互相調用
  • 系統之間互相獨立, 會有重複的開發任務

🍀(3)分布式架構

當垂直應用越來越多,重複的業務代碼就會越來越多。這時候,我們就思考可不可以将重複的代碼抽取出來,做成統一的業務層作為獨立的服務,然後由前端控制層調用不同的業務層服務呢?

這就産生了新的分布式系統架構。它将把工程拆分成表現層和服務層兩個部分,服務層中包含業務邏輯。表現層隻需要處理和頁面的互動,業務邏輯都是調用服務層的服務來實作。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

優點:

  • 抽取公共的功能為服務層,提高代碼複用性

缺點:

  • 系統間耦合度變高,調用關系錯綜複雜,難以維護

🍀(4)SOA架構

在分布式架構下,當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心對叢集進行實時管理。此時,用于資源排程和治理中心(SOA Service Oriented Architecture)是關鍵。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

優點:

  • 使用治理中心(ESB\dubbo)解決了服務間調用關系的自動調節

缺點:

  • 服務間會有依賴關系,一旦某個環節出錯會影響較大( 服務雪崩 )
  • 服務關系複雜,運維、測試部署困難

🍀(5)微服務架構

微服務架構在某種程度上是面向服務的架構SOA繼續發展的下一步,它更加強調服務的"徹底拆分"。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

微服務架構與SOA架構的不同

微服務架構比 SOA架構粒度會更加精細,讓專業的人去做專業的事情(專注),目的提高效率,每個服務于服務之間互不影響,微服務架構中,每個服務必須獨立部署,微服務架構更加輕巧,輕量級。

SOA 架構中可能資料庫存儲會發生共享,微服務強調獨每個服務都是單獨資料庫,保證每個服務于服務之間互不影響。

項目展現特征微服務架構比 SOA 架構更加适合與網際網路公司靈活開發、快速疊代版本,因為粒度非常精細。

優點:

  • 服務原子化拆分,獨立打包、部署和更新,保證每個微服務清晰的任務劃分,利于擴充
  • 微服務之間采用Restful等輕量級http協定互相調用

缺點:

  • 分布式系統開發的技術成本高(容錯、分布式事務等)
  • 複雜性更高。各個微服務進行分布式獨立部署,當進行子產品調用的時候,分布式将會變得更加麻煩。

2️⃣微服務架構介紹

作者:

Martin Fowler

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

論文原文:https://martinfowler.com/articles/microservices.html

論文翻譯:http://blog.cuicc.com/blog/2015/07/22/microservices

他說微服務其實是一種架構風格,我們在開發一個應用的時候這個應用應該是由一組小型服務組成,每個小型服務都運作在自己的程序内;小服務之間通過HTTP的方式進行互聯互通。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記
Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

微服務架構的常見問題

一旦采用微服務系統架構,就勢必會遇到這樣幾個問題:

  • 這麼多小服務,如何管理他們?(服務治理 注冊中心[服務注冊 發現 剔除]) nacos
  • 這麼多小服務,他們之間如何通訊?(restful rpc dubbo feign) httpclient(“url”,參數), springBoot restTemplate(“url”,參數) , feign
  • 這麼多小服務,用戶端怎麼通路他們?(網關) gateway
  • 這麼多小服務,一旦出現問題了,應該如何自處理?(容錯) sentinel
  • 這麼多小服務,一旦出現問題了,應該如何排錯? (鍊路追蹤) skywalking

對于上面的問題,是任何一個微服務設計者都不能繞過去的,是以大部分的微服務産品都針對每一個問題提供了相應的元件來解決它們。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

3️⃣常見微服務架構

🍀(1)dubbo: zookeeper +dubbo + SpringMVC/SpringBoot

  • 配套 通信方式:rpc
  • 注冊中心:zookeeper / redis
  • 配置中心:diamond

🍀(2)SpringCloud:全家桶+輕松嵌入第三方元件(Netflix)

  • 配套 通信方式:http restful
  • 注冊中心:eruka / consul
  • 配置中心:config
  • 斷路器:hystrix
  • 網關:zuul
  • 分布式追蹤系統:sleuth + zipkin

🍀(3)SpringCloud Alibaba

  • Spring Cloud 以微服務為核心的分布式系統建構标準

“分布式系統中的常見模式”給了 Spring Cloud 一個清晰的定位,即“模式”。也就是說 Spring Cloud 是針對分布式系統開發所做的通用抽象,是标準模式的實作。這個定義非常抽象,看完之後并不能知道 Spring Cloud 具體包含什麼内容。再來看一下 Spring 官方給出的一個 High Light 的架構圖,就可以對這套模式有更清晰的認識:

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

可以看到這個圖中間就是各個 Microservice,也就是我們的這個微服務的實作,周邊周圍的話就是去圍繞這個微服務來去做各種輔助的資訊事情。例如分布式追蹤、服務注冊、配置服務等,都繞微服務運作時所依賴的必不可少的的支援性功能。我們可以得出這樣一個結論:Spring Cloud 是以微服務為核心的分布式系統的一個建構标準。

二、Spring Cloud Alibaba介紹

Spring Cloud Alibaba 緻力于提供微服務開發的一站式解決方案。此項目包含開發微服務架構的必需元件,友善開發者通過 Spring Cloud 程式設計模型輕松使用這些元件來開發微服務架構。

依托 Spring Cloud Alibaba,您隻需要添加一些注解和少量配置,就可以将 Spring Cloud 應用接入阿裡分布式應用解決方案,通過阿裡中間件來迅速搭建分布式應用系統。

根據 Jakarta 2019 年的調研報告,Spring Boot 擁有非常高的占比。熟悉 Java 語言的同學,應該對 Spring 架構都不會陌生。其倡導的依賴倒置、面向切面程式設計等特性已經形成了 Java 語言的事實标準,幾乎所有三方架構都會提供對 Spring 架構的支援。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

1️⃣Spring Cloud Alibaba 的定位

既然說 Spring Cloud 是标準,那麼自然少不了針對标準的實作。這裡,為大家介紹下 Spring Cloud Alibaba 這套實作。先給出下面這張圖幫助大家了解 Spring Cloud Alibaba 的定位:

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

這裡給大家這麼一個公式,這個叫做:“3 加 2”。

3 指的就是圖中深色的部分,其實它就是 Spring Cloud 标準,一共有 3 層。中間顔色最深的部分就是及整個微服務最核心的内容,包括了“ RPC調用”以及“服務注冊與發現”。第二層,也就是圍繞着核心的這一圈,是一些輔助微服務更好的工作功能,包括了負載均衡、路由、網關、斷路器,還有就是追蹤等等這些内容。再外層的話,主要是一些分布式雲環境裡通用能力。

2 指的就是上圖中最外面這一圈。這一部分就是這個我們 Spring Cloud Alibaba 的一個定義,它其實包含兩個部分的内容:右上部分是對于 Spring Cloud 标準的實作。例如,我們通過 Dubbo 實作了 RPC 調用功能,通過 Nacos 實作了“服務注冊與發現”、“分布式配置”,通過 Sentinel 實作了斷路器等等,這裡就不一一列舉了。

左下部分是我們 Spring Cloud Alibaba 對阿裡雲各種服務的內建。可能很多小夥伴會有這樣的一個問題:為什麼要加上這一部分呢?此時回頭審視一下 Spring Cloud ,它僅僅是一個微服務的一個架構。但是在實際生産過程中,單獨使用微服務架構其實并不足以支撐我們去建構一個完整的系統。是以這部分是用阿裡幫助開發者完成微服務以外的雲産品內建的功能。

這裡可能會很多小夥伴會有這麼一個擔心:是不是使用了 Spring Cloud Alibaba,就會被阿裡雲平台綁定呢?這是不會的。為什麼這麼說呢?如上面說的,“3 加 2”中的 2 是被分為兩個部分的。其中對 Spring Cloud 的實作是完全獨立的,開發者可以隻是用這部分實作運作在任何雲平台中。當然,另一部分,由于天然是對阿裡雲服務的內建,這部分是和平台相關的。這裡給開發者充分的自由,選擇隻是用其中的部分還是全部産品。當然,我們也非常歡迎開發者選擇使用阿裡雲的全套服務,我們也會盡量保證使用整套産品時的連貫性與開發的便利性。

2️⃣Spring Cloud 各套實作對比

Spring Cloud 作為一套标準,它的實作肯定不止一套,那麼各套實作都有什麼差別呢?我們來一起看一下下面這張圖:

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

可以發現 Spring Cloud Alibaba 是所有的實作方案中功能最齊全的。尤其是在 Netflix 停止更新了以後,Spring Cloud Alibaba 依然在持續更新和疊代。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記
Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

從 18 年 7 月份 Spring Cloud Alibaba 正式送出代碼開始,就得到了大家廣泛的關注。截止今天,Spring Cloud Alibaba 一共獲得了超過了 1.5 萬的 star 數,已經的領先于所有其他實作的總和。

3️⃣Spring Cloud Alibaba 生态

可以看到除了圍繞着 Spring Cloud 的标準實作以外,還有包括的資料、資源、消息、緩存等各種類型的服務。在不同類型的服務下,也有很多具體的産品可供使用者選擇。

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

這裡羅列典型而非全部産品。更多的内容,可以參考阿裡雲官網。

三、Spring Cloud Alibaba環境搭建

SpringCloud Alibaba 依賴 Java 環境來運作。還需要為此配置 Maven環境,請確定是在以下版本環境中安裝使用:

  • 64 bit JDK 1.8+;下載下傳 & 配置。 1.8.0_131
  • Maven 3.2.x+;下載下傳 & 配置。 3.6.1

(1)基于SpringBoot的父maven項目

(2)建立2個服務(訂單服務和庫存服務)

版本說明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

  • Spring Cloud Alibaba:2.2.5.RELEASE
  • Spring Boot :2.3.2.RELEASE
  • Spring Cloud:Hoxton.SR8
Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

父pom如下:

<?xml version="1.0" encoding="UTF‐8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven‐4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!‐‐ lookup parent from repository ‐‐>
</parent>
<groupId>com.tuling.mall</groupId>
<artifactId>vip‐spring‐cloud‐alibaba</artifactId>
<version>0.0.1‐SNAPSHOT</version>
<name>vip‐spring‐cloud‐alibaba</name>
<packaging>pom</packaging>
<description>Demo project for Spring Cloud Alibaba</description>

<properties>
<java.version>1.8</java.version>
<spring‐cloud.version>Hoxton.SR8</spring‐cloud.version>
<spring‐cloud‐alibaba.version>2.2.5.RELEASE</spring‐cloud‐alibaba.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring‐cloud‐dependencies</artifactId>
<version>${spring‐cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring‐cloud‐alibaba‐dependencies</artifactId>
<version>${spring‐cloud‐alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

</project>
           

後記

Spring Cloud Alibaba全家桶(一)——Spring Cloud Alibaba介紹前言目錄一、微服務介紹二、Spring Cloud Alibaba介紹三、Spring Cloud Alibaba環境搭建後記

👉Java全棧學習路線可參考:【Java全棧學習路線】最全的Java學習路線及知識清單,Java自學方向指引,内含最全Java全棧學習技術清單~

👉算法刷題路線可參考:算法刷題路線總結與相關資料分享,内含最詳盡的算法刷題路線指南及相關資料分享~