Linux中國

使用 GraphQL 作為 API 網關來監控微服務

微服務GraphQL 就像麵包和黃油一樣,是一個很好的組合。它們本身都很棒,結合起來就更棒了。了解你的微服務的健康狀況是很重要的,因為它們運行著重要的服務。如果等到某個關鍵的服務崩潰了才診斷問題,那是很愚蠢的。讓 GraphQL 幫助你及早發現問題並不需要花費太多精力。

![GraphQL in Microservices](/data/attachment/album/202009/06/205139mi1icisfjshcgspm.png "GraphQL in Microservices")

常規的健康檢查可以讓你觀察和測試你的服務,在問題影響到你的業務、客戶或項目之前,儘早得到通知。說起來很簡單,但健康檢查到底要做什麼呢?

以下是我在設計服務檢查時考慮的因素:

伺服器健康檢查的要求:

  1. 我需要了解我的微服務的可用性狀態。
  2. 我希望能夠管理伺服器的負載。
  3. 我希望對我的微服務進行端到端(e2e)測試。
  4. 我應該能夠預測中斷。

![Service health in microservices](/data/attachment/album/202009/06/205142p8u5addu33gzu4gu.png "Service health in microservices")

做伺服器健康檢查的方法

進行健康檢查可能比較棘手,因為理論上,你可以檢查的東西幾乎是無窮無盡的。我喜歡從小處著手,運行最基本的測試:ping 測試。這只是測試運行應用的伺服器是否可用。然後,我加強測試以評估特定問題,思考伺服器中最重要的元素。我想到那些如果突然消失的話將是災難性的事情。

  1. Ping 檢查:Ping 是最簡單的監控類型。它只是檢查你的應用是否在線。
  2. 腳本化瀏覽器:腳本化瀏覽器比較高級。像 Selenium 這樣的瀏覽器自動化工具可以讓你實現自定義的監控規則集。
  3. API 測試:API 測試用於監控 API 端點。這是 ping 檢查模型的高級版本,你可以根據 API 響應來定義監控計劃。

使用 GraphQL 進行健康檢查

在一個典型的基於 REST 的微服務中,你需要從頭開始構建健康檢查功能。這是一個時間密集型的過程,但使用 GraphQL 就不用擔心了。

根據它的網站稱:

「GraphQL 是一種用於 API 的查詢語言,也是一種用現有數據完成這些查詢的運行時環境。GraphQL 為你的 API 中的數據提供了一個完整的、可理解的描述,讓客戶有能力精確地僅查詢他們所需要的東西,讓 API 更容易隨著時間的推移而進化,並實現強大的開發者工具。」

當你啟動一個 GraphQL 微服務時,你還可以獲得監控微服務的運行狀況的供給。這是一個隱藏的寶貝。

正如我上面提到的,你可以用 GraphQL 端點執行 API 測試以及 ping 檢查。

Apollo GraphQL 伺服器提供了一個默認的端點,它可以返回有關你的微服務和伺服器健康的信息。它不是很複雜:如果伺服器正在運行,它就會返回狀態碼 200。

默認端點是 <server-host>/.well-known/apollo/server-health

![Health Check with GraphQL](/data/attachment/album/202009/06/205144cpb2h7udbv73bavd.png "Health Check with GraphQL")

高級健康檢查

在某些情況下,基本的健康檢查可能不足以確保系統的完整性。例如,緊密耦合的系統需要更多的業務邏輯來確保系統的健康。

Apollo GraphQL 在定義伺服器的同時,通過聲明一個 onHealthCheck 函數來有效地管理這種情況。

* Defining the Apollo Server */
const apollo = new ApolloServer({
  playground: process.env.NODE_ENV !== &apos;production&apos;,
  typeDefs: gqlSchema,
  resolvers: resolver,
  onHealthCheck: () => {
    return new Promise((resolve, reject) => {
      // Replace the `true` in this conditional with more specific checks!
      if (true) {
        resolve();
      } else {
        reject();
      }
    });
  }
});

當你定義一個 onHealthCheck 方法時,它返回一個 promise,如果伺服器準備好了,它就會返回 resolve,如果有錯誤,它就會返回 reject

GraphQL 讓監控 API 變得更容易。此外,在你的伺服器基礎架構中使用它可以使代碼變得可擴展。如果你想嘗試採用 GraphQL 作為你的新基礎設施定義,請參見我的 GitHub 倉庫中的示例代碼和配置

via: https://opensource.com/article/20/8/microservices-graphql

作者:Rigin Oommen 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國