天天看點

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

一,微服務簡介

1.背景分析

講微服務之前,我們先分析以下單體應用。所謂單體應用一般是基于idea/eclipse,maven等建一個工程,然後基于SpringBoot,spring,mybatis架構進行整合,接下來再寫一堆dao、mapper、service、controller,再加上一些的配置檔案,有可能還會引入redis、elasticsearch、mq等其它項目的依賴,開發好之後再将項目打包成一個jar包/war包。然後再将包扔到類似tomcat這樣的web服務中,最後部署到公司提供給你的linux伺服器上。 接下來,你針對服務提供的通路端口(例如8080端口)發起http請求,請求會由tomcat直接轉交給你的spring web元件,進行一層一層的代碼調用。對于這樣的設計一般适合企業的内部應用,通路量不大,體積比較小,5人以内的團隊即可開發和維護。但對于一些大型網際網路項目,假如需要10人以上的開發和維護團隊,僅頻繁的建立代碼分支,編寫業務功能,然後合并分支,就會出現很多代碼沖突。每次解決這些大量的代碼沖突,可能就會耗費好幾天的時間。基于這樣的背景微服務誕生了.

在微服務架構設計中,建議超出需要10人開發和維護的項目要進行系統拆分,就是把大系統拆分為很多小系統,幾個人負責一個服務這樣每個服務獨立的開發、測試和上線,代碼沖突少了,每次上線就回歸測試自己的一個服務即可,測試速度快了,上線是獨立的,隻要向後相容接口就行了,不需要跟别人等待和協調,技術架構和技術版本的更新,幾個人ok就行,成本降低,更加靈活了。

2.什麼是微服務

微服務架構(MSA)的基礎是将單個應用程式開發為一組小型獨立服務,這些獨立服務在自己的程序中運作,獨立開發和部署。如圖所示:

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

這些服務使用輕量級 API 通過明确定義的接口進行通信。這些服務是圍繞業務功能建構的,每項服務執行一項功能。由于它們是獨立運作的,是以可以針對各項服務進行更新、部署和擴充,以滿足對應用程式特定功能的需求。

程式中的微服務,就是将各個業務系統的共性再進行抽取,做成獨立的服務,如圖所示:

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

總之,微服務是分布式系統中的一種流行的架構模型,它并不是銀彈,是以,也不要寄希望于微服務構架能夠解決所有的問題。微服務架構主要解決的是如何快速地開發和部署我們的服務,這對于一個能夠适應快速開發和成長的公司是非常必要的。同時,微服務設計中有很多很不錯的想法和理念,通過學習微服務架構我們可以更快的邁向卓越。

二,SpringCloud Alibaba微服務解決方案

1.概述

Spring Cloud Alibaba 是Spring Cloud的一個子項目,緻力于提供微服務開發的一站式解決方案。此項目包含開發分布式應用微服務的必需元件,友善開發者通過 Spring Cloud 程式設計模型輕松使用這些元件來開發分布式應用服務。依托 Spring Cloud Alibaba,您隻需要添加一些注解和少量配置,就可以将 Spring Cloud 應用接入阿裡微服務解決方案,通過阿裡中間件來迅速搭建分布式應用系統。

2.核心元件分析

Spring Cloud Alibaba 預設提供了如下核心功能:

  • 服務限流降級:

    預設支援 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降級功能的接入,可以在運作時通過控制台實時修改限流降級規則,還支援檢視限流降級 Metrics 監控。

  • 服務注冊與發現:

    基于Spring Cloud 服務注冊與發現标準,借助Nacos進行實作,預設還內建了 Ribbon 的支援。

  • 分布式配置管理:

    基于Nacos支援分布式系統中的外部化配置,配置更改時自動重新整理。

  • 消息驅動能力:

    基于Spring Cloud Stream 為微服務應用建構消息驅動能力。

  • 分布式事務:

    使用 @GlobalTransactional 注解, 高效并且對業務零侵入地解決分布式事務問題。

  • 分布式任務排程:

    提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務排程服務。同時提供分布式的任務執行模型,如網格任務。網格任務支援海量子任務均勻配置設定到所有 Worker上執行。

3.解決方案架構設計

基于Spring Cloud Alibaba實作的微服務,解決方案設計架構如圖所示:

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

三,建構SpringCloud 聚合項目并進行環境初始化

1.建立空項目

打開Idea,建立一個空項目(Empty Project)

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

2.項目初始化配置

第一步:配置maven環境(隻要是新的工作區,都要重新配置),注意本地庫選擇新的位置不要與其它項目共用本地庫.SpringCloud的依賴包版本與其它項目的版本包不一緻。

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

第二步:配置JDK編譯環境

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

第三步:配置項目編碼方式

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

3.建立聚合父工程

我們後續在建立微服務工程進行學習時,相關服務的依賴及版本的管理可以放在此工程下.

第一步:建立父工程子產品

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

第二步:删除工程中的src目錄(父工程不需要這個目錄),當然,留着也沒事

第三步:添加核心依賴及版本管理

在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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cy</groupId>
    <artifactId>01-sca</artifactId>
    <!--建立父工程的子工程時,父工程的打包方式會自動變為pom方法-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <!--properties中定義一些屬性元素-->
    <properties>
        <spring.boot.version>2.3.2.RELEASE</spring.boot.version>
    </properties>
    <!--maven的父工程為一個pom工程
    此工程主要負責依賴版本及部分基礎依賴的管理-->
    <dependencyManagement>
        <dependencies>
            <!--Spring Boot 依賴(此依賴中定義了SpringBoot的版本)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <scope>import</scope>
                <type>pom</type>  <!--隻有pom類型可以import-->
            </dependency>
            <!--Spring Cloud 依賴-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
            <!--Spring Cloud Alibaba依賴-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!--dependencies元素中定義子工程中都需要的依賴-->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!--provided辨別隻在編譯階段有效,運作階段無效-->
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
           

其中,服務核心依賴版本可參考如下網址(涉及到一個相容性問題,不能随意指定其版本)

微服務核心依賴版本

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

最新版本目前無太多公司使用,存在着不确定性因數

4.建立子工程

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化

建立需要的個數,注意都在聚合父類下

【SpringCloud】微服務項目部署一,微服務簡介二,SpringCloud Alibaba微服務解決方案三,建構SpringCloud 聚合項目并進行環境初始化