Spring Cloud Alibaba入門

一斧拍、什么是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ǔ)上做了很多的替代解決方案启搂,如下:

Spring Cloud Alibaba組件

三、什么是單體架構(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]
新建Project
選擇maven工程
項(xiàng)目名字
刪除src,添加配置
4.1.2 新建一個(gè)[user-service]工程

選中mallcloud項(xiàng)目,選擇新建module

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

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

order-service

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


創(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] 提供查詢用戶接口
user-service
4.3.2 [order-service] 下單并遠(yuǎn)程調(diào)用[user-service]用戶查詢接口
order-service

Demo地址

Spring Cloud Alibaba官網(wǎng)

資料來(lái)源:SpringCloud和Spring Cloud Alibaba

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跌造,一起剝皮案震驚了整個(gè)濱河市互纯,隨后出現(xiàn)的幾起案子殖卑,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爱只,死亡現(xiàn)場(chǎng)離奇詭異哑舒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門摇天,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人液南,你說(shuō)我怎么就攤上這事咒钟。” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵贿堰,是天一觀的道長(zhǎng)往踢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)热押,這世上最難降的妖魔是什么池凄? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伟端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匪煌。我一直安慰自己责蝠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布萎庭。 她就那樣靜靜地躺著霜医,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驳规。 梳的紋絲不亂的頭發(fā)上肴敛,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音吗购,去河邊找鬼医男。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捻勉,可吹牛的內(nèi)容都是我干的镀梭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼踱启,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丰辣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起禽捆,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笙什,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后胚想,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琐凭,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浊服,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统屈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胚吁。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愁憔,靈堂內(nèi)的尸體忽然破棺而出腕扶,到底是詐尸還是另有隱情,我是刑警寧澤吨掌,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布半抱,位于F島的核電站,受9級(jí)特大地震影響膜宋,放射性物質(zhì)發(fā)生泄漏窿侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一秋茫、第九天 我趴在偏房一處隱蔽的房頂上張望史简。 院中可真熱鬧,春花似錦肛著、人聲如沸圆兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)殉农。三九已至,卻和暖如春萨咕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背火本。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工危队, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钙畔。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓茫陆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親擎析。 傳聞我的和親對(duì)象是個(gè)殘疾皇子簿盅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355