一、什么是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