天天看點

微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

1.Nacos

官網位址:https://nacos.io/zh-cn/

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

nacos支援dubbo和spring-cloud。主要常用的功能是承擔注冊中心和配置中心的功能

注冊中心:是微服務的必須的依靠

配置中心:可以把一些代碼yml或者其他配置檔案的内容配置到nacos中儲存,當nacos中的配置資訊發生改變,nacos自帶動态重新整理。不用重新開機微服務就能使配置生效

各種注冊中心比較:
服務注冊架構 CAP模型 web控制台
eureka AP 支援
zookeeper CP 不支援
consul CP 支援
nacos AP/CP(支援切換) 支援

C:Consistency(強一緻性)

A:Availability(可用性)

P:Partition tolerance(分區容錯性)

目前微服務注冊中心都會支援分區容錯性

下載下傳啟動後可以通過 http://localhost:8848/nacos 直接通路  預設賬戶密碼都是nacos

Nacos預設自帶的是嵌入式資料庫derby ruguo  需要做更加安全 的持久化配置可以修改nacos\conf下的配置檔案修改為mysql連接配接資訊
叢集搭建了解(以下為官網架構圖)
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

首先在三台nacos中配置好三台各自的叢集資訊,然後實際上就是通過nginx代理  負載均衡三台nacos

在項目代碼中隻需要向nginx位址注冊服務資訊即可

2.Seata

官網位址:http://seata.io/zh-cn/

文檔位址:http://seata.io/zh-cn/docs/overview/what-is-seata.html

seata是用于解決分布式事務的資料一緻性問題的架構。在我們的微服務中多個業務子產品微服務甚至多個資料庫的互相調用,如果發生異常則無法控制其他微服務的資料復原。這個時候需要一個能統一控制微服務之間的調用事物協調的架構Seata。(單機版無分布式事務問題)

主要元件

Transaction ID全局唯一的事務ID+TC、TM、RM三個元件

TC - 事務協調者:維護全局和分支事務的狀态,驅動全局事務送出或復原。

TM - 事務管理器:定義全局事務的範圍:開始全局事務、送出或復原全局事務。

RM - 資料總管:管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀态,并驅動分支事務送出或復原。

官網處理過程圖形
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

使用:通過官網文檔內建到項目中之後,隻需要在service層方法上打一個注解 @GlobalTransactional

3.Sentinel

官網位址:https://github.com/alibaba/Sentinel

文檔位址:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

Sentinel: 分布式系統的流量防衛兵

Sentinel 是什麼?

随着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個次元保護服務的穩定性。(官網原話)

微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

https://github.com/alibaba/Sentinel/releases 下載下傳運作jar

java -jar sentinel-dashboard-1.7.1.jar  運作

通路sentinel管理界面   http://localhost:8080  登入賬戶密碼均為 sentinel

web可視化界面

微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

流量控制:

        門檻值類型:

                 可以通過新增某個接口的流量控制 

                  QPS(每秒請求數量):目前調用api的QPS達到門檻值進行限流

                  線程數:目前調用api的線程數達到門檻值進行限流

         流控模式:

                   直接:api自己到門檻值條件,直接限流

                   關聯:當關聯資源達到門檻值就限流自己

                   鍊路:指定調用鍊路上的流量達到門檻值就限流

          流控效果:

                    快速失敗:直接提示失敗

                    warm up: 根據codeFactor(冷加載因子,源碼中預設3),從門檻值/codeFactor,經過預熱時長,才慢慢達到                                         門檻值

                     排隊等待:字面意思排隊等待

直接通過web控制台新增流控配置

降級熔斷:
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel
熱點參數限流: 資源名使用@SentinalResource的屬性取名(注意所有的sentinal控制台配置出錯都走這個注解)
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel
系統自适應限流:
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

持久化:把限流配置儲存在Nacos的配置中心中就可以做到持久化,當服務重新開機,接口資源被重新調用過一次之後,就會出現在sentinal的控制台限流規則中

使用一下maven和配置

<!-- SpringCloud ailibaba sentinel-datasource-nacos 持久化需要用到-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
           
spring:
 cloud:
   
    sentinel:
      transport:
        #配置Sentin dashboard位址
        dashboard: localhost:8080
        # 預設8719端口,假如被占用了會自動從8719端口+1進行掃描,直到找到未被占用的 端口
        port: 8719
          datasource:
            ds1:
              nacos:
                server-addr: localhost:8848
                dataId: sentinel-service
                groupId: DEFAULT_GROUP
                data-type: json
                rule-type: flow
           
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel
  • resource:資源名
  • limitApp:流控針對的調用來源,default不區分來源
  • grade:限流門檻值類型(0-根據并發數量來限流 1-根據QPS來進行流量控制)
  • count:限流門檻值
  • strategy:調用關系限流政策
  • controlBehavior:流量控制效果(直接拒絕、WarmUP、勻速排隊)
  • clusterMode:是否叢集模式
注解簡紹:
微服務(alibaba系列)必備架構nacos、seata、sentinel理論了解1.Nacos2.Seata3.Sentinel

繼續閱讀