こんにちは、GMOインターネットグループ株式会社の長谷川です。今回は ConoHa のインフラ特に公開APIに関してお話して行こうと思います。
ConoHa の API とは
ConoHa VPS は、OpenStack を採用しています。OpenStack 準拠の API を公開しており、コントロールパネルで提供されている機能のほか、VPS の構築やネットワークの設定などのシステム構築に直接関わる部分から、ユーザー情報や請求情報といったアカウント管理などが操作でき、効率良くサーバー管理・運用をすることができます。https://www.conoha.jp/vps/function/api/
どうやって API インフラを実装していくのか
まず前提として以下の理由から素の OpenStack API をそのまま提供するということはありません。
課金データが OpenStack API 単体では管理できないからセキュリティーの問題冗長性やパフォーマンスの問題
上記の理由から LVS, HAProxy, API ラッパーを使い冗長構成やセキュリティーの課題に対して対応していきます。
LVS, keepalived, HAProxy とは何ぞや?
LVSLinux virtual server のことで Linux の負荷分散ソリューションの一つ。LVSは IPVS (IP virtual server) と ipvsadm ユーティリティから構成されており layer4 の負荷分散を提供する。
keepalivedLVS と一緒に使われ VRRP などの protocol を利用し、LVS サーバを監視して冗長化を行う。
HAProxy高可用性、負荷分散を提供するプロキシ兼ロードバランサーである。layer7 の負荷分散を可能にしている。
インフラ構成
上記は API を公開する際の基本的な構成の一部になります。LVS & keepalived により、HAProxy に VIP(Virtual IP)を付与します、これにより片系の HAProxy が落ちたとしても VIP 経由のアクセスは切り替わり継続してサービスの提供を行うことが出来ます。
また、LVSとkeepalived 自体も2台でHAの構成を取ることにより冗長性を高めています。
アクセス時の流れ(リクエスト時)
1.APIのエンドポイントにクライアントからアクセスします。
2. クライアントからアクセスを受けるとエンドポイントの FQDNはVIPに名前解決され、リクエストは VIPに流れます。VIPは負荷分散も兼ねているので、VIPに来たリクエストは2台あるうちのどちらかの HAProxy に流れます。
3.HAProxyは設定ファイルに記述されたACLを読み込んでアクセスの許可、どのバックエンドにリクエストを送るのか、それぞれのバックエンドに合わせたパスの書き換え等を行います。
4. HAProxyでは複数のバックエンドを後ろに置くことが出来ます。よって、エンドポイントごとやメソッドごとにリクエストを転送する先のバックエンドを切り替える事が出来ます。(エンドポイントとメソッドによってAPIラッパーに転送したり選ぶことが出来ます。)
アクセス時の流れ(レスポンス時)
上記の図のように レスポンスをクライアントに返すときは、バックエンド → HAProxy の経路をたどりその後 Direct Server Return (DSRと呼ばれます)で HAProxy から直接クライアントにレスポンスを返します。
レスポンスを DSR で返す理由は、レスポンスに使われる経路が減ることにより負荷の軽減や処理速度の向上につながるからです。
全体的な構成
実際に運用する際の構成では internal(スタッフアクセス用 API ), external (お客様アクセス用 API )で上記のセットが 2つ必要になります。また、兼用されるものもあるため internal, external を合わせた構成は以下のようになります。
LVSとHAProxyの構成図(internal&external)
上記の図に関しては、最低限の 1セットの構成を図で示したものとなります。システムの要件により、この構成のセットが増えていきます。アクセス数が多い API のエンドポイントやファイルアップロード等の負荷のかかるエンドポイントでは上記のシステム構成を別で持ち、通常系の API と分ける事により負荷の影響が他のエンドポイントに及ばないような設計になっています。
まとめ
ConoHa API のシステムに関して、簡潔に解説しましたがどうでしたでしょうか?API エンドポイントの負荷対策やセキュリティーは重要なものとなり、今回解説した部分は一部でしかありませんが、解説した仕組みを用いてお客様が使いやすいよう API を提供しています。是非 ConoHa で API を利用して VPS の操作を自動化してみてはいかがでしょうか?