微服務架構思想及Tars框架介紹

本文章爲專欄系列文章推薦進入專欄按順序閱讀

微服務架構及Tars框架

微服務方案需要的功能

完備的微服務解決方案往往需要以下的工具作爲組成部分。當然以下功能並非必須的功能,而且在我們使用的很多rpc解決方案中提供了以下的一種或多種功能。在大部分情況下我們可以不去過多關注這部分內容的實現細節但是需要了解各個部分的用途。

  • 服務註冊中心
  • 服務網關
  • 斷路(熔斷)器
  • 配置中心
  • 調用鏈路追蹤

1. 服務註冊中心

服務註冊中心在微服務方案中是很核心的基礎服務之一。其功能主要是服務的註冊和發現,服務檢查,服務註冊表的維護。

服務提供者在服務啓動時將自己的信息註冊到註冊中心,服務消費者通過服務註冊中心查詢服務的調用地址等信息進行服務調用。註冊中心會通過心跳檢測來檢測已註冊服務的狀態如果長時間無法訪問會從註冊表中剔除。

2. 服務網關

微服務網關是微服務架構中的一個關鍵的角色,用來保護、增強和控制對於微服務的訪問,微服務網關是一個處於應用程序或服務之前的系統,用來管理授權、訪問控制和流量限制等,這樣微服務就會被微服務網關保護起來,對所有的調用者透明。因此,隱藏在微服務網關後面的業務系統就可以更加專注於業務本身。微服務網關在Tars中沒有看到,現在微服務網關的可選擇性也非常多,大家可以自己去查看相關的解決方案和工具。

3. 斷路(熔斷)器

當下遊的服務因爲某種原因突然變得不可用或響應過慢,上游服務爲了保證自己整體服務的可用性,不再繼續調用目標服務,直接返回,快速釋放資源。如果目標服務情況好轉則恢復調用。

當企業微服務化以後,服務之間會有錯綜複雜的依賴關係,例如,一個前端請求一般會依賴於多個後端服務,技術上稱爲1 -> N扇出。在實際生產環境中,服務往往不是百分百可靠,服務可能會出錯或者產生延遲,如果一個應用不能對其依賴的故障進行容錯和隔離,那麼該應用本身就處在被拖垮的風險中。在一個高流量的網站中,某個單一後端一旦發生延遲,可能在數秒內導致所有應用資源(線程,隊列等)被耗盡,造成所謂的雪崩效應,嚴重時可致整個網站癱瘓。

熔斷在實現模式上有好幾種,但是最終目的是一致的爲了保證服務的高可用性,具體熔斷模式和算法可以查閱相關的資料。當然同樣有前人的現成的東西可以直接用,但是最好自己能夠掌握其中原理。

Tars中有提供相應的過載保護功能,和容錯保護,其中容錯保護支持名字服務排除策略和client主動排除。

4. 配置中心

配置中心就是把項目中各種配置、各種參數、各種開關,全部都放到一個集中的地方進行統一管理,並提供一套標準的接口。當各個服務需要獲取配置的時候,就來「配置中心」的接口拉取。當「配置中心」中的各種參數有更新的時候,也能通知到各個服務實時的過來同步最新的信息,使之動態更新。

在Tars中主服務節點有config服務能夠提供相應的功能,使用起來也是非常方便的。

5. 調用鏈路追蹤

如果想知道一個接口在哪個環節出現了問題,就必須清楚該接口調用了哪些服務,以及調用的順序,如果把這些服務串起來,看起來就像鏈條一樣,我們稱其爲調用鏈。

想要實現調用鏈,就要爲每次調用做個標識,然後將服務按標識大小排列,可以更清晰地看出調用順序。

在Tars中有消息染色功能,通過對某個請求進行消息染色從而能夠查看服務調用的細節。便於問題的排查。

Tars架構

tars官網上的架構圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gloquwZB-1592364667416)(https://tarscloud.github.io/TarsDocs/assets/tars_tuopu.png)]

整體架構的拓撲圖主要分爲2個部分:服務節點與公共框架節點。

  • 服務節點:服務節點可以認爲是服務所實際運行的一個具體的操作系統實例,可以是物理主機或者虛擬主機、雲主機。隨着服務的種類擴展和規模擴大,服務節點可能成千上萬甚至數以十萬計。 每臺服務節點上均有一個Node服務節點和N(N>=0)個業務服務節點,Node服務節點會對業務服務節點進行統一管理,提供啓停、發佈、監控等功能,同時接收業務服務節點上報過來的心跳。

  • 公共節點:

      公共節點包括以下幾個部分
    
      | Web管理系統:在Web上可以看到服務運行的各種實時數據情況,以及對服務進行發佈、啓停、部署等操作;
      
      | Registry(路由+管理服務):提供服務節點的地址查詢、發佈、啓停、管理等操作,以及對服務上報心跳的管理,通過它實現服務的註冊與發現;
    
      | Patch(發佈管理):提供服務的發佈功能;
    
      | Config(配置中心):提供服務配置文件的統一管理功能;
    
      | Log(遠程日誌):提供服務打日誌到遠程的功能;
    
      | Stat(調用統計):統計業務服務上報的各種調用信息,比如總流量、平均耗時、超時率等,以便對服務出現異常時進行告警;
    
      | Property(業務屬性):統計業務自定義上報的屬性信息,比如內存使用大小、隊列大小、cache命中率等,以便對服務出現異常時進行告警;
    
      | Notify(異常信息):統計業務上報的各種異常信息,比如服務狀態變更信息、訪問db失敗信息等,以便對服務出現異常時進行告警;
    

    這些服務我們會在後續使用中接觸到。以上的公共節點所包含的服務在Tars主節點中也是以服務的形式來使用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章