一斧拍、什么是Spring Cloud Alibaba
1.1 概述
- 是阿里巴巴旗下結(jié)合自身微服務(wù)開發(fā)實(shí)踐肆汹,開源的微服務(wù)全家桶解決方案昂勉。
- 在微服務(wù)Spring Cloud項(xiàng)目中進(jìn)行孵化和誕生,在未來(lái)可能會(huì)成為第二代標(biāo)準(zhǔn)的微服務(wù)架構(gòu)村象。
- 現(xiàn)在在很多的大企業(yè)里流行使用厚者,比如:百度库菲、愛奇藝熙宇、阿里烫止、虎牙直播烈拒、平安科技荆几、貝殼找房等吨铸。
1.2 應(yīng)用場(chǎng)景
- 大型分布式架構(gòu)系統(tǒng)诞吱,比如大型電商、金融
- 高并發(fā)的系統(tǒng)沼瘫,比如:門戶、直播耿戚、秒殺等系統(tǒng)
- 需求不明確膜蛔,需要更新迭代的創(chuàng)業(yè)性公司的系統(tǒng)
- 新零售皂股、微信小程序的后臺(tái)電商架構(gòu)
二就斤、Spring Cloud和Spring Cloud Alibaba的關(guān)系
Spring Cloud Alibaba 其實(shí)是對(duì)Spring Cloud 微服務(wù)的最佳實(shí)踐,也就是Srping Cloud的一個(gè)子項(xiàng)目槐秧,不過(guò)它在Spring Cloud的基礎(chǔ)上完成了很多新組件和優(yōu)化的工作刁标,因?yàn)樵赟pring Cloud 2.x以后官網(wǎng)很多的產(chǎn)品都即將停更或已停更,Spring Cloud Alibaba在這基礎(chǔ)上做了很多的替代解決方案启搂,如下:
三、什么是單體架構(gòu)與微服務(wù)架構(gòu)
3.1 單體架構(gòu)概述
把所有的業(yè)務(wù)模塊都堆砌在一個(gè)系統(tǒng)中疑苫,然后把系統(tǒng)打成一個(gè)war包或者jar包運(yùn)行在應(yīng)用服務(wù)器中
3.1.1 單體架構(gòu)的優(yōu)點(diǎn)
- 架構(gòu)單一、容易維護(hù)
- 開發(fā)挺勿、測(cè)試、部署比較便捷
3.1.2 單體架構(gòu)的缺點(diǎn)
- 復(fù)雜度高
- 部署慢,體積大,不利于發(fā)布
- 占用服務(wù)器資源過(guò)大
- 阻礙新的技術(shù)創(chuàng)新
3.2 微服務(wù)架構(gòu)概述
微服務(wù)架構(gòu)風(fēng)格是一種將一個(gè)單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法讲竿,每個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中鞋诗,服務(wù)間通信采用輕量級(jí)通信機(jī)制,通常用http資源的api來(lái)實(shí)現(xiàn)融痛,這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并且可通過(guò)全自動(dòng)部署機(jī)制獨(dú)立部署,這些服務(wù)公用一個(gè)最小型的集中式的管理沛励,服務(wù)可用不同的語(yǔ)言開發(fā),使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)。
3.2.1 微服務(wù)架構(gòu)的特征
- 每個(gè)微服務(wù)可獨(dú)立運(yùn)行在自己的進(jìn)程里
- 一系列獨(dú)立運(yùn)行的微服務(wù)共同構(gòu)建起整個(gè)系統(tǒng)
- 每個(gè)微服務(wù)可獨(dú)立開發(fā),在開發(fā)過(guò)程中只關(guān)注一個(gè)業(yè)務(wù)模塊的特定功能螟凭,比如支付服務(wù),訂單管理,用戶管理等等
- 可使用不同的語(yǔ)言與數(shù)據(jù)存儲(chǔ)技術(shù)(契合項(xiàng)目情況和團(tuán)隊(duì)實(shí)力)
- 為服務(wù)器直接通過(guò)輕量級(jí)的通信機(jī)制進(jìn)行通信淆院,比如:Rest API進(jìn)行調(diào)用
- 全自動(dòng)的部署機(jī)制
3.2.2 微服務(wù)架構(gòu)的優(yōu)點(diǎn)
- 單個(gè)服務(wù)更易于開發(fā)、維護(hù)
- 單個(gè)服務(wù)啟動(dòng)比較快各墨,部署也快,消耗的服務(wù)器資源更少
- 技術(shù)棧不受限制
3.2.2 微服務(wù)架構(gòu)的缺點(diǎn)
- 運(yùn)維要求高
- 分布式服務(wù)固有的復(fù)雜度
3.3 什么樣子的場(chǎng)景適合用微服務(wù)
- 大型項(xiàng)目
- 有快速迭代的要求
- 訪問(wèn)壓力過(guò)大的網(wǎng)站
3.4 什么樣子的網(wǎng)站不適合微服務(wù)
- 業(yè)務(wù)穩(wěn)定
- 迭代周期長(zhǎng)
3.5 微服務(wù)拆分的方法論
- DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
- 面向?qū)ο篁?qū)動(dòng)設(shè)計(jì)
- 按照職責(zé)劃分,比如訂單模塊、搜索模塊等
- 通用性劃分伟桅。把一些通用功能做成微服務(wù),比如用戶中心,支付中心,消息中心等听隐。比如阿里流行的大中臺(tái)和小中臺(tái)的概念,一個(gè)中臺(tái)其實(shí)是由若干個(gè)微服務(wù)組成的锌半。
3.6 微服務(wù)設(shè)計(jì)的合理性
- 滿足業(yè)務(wù)的后續(xù)的擴(kuò)展和延展
- 滿足團(tuán)隊(duì)的成員的職業(yè)和技術(shù)的發(fā)展
- 可以穩(wěn)步的迭代和更新你的業(yè)務(wù)
- 可以持續(xù)的更新或者調(diào)整你的技術(shù)架構(gòu)钦勘,以及完全的可靠和抽離
四、構(gòu)建微服務(wù)項(xiàng)目
4.1 創(chuàng)建工程
4.1.1 新建父工程[mallcloud]
4.1.2 新建一個(gè)[user-service]工程
選中mallcloud項(xiàng)目,選擇新建module
4.1.3 新建一個(gè)[order-service]工程
和創(chuàng)建user-service一樣創(chuàng)建order-service
創(chuàng)建完成后的項(xià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)一升級(jí)和維護(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>
<!-- 所有的子工程都會(huì)自動(dòng)加入下面的依賴 -->
<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] 提供查詢用戶接口
4.3.2 [order-service] 下單并遠(yuǎn)程調(diào)用[user-service]用戶查詢接口
資料來(lái)源:SpringCloud和Spring Cloud Alibaba