Spring Cloud Alibaba入門

一、什么是Spring Cloud Alibaba

1.1 概述
  • 是阿里巴巴旗下結(jié)合自身微服務(wù)開發(fā)實踐,開源的微服務(wù)全家桶解決方案。
  • 在微服務(wù)Spring Cloud項目中進(jìn)行孵化和誕生,在未來可能會成為第二代標(biāo)準(zhǔn)的微服務(wù)架構(gòu)。
  • 現(xiàn)在在很多的大企業(yè)里流行使用,比如:百度、愛奇藝、阿里、虎牙直播、平安科技、貝殼找房等。
1.2 應(yīng)用場景
  • 大型分布式架構(gòu)系統(tǒng),比如大型電商、金融
  • 高并發(fā)的系統(tǒng),比如:門戶、直播、秒殺等系統(tǒng)
  • 需求不明確,需要更新迭代的創(chuàng)業(yè)性公司的系統(tǒng)
  • 新零售、微信小程序的后臺電商架構(gòu)

二、Spring Cloud和Spring Cloud Alibaba的關(guān)系

Spring Cloud Alibaba 其實是對Spring Cloud 微服務(wù)的最佳實踐,也就是Srping Cloud的一個子項目,不過它在Spring Cloud的基礎(chǔ)上完成了很多新組件和優(yōu)化的工作,因為在Spring Cloud 2.x以后官網(wǎng)很多的產(chǎn)品都即將停更或已停更,Spring Cloud Alibaba在這基礎(chǔ)上做了很多的替代解決方案,如下:

Spring Cloud Alibaba組件

三、什么是單體架構(gòu)與微服務(wù)架構(gòu)

3.1 單體架構(gòu)概述

把所有的業(yè)務(wù)模塊都堆砌在一個系統(tǒng)中,然后把系統(tǒng)打成一個war包或者jar包運行在應(yīng)用服務(wù)器中

3.1.1 單體架構(gòu)的優(yōu)點
  • 架構(gòu)單一、容易維護(hù)
  • 開發(fā)、測試、部署比較便捷
3.1.2 單體架構(gòu)的缺點
  • 復(fù)雜度高
  • 部署慢,體積大,不利于發(fā)布
  • 占用服務(wù)器資源過大
  • 阻礙新的技術(shù)創(chuàng)新
3.2 微服務(wù)架構(gòu)概述

微服務(wù)架構(gòu)風(fēng)格是一種將一個單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法,每個服務(wù)運行在自己的進(jìn)程中,服務(wù)間通信采用輕量級通信機制,通常用http資源的api來實現(xiàn),這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并且可通過全自動部署機制獨立部署,這些服務(wù)公用一個最小型的集中式的管理,服務(wù)可用不同的語言開發(fā),使用不同的數(shù)據(jù)存儲技術(shù)。

3.2.1 微服務(wù)架構(gòu)的特征
  • 每個微服務(wù)可獨立運行在自己的進(jìn)程里
  • 一系列獨立運行的微服務(wù)共同構(gòu)建起整個系統(tǒng)
  • 每個微服務(wù)可獨立開發(fā),在開發(fā)過程中只關(guān)注一個業(yè)務(wù)模塊的特定功能,比如支付服務(wù),訂單管理,用戶管理等等
  • 可使用不同的語言與數(shù)據(jù)存儲技術(shù)(契合項目情況和團(tuán)隊實力)
  • 為服務(wù)器直接通過輕量級的通信機制進(jìn)行通信,比如:Rest API進(jìn)行調(diào)用
  • 全自動的部署機制
3.2.2 微服務(wù)架構(gòu)的優(yōu)點
  • 單個服務(wù)更易于開發(fā)、維護(hù)
  • 單個服務(wù)啟動比較快,部署也快,消耗的服務(wù)器資源更少
  • 技術(shù)棧不受限制
3.2.2 微服務(wù)架構(gòu)的缺點
  • 運維要求高
  • 分布式服務(wù)固有的復(fù)雜度
3.3 什么樣子的場景適合用微服務(wù)
  • 大型項目
  • 有快速迭代的要求
  • 訪問壓力過大的網(wǎng)站
3.4 什么樣子的網(wǎng)站不適合微服務(wù)
  • 業(yè)務(wù)穩(wěn)定
  • 迭代周期長
3.5 微服務(wù)拆分的方法論
  • DDD領(lǐng)域驅(qū)動設(shè)計
  • 面向?qū)ο篁?qū)動設(shè)計
  • 按照職責(zé)劃分,比如訂單模塊、搜索模塊等
  • 通用性劃分。把一些通用功能做成微服務(wù),比如用戶中心,支付中心,消息中心等。比如阿里流行的大中臺和小中臺的概念,一個中臺其實是由若干個微服務(wù)組成的。
3.6 微服務(wù)設(shè)計的合理性
  • 滿足業(yè)務(wù)的后續(xù)的擴展和延展
  • 滿足團(tuán)隊的成員的職業(yè)和技術(shù)的發(fā)展
  • 可以穩(wěn)步的迭代和更新你的業(yè)務(wù)
  • 可以持續(xù)的更新或者調(diào)整你的技術(shù)架構(gòu),以及完全的可靠和抽離

四、構(gòu)建微服務(wù)項目

4.1 創(chuàng)建工程
4.1.1 新建父工程[mallcloud]
新建Project
選擇maven工程
項目名字
刪除src,添加配置
4.1.2 新建一個[user-service]工程

選中mallcloud項目,選擇新建module

新建module
選擇maven工程
module名稱
4.1.3 新建一個[order-service]工程

和創(chuàng)建user-service一樣創(chuàng)建order-service

order-service

創(chuàng)建完成后的項目結(jié)構(gòu)


創(chuàng)建完成后的項目結(jié)構(gòu)
4.2 添加相關(guān)依賴

參考地址:Spring Cloud Alibaba官網(wǎng)

4.2.1 父工程[mallcloud]添加依賴

在父工程 [mallcloud] pom.xml中引入SpringBoot、Spring Cloud 和Spring Cloud Alibaba相關(guān)依賴,如下

<?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>org.alanchen</groupId>
    <artifactId>mallcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>users-service</module>
        <module>order-service</module>
    </modules>

    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <mysql.version>8.0.17</mysql.version>
        <mybatis.plus.version>3.2.0</mybatis.plus.version>
        <druid.version>1.1.10</druid.version>
        <boot.version>2.2.4.RELEASE</boot.version>
        <alibaba.cloud.version>2.1.0.RELEASE</alibaba.cloud.version>
    </properties>

    <!-- 管理子類所有的jar包的版本,這樣的目的是方便去統(tǒng)一升級和維護(hù) -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <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>${alibaba.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

        </dependencies>

    </dependencyManagement>

    <!-- 所有的子工程都會自動加入下面的依賴  -->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <!-- SpringBoot 工程編譯打包的插件,放在父pom中就直接給所有子工程繼承 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
4.2.2 [order-service]添加依賴
<?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">
    <parent>
        <artifactId>mallcloud</artifactId>
        <groupId>org.alanchen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order-service</artifactId>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>6</source>
                    <target>6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

</project>
4.2.3 [user-service]添加依賴
<?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">
    <parent>
        <artifactId>mallcloud</artifactId>
        <groupId>org.alanchen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>users-service</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

</project>
4.3 [order-service] & [user-service]通信demo
4.3.1 [user-service] 提供查詢用戶接口
user-service
4.3.2 [order-service] 下單并遠(yuǎn)程調(diào)用[user-service]用戶查詢接口
order-service

Demo地址

Spring Cloud Alibaba官網(wǎng)

資料來源:SpringCloud和Spring Cloud Alibaba

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容