<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你必須懂的,SpringCloud Alibaba組件

          共 8395字,需瀏覽 17分鐘

           ·

          2021-01-30 10:43

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

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

          ? 作者?|? 水瘦山寒

          來(lái)源 |? urlify.cn/rqyyya

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

          一、介紹Spring Cloud Alibaba

          Ⅰ、簡(jiǎn)介

          • 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í)通過(guò)控制臺(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ù)問(wèn)題。。

          • 阿里云對(duì)象存儲(chǔ):阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。支持在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(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,簡(jiǎn)稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(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ù)庫(kù)進(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 的主要特性:

          • 核心庫(kù)(Java 客戶端)不依賴任何框架/庫(kù),能夠運(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ù)庫(kù)mysql

          四、分布式事務(wù)

          Ⅰ、Seata介紹

          • 1、什么是Seata

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

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

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

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

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

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

          • 3、Seata 機(jī)制

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

          如下圖所示,分布式事務(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 通過(guò)微服務(wù)的調(diào)用鏈傳播。XID 通過(guò)微服務(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ù)中提交,釋放本地鎖和連接資源。

          • 二階段:

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

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

          2、寫隔離

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

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

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

          3、讀隔離

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

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

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

          1、整體機(jī)制

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

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

          • 二階段:

            • 提交異步化,非??焖俚赝瓿伞?/span>

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

          2、寫隔離

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

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

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

          3、讀隔離

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

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




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

          ??????

          ??長(zhǎng)按上方微信二維碼?2 秒




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

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕一区精品 | 成人免费视频 国产免费麻豆 | 91丝袜视频 | 久久久久久久久国产精品 | 中文字幕性爱电影 |