このトピックでは、ZooKeeper が API Gateway にどのように統合されているか、またバックエンドサービスタイプがサービス検出である API を作成、公開、および呼び出す方法について説明します。
概要
このトピックは、以下のセクションで構成されています。
しくみ
VPC 統合専用インスタンスを作成する (VPC 統合インスタンスのみが ZooKeeper をサポートします)
ZooKeeper サービスをデプロイし、マイクロサービス アプリケーションを登録する
API グループを作成する
バックエンドサービスを作成する
API を作成する
アプリケーションを作成し、API を呼び出す権限を付与する
API をデバッグする
しくみ
ZooKeeper は、ファイルシステムに似たツリー構造でデータを保存します。ツリー内の各ノードには、/provider/service など、一意のアクセス パスがあります。サービスプロバイダーは、マイクロサービス アプリケーションのインスタンス情報を Zookeeper のサービスノードに登録できます。API Gateway はこれらのノードをリッスンし、ノードからサービスの IP アドレスとポートを解析し、負荷分散ポリシーに基づいてクライアント リクエストをバックエンド マイクロサービス インスタンスに配信します。
サービスプロバイダーは、マイクロサービス インスタンスを ZooKeeper サービスノードに登録します。
API Gateway は、アクセス パスに基づいてノードとその子ノードをリッスンし、ノードに保存されているマイクロサービス インスタンス情報 (インスタンスの IP アドレスやポート番号など) を解析します。IP アドレスとポート番号は、通信オーバーヘッドを削減するために API Gateway にキャッシュされます。
クライアント リクエストを受信すると、API Gateway はキャッシュから IP アドレスとポート番号を取得し、リクエストを対応するマイクロサービス サーバーに転送します。次に、API Gateway はサーバーからレスポンスを受信し、レスポンスをクライアントに転送します。
マイクロサービス アプリケーションの情報が変更された場合 (たとえば、マイクロサービス インスタンスがオフラインになった場合や新しいインスタンスが追加された場合)、ZooKeeper は変更を API Gateway に同期します。API Gateway はキャッシュ内の情報を更新して、API Gateway と ZooKeeper の間の一貫性を確保します。
別のクライアント リクエストを受信すると、API Gateway は更新された情報に基づいてリクエストをルーティングおよび転送します。
API Gateway は、仮想プライベートクラウド (VPC) 経由で ZooKeeper および ZooKeeper に登録されているマイクロサービス アプリケーションと通信します。そのため、API を作成するときは、ZooKeeper のサービスアドレスとして内部アドレスを構成する必要があります。そうしないと、API Gateway は無効な ZooKeeper アドレス例外を返します。同じ理由で、内部 URL を Zookeeper のバックエンド マイクロサービス アプリケーションの URL として登録する必要があります。API リクエストを受信した後に API Gateway が ZooKeeper からパブリック URL を取得した場合、API Gateway はリクエストを処理できません。代わりに、API Gateway はエラーコード I504IA を返します。API Gateway が ZooKeeper からマイクロサービス URL を取得できなかった場合、API Gateway はエラーコード I504BA を返します。
ステップ 1: VPC 統合インスタンスを作成する
API Gateway は、内部ネットワーク経由で ZooKeeper および ZooKeeper に登録されているマイクロサービス アプリケーションと通信します。従来の専用インスタンスではカスタム内部ネットワークを定義できないため、API Gateway チームは新しいインスタンスタイプである VPC 統合インスタンスを開発し、API Gateway がユーザー VPC と直接通信できるようにしました。VPC 統合インスタンスの作成方法の詳細については、「VPC 統合インスタンス」をご参照ください。
ステップ 2: ZooKeeper サービスをデプロイし、ZooKeeper にマイクロサービス アプリケーションを登録する
1. ZooKeeper サービスをデプロイします。
ZooKeeper は、作成した VPC 統合インスタンスと同じ VPC、ゾーン、および vSwitch にデプロイする必要があります。 vSwitch 上の Elastic Compute Service (ECS) インスタンスにネイティブ ZooKeeper サービスをデプロイできます。このようにして、ZooKeeper のアクセスアドレスを ECS インスタンスの内部 IP アドレス: ZooKeeper のポート に設定できます。ECS インスタンスを作成するときは、ネットワークを VPC に設定し、VPC 統合インスタンスを作成したときに選択したものと同じ VPC、ゾーン、および vSwitch を選択します。
ZooKeeper のデプロイ方法の詳細については、「ZooKeeper はじめに」をご参照ください。ECS インスタンスの作成方法の詳細については、「購入手順」をご参照ください。
Alibaba Cloud Microservice Engine (MSE) を使用して ZooKeeper サービスをデプロイすることもできます。その場合は、ネットワークタイプを VPC に設定し、作成した VPC 統合インスタンスと同じ VPC と vSwitch を選択します。ZooKeeper サービスがデプロイされた後、MSE インスタンスリストでそのエンドポイントを表示できます。
MSE を使用した ZooKeeper サービスのデプロイ方法の詳細については、「インスタンスの作成」をご参照ください。
2. マイクロサービス アプリケーションを登録します。
マイクロサービス アプリケーションは、作成した VPC 統合インスタンスと同じ VPC、ゾーン、および vSwitch にデプロイする必要があります。 これにより、マイクロサービス アプリケーションが ZooKeeper サービスに登録され、API Gateway によってアクセスされることが保証されます。ECS インスタンスにマイクロサービス アプリケーションをデプロイすることを選択できます。ECS インスタンスは、作成した VPC 統合インスタンスと同じ vSwitch に作成する必要があります。
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 属性を構成します。
無効なデータ形式は、API Gateway がマイクロサービス インスタンスのバックエンドアドレスを解析できない原因となる可能性があります。 Zookeeper に登録されているマイクロサービス アプリケーションは、HTTP 呼び出しをサポートしている必要があります。
ステップ 3: API グループを作成する
API は API グループで管理されます。API を作成する前に、API グループを作成する必要があります。
API Gateway コンソールにログインします。
左側のナビゲーションウィンドウで、[API の管理] > [API グループ] を選択します。ページの右上隅にある [グループの作成] をクリックします。表示されるダイアログボックスで、作成した VPC 統合を選択し、グループ名とベースパス パラメーターを構成して、[確認] をクリックします。
グループが作成された後、グループリストでグループ名をクリックして、グループ詳細ページに移動します。詳細ページでは、ドメイン名をバインドしたり、基本情報を変更したり、インスタンスタイプを変更したりできます。
API Gateway は、すべての API グループにパブリック 第 2 レベルドメイン名を自動的に割り当てます。第 2 レベルドメイン名はデバッグにのみ使用されます。このドメイン名を使用して API 呼び出しを直接行う場合、中国本土のリージョンでは 1 日あたり最大 1,000 回、中国 (香港) リージョンおよび中国本土以外のその他のリージョンでは 1 日あたり 100 回の呼び出しを行うことができます。API グループに独立ドメイン名をバインドすることをお勧めします。詳細については、「カスタムドメイン名による API 呼び出し」をご参照ください。
ステップ 4: バックエンドサービスを作成する
バックエンドサービスタイプがサービス検出である API を作成するには、まずバックエンドサービスを作成する必要があります。
API Gateway コンソールにログインします。
左側のナビゲーションウィンドウで、[API の管理] > [バックエンドサービス] を選択します。ページの右上隅にある [バックエンドサービスの作成] をクリックします。表示されるダイアログボックスで、バックエンドサービスの名前を入力し、タイプを [サービス検出] に設定します。バックエンドサービスが作成された後、バックエンドサービスリストで作成されたバックエンドサービスを見つけて、サービス名をクリックしてバックエンドサービス詳細ページに移動できます。
この例では、本番環境が選択されています。API を環境に公開するには、その前に環境にバックエンドサービスを作成する必要があります。ページの右側にある [作成] をクリックして、[バックエンドサービスの定義] ページに移動します。
[バックエンドサービスの定義] ページで、ZooKeeper サービスとマイクロサービス アプリケーションに関する次の情報を入力する必要があります。
サービス URL: ZooKeeper の内部エンドポイント。このパラメーターは必須です。
名前空間: マイクロサービス アプリケーション情報を保存する親ノードの名前。このパラメーターは必須です。
サービス名: マイクロサービス アプリケーションの名前。このパラメーターは必須です。
名前空間とサービス名を組み合わせて、サービスノードのアクセス パスを構成します。たとえば、ノードのパスが "/provider/service" の場合、名前空間とサービス名をそれぞれ "provider" と "service" に設定できます。サービスプロバイダーは、アクセス パスが /provider/service であるノードとその子ノードにマイクロサービス インスタンスの情報を登録できます。
ステップ 5: API を作成する
API Gateway コンソールの左側のナビゲーションウィンドウで、[API の管理]-[API] を選択します。ページの右上隅にある [API の作成] をクリックします。
API の基本情報を構成します。
このステップでは、作成する API の基本情報を構成します。これには、API が属する API グループ、API の名前、認証方式、タイプ、および説明が含まれます。作成した API グループを選択し、セキュリティ認証に Alibaba Cloud アプリを選択し、AppCode 認証に AppCode 認証の有効化 (ヘッダーとクエリ) を選択します。カスタム API 名と説明を指定できます。
セキュリティ認証と AppCode 認証のパラメーターは、要件に基づいて構成できます。このトピックでは例のみを提供します。
API リクエストを定義します。
このステップでは、ブラウザ、モバイル アプリ、業務システムなどのクライアントが API をリクエストする方法を定義します。パラメーターには、リクエストタイプ、プロトコル、リクエストパス、HTTP メソッド、入力パラメーター リクエストモード、および入力パラメーター定義が含まれます。ビジネス要件に基づいてリクエストパスと HTTP メソッドを指定できます。
バックエンドサービスを定義します。
このステップでは、API Gateway がリクエストを受信した後にリクエストパラメーターをマッピングおよび処理する方法を定義します。API Gateway が接続するバックエンドアドレスを指定することもできます。この例では、構成モード パラメーターに [既存のバックエンドサービスを使用する] が選択され、バックエンドサービスタイプ パラメーターに [サービス検出] が選択されています。ビジネス要件に基づいて他のパラメーターを設定できます。
API のレスポンスを定義します。
このステップでは、レスポンス情報を構成して API ドキュメントを生成します。ドキュメントは、API 呼び出し元が API をよりよく理解するのに役立ちます。サンプルの成功レスポンスとサンプルの失敗レスポンスを指定することもできます。この例では、このステップはスキップされます。[作成] をクリックします。
API を公開します。
上記の構成が保存された後、API を公開する必要があります。API に対して行ったすべての構成は、API を環境に公開した後にのみ有効になります。この例では、バックエンドサービスは本番環境で構成されています。したがって、API は本番環境に公開されます。API を別の環境に公開する場合は、まず宛先環境でバックエンドサービスを構成する必要があります。この例では、API が正常に作成されたことを示すメッセージで [公開] をクリックします。[API の公開] ダイアログボックスで、ステージ パラメーターをリリースに設定し、備考を入力して、[公開] をクリックします。
ステップ 6: アプリケーションを作成し、API を呼び出す権限を付与する
アプリケーションは、API 呼び出し元が API を呼び出すために想定する ID です。この例では、API の作成時にセキュリティ認証パラメーターに Alibaba Cloud アプリが選択されました。したがって、API が公開された後、アプリケーションを作成し、作成した API を呼び出す権限をアプリケーションに付与する必要があります。詳細については、「権限の管理」をご参照ください。
ステップ 7: API をデバッグする
API Gateway はオンライン デバッグをサポートしています。クライアントに呼び出し用の API を提供する前に、この機能を使用して API が正しく構成されているかどうかを確認することをお勧めします。
[API] ページで、作成した API をクリックします。API 詳細ページの左側のナビゲーションウィンドウで、[API のデバッグ] をクリックします。API のリクエストパラメーターを定義した場合は、リクエストパラメーターに異なる値を入力して、API が期待どおりに動作するかどうかを確認できます。
API をデバッグするときは、承認されたアプリケーションが使用されており、デバッグ環境がアプリケーションが API を呼び出す権限を持っている環境であることを確認してください。そうしないと、デバッグが失敗する可能性があります。