1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        你必須懂的,SpringCloud Alibaba組件

        共 8395字,需瀏覽 17分鐘

         ·

        2021-01-30 10:43

        點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

        優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

        ? 作者?|? 水瘦山寒

        來源 |? urlify.cn/rqyyya

        76套java從入門到精通實(shí)戰(zhàn)課程分享

        一、介紹Spring Cloud Alibaba

        Ⅰ、簡介

        • spring cloud Netflix 相關(guān)技術(shù)整體進(jìn)入維護(hù)模式 Ribbon、Hystrix、zuul、Eureka、config等

        • spring cloud 整合Netflix

        • spring cloud alibaba 包含Netflix功能

        • 中文介紹:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

        Ⅱ、Spring cloud Alibaba 體系

        1、功能介紹

        • 服務(wù)限流降級(jí):默認(rèn)支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級(jí)功能的接入,可以在運(yùn)行時(shí)通過控制臺(tái)實(shí)時(shí)修改限流降級(jí)規(guī)則,還支持查看限流降級(jí) Metrics 監(jiān)控。

        • 服務(wù)注冊(cè)與發(fā)現(xiàn):適配 Spring Cloud 服務(wù)注冊(cè)與發(fā)現(xiàn)標(biāo)準(zhǔn),默認(rèn)集成了 Ribbon 的支持。

        • 分布式配置管理:支持分布式系統(tǒng)中的外部化配置,配置更改時(shí)自動(dòng)刷新。

        • 消息驅(qū)動(dòng)能力:基于 Spring Cloud Stream 為微服務(wù)應(yīng)用構(gòu)建消息驅(qū)動(dòng)能力。

        • 分布式事務(wù):使用 @GlobalTransactional 注解, 高效并且對(duì)業(yè)務(wù)零侵入地解決分布式事務(wù)問題。。

        • 阿里云對(duì)象存儲(chǔ):阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。支持在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問任意類型的數(shù)據(jù)。

        • 分布式任務(wù)調(diào)度:提供秒級(jí)、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。同時(shí)提供分布式的任務(wù)執(zhí)行模型,如網(wǎng)格任務(wù)。網(wǎng)格任務(wù)支持海量子任務(wù)均勻分配到所有 Worker(schedulerx-client)上執(zhí)行。

        • 阿里云短信服務(wù):覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。

        2、功能組件

        • Sentinel:把流量作為切入點(diǎn),從流量控制、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。

        • Nacos:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。

        • RocketMQ:一款開源的分布式消息系統(tǒng),基于高可用分布式集群技術(shù),提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)。

        • Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。

        • Seata:阿里巴巴開源產(chǎn)品,一個(gè)易于使用的高性能微服務(wù)分布式事務(wù)解決方案。

        • Alibaba Cloud OSS: 阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問任意類型的數(shù)據(jù)。

        • Alibaba Cloud SchedulerX: 阿里中間件團(tuán)隊(duì)開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級(jí)、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。

        • Alibaba Cloud SMS: 覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。

        • 更多組件請(qǐng)參考 Roadmap。

        二、服務(wù)注冊(cè)和配置中心**Nacos**

        Ⅰ、Nacos介紹

        Nacos:文檔 https://nacos.io/zh-cn/docs/what-is-nacos.html

        • 一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。

        • Dynamic Naming and Configuration Service 注冊(cè)中心+配置中心

        • Nacos = Eureka + Config + Bus + Ribbon

        Ⅱ、Nacos注冊(cè)中心

        1、provider

        1. Install:https://blog.csdn.net/weixin_40939212/article/details/108337893

        2. 測(cè)試:http://localhost:8848/nacos(登錄:nacos/nacos)

        1. 服務(wù)提供者配置(三部曲)*N(端口不一樣的多臺(tái))

          • pom


        ????
        ????????
        ????????
        ????????????com.alibaba.cloud
        ????????????spring-cloud-alibaba-dependencies
        ????????????2.1.0.RELEASE
        ????????????<type>pomtype>
        ????????????import
        ????????

        ????


        ?

        ????
        ????????org.springframework.boot
        ????????spring-boot-starter-web
        ????

        ????
        ????
        ????
        ????????com.alibaba.cloud
        ????????spring-cloud-starter-alibaba-nacos-discovery
        ????

        ????
        ????????org.projectlombok
        ????????lombok
        ????????true
        ????

        ????
        ????????org.springframework.boot
        ????????spring-boot-starter-test
        ????????test
        ????????
        ????????????
        ????????????????org.junit.vintage
        ????????????????junit-vintage-engine
        ????????????

        ????????

        ????


        ?

        ????
        ????????
        ????????????org.springframework.boot
        ????????????spring-boot-maven-plugin
        ????????

        ????



        • yml

        server:
        ??port:?9001
        spring:
        ??application:
        ????name:?nacos-provider
        ??cloud:
        ????nacos:
        ??????discovery:
        ????????#nacos?服務(wù)地址
        ????????server-addr:?localhost:8848
        management:
        ??endpoints:
        ????web:
        ??????exposure:
        ??????#注意這里的*?需要加上引號(hào)?不然啟動(dòng)報(bào)錯(cuò)
        ????????include:?'*'


        • main application

        @SpringBootApplication
        @EnableDiscoveryClient
        public?class?NacosApplication?{
        ????public?static?void?main(String[]?args)?{
        ????????SpringApplication.run(NacosApplication.class,?args);
        ????}
        }


        服務(wù)提供者 9001/9002 application.name= nacos-provider

        2、Consumers

        1、Consumer配置三部曲(與服務(wù)提供者一致,端口83)

        • pom

        • yml

        • main application

        2、由于集成了Ribbon做負(fù)載均衡,使用了RestTemplate做微服務(wù)發(fā)送,所以要增加RestTemplate的配置類

        @Configuration
        public?class?ApplictationContextConfig?{
        ????@Bean
        ????@LoadBalanced//如果有多臺(tái)服務(wù)提供者?不可忘加
        ????public?RestTemplate?restTemplate()?{
        ????????return?new?RestTemplate();
        ????}
        }


        3、調(diào)用

        @RestController
        public?class?NacosConsumerController?{
        ????private?static?final?String?URL?=?"http://nacos-provider";//服務(wù)提供方
        ????@Autowired
        ????RestTemplate?restTemplate;
        ????@GetMapping(value?=?"/consumer/{string}")
        ????public?String?echo(@PathVariable?String?string)?{
        ????????return?"NacosConsumerController:?"?+?restTemplate.getForObject(URL?+?"/provider/"?+?string,?String.class);
        ????}


        4、Nacos 服務(wù)

        5、測(cè)試 http://localhost:83/consumer/nacos

        Ⅲ、Nacos配置中心

        官網(wǎng):https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

        基于注冊(cè)中心基礎(chǔ)上,增加相關(guān)config的配置

        1、基礎(chǔ)配置

        1、pom


        ?????com.alibaba.cloud
        ?????spring-cloud-starter-alibaba-nacos-config


        2、新增bootstrap.yml配置文件

        Nacos與config一樣,在初始化的時(shí)候,先從配置中心拉取配置。而在springboot中配置文件的優(yōu)先級(jí)順序,bootstrap 要高于application。相同的內(nèi)容會(huì)被bootstrap中的覆蓋。

        server:
        ??port:?83
        spring:
        ??application:
        ????name:?nacos-config
        ??profiles:
        ????active:?dev
        ??cloud:
        ????nacos:
        ??????config:
        ????????server-addr:?localhost:8848
        ????????file-extension:?yaml
        ??????discovery:
        ????????#nacos?\u670D\u52A1\u5730\u5740
        ????????server-addr:?localhost:8848


        3、Nacos配置中心增加配置文件

        • s p r i n g . a p p l i c a t i o n . n a m e ? {spring.application.name}-spring.application.name?{profile}.${file-extension:properties}

        • nacos-config -dev .yaml

        • 應(yīng)用名-環(huán)境.文件名后綴

        4、使用@RefreshScope進(jìn)行配置刷新

        @RestController
        @RefreshScope//自動(dòng)刷新注解
        public?class?NacosConfigController?{}


        2、多環(huán)境配置

        1、namespace 開發(fā)環(huán)境隔離

        2、Group 可以把不同的微服務(wù)劃分為同一組

        3、Service 就是微服務(wù)集群

        3、Nacos集群

        • nginx(集群) 反向代理 Nacos集群,Nacos集群連接同一個(gè)數(shù)據(jù)庫進(jìn)行持久化

          微服務(wù)注冊(cè)地址變成nginx


        • ??cloud:
          ????nacos:
          ??????config:
          ??????#集群部署?地址修改為nginx代理地址
          ????????server-addr:?localhost:8848
          ????????file-extension:?yaml
          ??????discovery:
          ????????#集群部署?地址修改為nginx代理地址
          ????????server-addr:?localhost:8848

        三、服務(wù)監(jiān)控降級(jí)Sentinel

        Sentinel 的主要特性:

        • 核心庫(Java 客戶端)不依賴任何框架/庫,能夠運(yùn)行于所有 Java 運(yùn)行時(shí)環(huán)境,同時(shí)對(duì) Dubbo / Spring Cloud 等框架也有較好的支持。

        • 控制臺(tái)(Dashboard)基于 Spring Boot 開發(fā),打包后可以直接運(yùn)行,不需要額外的 Tomcat 等應(yīng)用容器。

        Ⅰ、基本配置

        1、下載安裝Sentinel

        • 直接官網(wǎng)下載jar包,java -jar xxxx.jar運(yùn)行 (需要有jdk配置)

        • 配置微服務(wù)


        ????
        ????????
        ????????
        ????????????com.alibaba.cloud
        ????????????spring-cloud-alibaba-dependencies
        ????????????2.1.0.RELEASE
        ????????????<type>pomtype>
        ????????????import
        ????????

        ????


        ?

        ????
        ????
        ????????com.alibaba.cloud
        ????????spring-cloud-starter-alibaba-sentinel
        ????????2.2.3.RELEASE
        ????

        ????
        ????
        ????????com.alibaba.csp
        ????????sentinel-datasource-nacos
        ????????1.8.0
        ????

        ????
        ????
        ????????com.alibaba.cloud
        ????????spring-cloud-starter-alibaba-nacos-discovery
        ????

        ????
        ????????org.springframework.boot
        ????????spring-boot-starter-web
        ????

        ?
        ????
        ????????org.projectlombok
        ????????lombok
        ????????true
        ????



        • yml

        server:
        ??port:?8401
        spring:
        ??application:
        ????name:?sentinel-provider
        ??cloud:
        ????nacos:
        ??????discovery:
        ????????#nacos?服務(wù)注冊(cè)地址
        ????????server-addr:?localhost:8848
        ????sentinel:
        ??????transport:
        ????????#sentinel?dashboard?地址
        ????????dashboard:?localhost:8080
        management:
        ??endpoints:
        ????web:
        ??????exposure:
        ????????include:?'*'
        • main application

        @SpringBootApplication
        @EnableDiscoveryClient
        public?class?SentinelApplication?{
        ????public?static?void?main(String[]?args)?{
        ????????SpringApplication.run(SentinelApplication.class,?args);
        ????}
        }
        • controller

        @RestController
        public?class?SentinelController?{
        ????@RequestMapping("/sentinel/testA")
        ????public?String?testA()?{
        ????????return?"AAAAAAAAAA";
        ????}
        ?
        ????@RequestMapping("/sentinel/testB")
        ????public?String?testB()?{
        ????????return?"BBBBBBBBBB";
        ????}
        }
        • 查看dashboard(懶加載 需要先做一次請(qǐng)求)

        • http://localhost:8401/sentinel/testA

        Ⅱ、功能介紹

        • ?簇點(diǎn)鏈路

        • ?流控規(guī)則

        • ?降級(jí)規(guī)則

        • ?熱點(diǎn)規(guī)則

        • ?系統(tǒng)規(guī)則

        • ?授權(quán)規(guī)則

        • ?集群流控

        • ?機(jī)器列表

        • ?實(shí)時(shí)監(jiān)控

        Ⅲ、持久化

        在nacos配置管理中增加配置,配置會(huì)持久化到nacos的持久化數(shù)據(jù)庫mysql

        四、分布式事務(wù)

        Ⅰ、Seata介紹

        • 1、什么是Seata

        Seata 是一個(gè)用于微服務(wù)架構(gòu)的分布式事務(wù)解決方案,它的特點(diǎn)是高性能且易于使用,旨在實(shí)現(xiàn)簡單并快速的事務(wù)提交與回滾。

        • 2、微服務(wù)架構(gòu)中的分布式事務(wù)問題

        從傳統(tǒng)的單體應(yīng)用說起,假設(shè)一個(gè)單體應(yīng)用的業(yè)務(wù)由 3 個(gè)模塊構(gòu)成,三者使用單個(gè)本地?cái)?shù)據(jù)源。

        這樣的話本地事務(wù)很自然就可以保證數(shù)據(jù)一致性。

        但是在微服務(wù)架構(gòu)中就不這么簡單了,這 3 個(gè)模塊被設(shè)計(jì)為 3 個(gè)不同數(shù)據(jù)源之上的 3 個(gè)服務(wù),每個(gè)服務(wù)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫。

        本地事務(wù)當(dāng)然也可以保證每個(gè)服務(wù)中的數(shù)據(jù)一致性,但是擴(kuò)展到整個(gè)應(yīng)用、整個(gè)業(yè)務(wù)邏輯范圍來看,情況如何呢?

        • 3、Seata 機(jī)制

        Seata 就是用于解決上述微服務(wù)架構(gòu)中的事務(wù)問題的解決方案。

        如下圖所示,分布式事務(wù)是一個(gè)全局事務(wù)(Global Transaction),由一批分支事務(wù)(Branch Transation)組成,通常分支事務(wù)只是本地事務(wù)。

        Seata 中有三大基本組件:

        • Transaction Coordinator(TC):維護(hù)全局和分支事務(wù)的狀態(tài),驅(qū)動(dòng)全局事務(wù)提交與回滾。

        • Transaction Manager?:定義全局事務(wù)的范圍:開始、提交或回滾全局事務(wù)。

        • Resource Manager(RM):管理分支事務(wù)處理的資源,與 TC通信以注冊(cè)分支事務(wù)并報(bào)告分支事務(wù)的狀態(tài),并驅(qū)動(dòng)分支事務(wù)提交或回滾。

        Ⅱ、執(zhí)行流程

        Seata 管理分布式事務(wù)的典型生命周期

        1. TM 要求 TC 開始新的全局事務(wù),TC 生成表示全局事務(wù)的 XID。

        2. XID 通過微服務(wù)的調(diào)用鏈傳播。XID 通過微服務(wù)的調(diào)用鏈傳播。

        3. RM 在 TC 中將本地事務(wù)注冊(cè)為 XID 的相應(yīng)全局事務(wù)的分支。RM 在 TC 中將本地事務(wù)注冊(cè)為 XID 的相應(yīng)全局事務(wù)的分支。

        4. TM 要求 TC 提交或回滾 XID 的相應(yīng)全局事務(wù)。TM 要求 TC 提交或回滾 XID 的相應(yīng)全局事務(wù)。

        5. TC 驅(qū)動(dòng) XID 的相應(yīng)全局事務(wù)下的所有分支事務(wù),完成分支提交或回滾。TC 驅(qū)動(dòng) XID 的相應(yīng)全局事務(wù)下的所有分支事務(wù),完成分支提交或回滾。

        1、整體機(jī)制

        兩階段提交協(xié)議的演變:

        • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。

        • 二階段:

          • 提交異步化,非??焖俚赝瓿?。

          • 回滾通過一階段的回滾日志進(jìn)行反向補(bǔ)償。

        2、寫隔離

        • 一階段本地事務(wù)提交前,需要確保先拿到?全局鎖?。

        • 拿不到?全局鎖?,不能提交本地事務(wù)。

        • 拿?全局鎖?的嘗試被限制在一定范圍內(nèi),超出范圍將放棄,并回滾本地事務(wù),釋放本地鎖。

        3、讀隔離

        在數(shù)據(jù)庫本地事務(wù)隔離級(jí)別?讀已提交(Read Committed)?或以上的基礎(chǔ)上,Seata(AT 模式)的默認(rèn)全局隔離級(jí)別是?讀未提交(Read Uncommitted)?。

        如果應(yīng)用在特定場(chǎng)景下,必需要求全局的?讀已提交?,目前 Seata 的方式是通過 SELECT FOR UPDATE 語句的代理。

        分支提交或回滾。TC 驅(qū)動(dòng) XID 的相應(yīng)全局事務(wù)下的所有分支事務(wù),完成分支提交或回滾。

        1、整體機(jī)制

        兩階段提交協(xié)議的演變:

        • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。

        • 二階段:

          • 提交異步化,非??焖俚赝瓿?。

          • 回滾通過一階段的回滾日志進(jìn)行反向補(bǔ)償。

        2、寫隔離

        • 一階段本地事務(wù)提交前,需要確保先拿到?全局鎖?。

        • 拿不到?全局鎖?,不能提交本地事務(wù)。

        • 拿?全局鎖?的嘗試被限制在一定范圍內(nèi),超出范圍將放棄,并回滾本地事務(wù),釋放本地鎖。

        3、讀隔離

        在數(shù)據(jù)庫本地事務(wù)隔離級(jí)別?讀已提交(Read Committed)?或以上的基礎(chǔ)上,Seata(AT 模式)的默認(rèn)全局隔離級(jí)別是?讀未提交(Read Uncommitted)?。

        如果應(yīng)用在特定場(chǎng)景下,必需要求全局的?讀已提交?,目前 Seata 的方式是通過 SELECT FOR UPDATE 語句的代理。




        鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布

        ??????

        ??長按上方微信二維碼?2 秒




        感謝點(diǎn)贊支持下哈?

        瀏覽 157
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久不射电影院 | 清纯校花被c | 成人艹逼视频 | 乳色av网站 | 学生妹一级毛片免费播放 | 中文字幕一区二区三区5566 | 91漂亮少妇露脸在线播放 | 天堂√最新版中文在线天堂 | 国产精品久久免费 | 夸克成人免费无码毛片 |