全部產品
Search
文件中心

API Gateway:Zookeeper

更新時間:Jul 13, 2024

本文將介紹API Gateway整合Zookeeper訪問微服務後端的原理,以及如何建立、發布並調用服務發現類型的API。

1. 概述

本文依次介紹如下步驟:

  • 原理說明

  • 建立VPC融合專享執行個體(僅VPC融合執行個體支援Zookeeper)

  • 部署Zookeeper服務並註冊微服務應用

  • 建立分組

  • 建立後端服務

  • 建立API

  • 建立應用並授予API的調用許可權

  • 調試API

2. 原理說明

Zookeeper 採用了類似檔案系統的樹形結構來儲存資料,樹中的各個節點都有一個唯一的訪問路徑,如“/provider/service”。服務的提供者可將微服務應用的執行個體資訊註冊到Zookeeper的服務節點上,API Gateway可以監聽這些節點,並從中解析服務的IP地址和連接埠,然後根據負載平衡策略,將用戶端的請求分發到後端的多個微服務執行個體中。

  1. 服務的提供者將微服務執行個體註冊到Zookeeper的服務節點;

  2. API Gateway根據節點的訪問路徑,監聽該節點及其子節點,並解析節點中儲存的微服務執行個體資訊,包括服務的IP地址和連接埠號碼Port。為了減少通訊消耗,IP和Port會緩衝在網關本地;

  3. 用戶端的請求到達API Gateway後,網關首先從緩衝中擷取一個可用的微服務執行個體地址,然後向指定的微服務Server發送HTTP請求並擷取後端響應,最後將響應結果返回給用戶端;

  4. 如果微服務應用的資訊發生變動,例如某個服務執行個體下線或者增加了新的服務執行個體,那麼Zookeeper會將更新後的執行個體資訊推送給網關,網關則會根據接收到的服務資訊即時更新緩衝,以確保網關側和Zookeeper側的服務資訊保持相同;

  5. 用戶端再次請求API Gateway,網關會根據最新的微服務地址資訊進行請求的路由和轉寄。

重要

API Gateway與Zookeeper、與微服務執行個體之間的互動僅支援內網通訊,因此在建立API時,Zookeeper的服務地址需配置為內網地址,否則網關將返回Zookeeper地址無效的異常資訊。同樣的,註冊在Zookeeper上的微服務應用的後端地址也必須為內網地址。在調用API時,若網關從Zookeeper擷取到的微服務後端地址為公網地址,那麼本次請求將無法處理成功,此時網關會返回錯誤碼I504IA,若網關未能從Zookeeper擷取到任何微服務後端地址,則返回錯誤碼I504BA

3. 建立VPC融合專享執行個體

由於API Gateway與Zookeeper、與註冊在Zookeeper上的微服務應用之間僅支援內網通訊,而傳統的專享執行個體又無法實現自訂內網通訊,因此我們提供了一種新型的VPC融合專享執行個體,以支援API Gateway通過內網打通使用者的VPC,融合執行個體的建立過程可參考VPC融合專享執行個體

4. 部署Zookeeper服務並註冊微服務應用

4.1 部署Zookeeper服務

Zookeeper服務需部署在步驟3中選擇的【VPC-可用性區域-交換器】下,可以選擇原生的Zookeeper服務,將其部署在所選交換器下的ECS中,這樣Zookeeper服務的訪問地址便可設定為"ECS的內網IP:Zookeeper服務的Port"。建立ECS時,網路類型選擇專用網路,VPC和交換器需和步驟3中的配置保持相同。

說明

原生Zookeeper的建立過程可參考部署Zookeeper,ECS的建立過程可參考建立ECS

也可以使用阿里雲的微服務引擎(MSE)來建立Zookeeper服務,建立Zookeeper時,網路類型選擇專用網路,VPC和交換器需和步驟3中的配置保持相同。建立完成後,可在MSE的執行個體列表頁查看Zookeeper的訪問地址。

說明

使用MSE建立Zookeeper的過程可參考建立ZooKeeper引擎

4.2 註冊微服務應用

微服務應用也需部署在步驟3中選擇的【VPC-可用性區域-交換器】下,這樣才能確保微服務能夠成功註冊到Zookeeper並能夠被API Gateway成功訪問。可以選擇將微服務應用部署在ECS中,該ECS需建立在步驟3中指定的交換器下。

註冊到Zookeeper的服務資訊需滿足如下格式:

{
    "address":"localhost",
    "enabled":true,
    "id":"cb1467f745c64d9f8cbfa5c2bd217cb8",
    "name":"provider",
    "payload":{

    },
    "port":8080,
    "registrationTimeUTC":1699525871398,
    "serviceType":"DYNAMIC",
    "sslPort":443,
    "uriSpec":{
        "parts":[
            {
                "value":"scheme",
                "variable":true
            },
            {
                "value":"://",
                "variable":false
            },
            {
                "value":"address",
                "variable":true
            },
            {
                "value":":",
                "variable":false
            },
            {
                "value":"port",
                "variable":true
            }
        ]
    }
}
說明

儲存在Zookeeper服務節點上的資料結構可參考開源專案Apache Curator提供的org.apache.curator.x.discovery.ServiceInstance類,其中uriSpec不可為空,推薦將其配置為“{scheme}://{address}:{port}”,若需使用HTTPS協議,請配置sslPort屬性。

重要

若資料格式不規範,那麼網關可能無法解析出微服務執行個體的後端地址。註冊到Zookeeper上的微服務應用必須支援HTTP調用

5. 建立分組

API分組是API的嵌入式管理單元,因此需要先建立API分組,然後在分組下建立API。

  1. 登入API Gateway控制台。

  2. 在左側導覽列選擇API管理-分組管理,單擊介面右上方的建立分組按鈕,在彈窗頁面填寫分組資訊,執行個體選擇步驟3中建立的VPC融合執行個體,分組名稱和BasePath可自訂。

說明

分組建立完成後,在分組管理中單擊分組名稱即可進入分組詳情頁,在詳情頁可以綁定網域名稱、修改基本資料、切換執行個體類型等操作。

API分組會自動建立公網次層網域,此次層網域僅供調試使用,如果直接存取此網域名稱,每天有1000次的限制(海外Region及中國香港限制100次/天),因此建議在使用時為分組綁定獨立網域名稱,文檔參考使用自訂網域名調用API

6. 建立後端服務

服務發現類型的API僅支援通過已有的後端服務進行建立,因此需要先建立後端服務,然後建立API。

  1. 登入API Gateway控制台。

  2. 在左側導覽列選擇API管理-後端服務。在介面的右上方單擊建立後端服務,在彈窗頁面填寫後端服務名稱,後端類型選擇服務發現。建立完成後,可以在後端服務列表中找到剛剛建立的後端服務,單擊服務名稱即可進入後端服務詳情介面。

本例中,我們選擇“線上”環境,只有在環境上建立了後端服務,建立的API才發行就緒到相應的環境。在介面的右側單擊建立,進入後端服務配置介面,

需要在後端服務配置介面填寫Zookeeper服務和微服務應用的相關資訊,包括:

  • ConnectString:Zookeeper服務的內網地址,必填參數,可參考步驟3填寫Zookeeper的實際部署地址。

  • 命名空間:微服務資訊所在節點的父節點名,必填參數。

  • 服務名:微服務應用的名稱,必填參數。

說明

命名空間和服務名共同構成了服務節點的訪問路徑,例如節點的路徑為“/provider/service”,那麼命名空間和服務名可分別設定為“provider”和“service”,服務的提供者可將微服務執行個體的資訊註冊到訪問路徑為"/provider/service"的節點以及該節點的子節點上。

7. 建立API

在API Gateway控制台左側導覽列選擇API管理- API列表,在介面的右上方單擊建立API

  1. API基本資料

本環節介紹如何配置API的基本資料,包括API分組、API名稱、安全認證方式、API類型和描述等。API分組選擇剛剛建立的分組,安全認證選擇阿里雲APP,AppCode認證選擇APPcode(header&Query),API名稱和描述資訊可以自行設定。

說明

安全認證方式可根據實際需求配置,如果不需要API Gateway做安全校正,可以選擇無認證。

  1. 定義API請求

本環節是定義client端(如瀏覽器、手機APP或其他的業務系統)如何請求API,需要確定的內容包括請求類型、協議、請求Path、HTTP Method、入參請求模式、和入參定義,可以根據實際情況設定用戶端請求的Path和Method等資訊。

  1. 定義API後端服務

本環節是定義API Gateway收到client端的請求後,進行何種參數映射、處理,以及串連哪個後端地址。本例中的後端配置選擇使用已有的後端服務,後端服務類型選擇服務發現,後端服務選擇之前建立的後端服務,後端請求的Path、Method以及逾時時間可以自行設定。

  1. 定義返回結果

本環節用於API協助文檔的自助產生,協助API使用者更好理解。可以設定返回結果樣本和失敗返回結果樣本。本例中不涉及到這部分,因此可以單擊儲存按鈕。

  1. 發布API

在上一環節儲存成功後,需要發布API。對API進行過任何的配置,都需要發布到對應的環境中才能夠生效。本例中在建立後端服務的時候,只線上上環境進行了後端服務配置,因此這裡只發行就緒到線上環境,如果需要發布到其他環境,需要在剛建立的後端服務的其他環境配置後端服務定義。單鍵發行,按照控制台頁面的提示,把此API發布到“線上“環境。

8. 建立應用並授予API的調用許可權

應用(APP)是調用API服務時的身份,在本例建立API的時候,認證方式選擇的是“阿里雲APP認證“,因此在API發布後,還需要建立APP,並將APP和API的對應關係建立好,才能夠正常訪問。具體操作步驟可參考授權管理

9. 調試API

API Gateway提供了線上調試的功能,因此一般建議在API Gateway上完成API配置之後,先通過此功能確認API是否配置成功,然後再通過client端進行調用。

在API列表頁,單擊前面步驟中新增的API,進入詳情頁,單擊調試API。如果定義了API的入參,在調試API頁面中也可以輸出不同的參數查看API的執行情況。

在調試API中,注意認證方式選擇已經授權的APP,並且Stage選擇此APP授權好的環境,如果選擇錯誤的Stage,可能會造成API調試失敗。