知っていました ? Server Load Balancer 実はスケールするんです

こんにちは。
ソリューションアーキテクト松田(@MatYoshr)です。

本日はAlibaba Cloud のロードバランサーサービスであるServer Load Balancer(SLB)に関する、ある誤解を解いていきたいと思います。

Alibaba Cloudのロードバランサーはインスタンスタイプのスペックを指定して購入するのでスペックが固定だと思っていませんか?

実は・・・タイトルにもある様にSLBは自動スケーリングが出来るのです❗️ ・・・お恥ずかしながら私も最初勘違いしていました😖

今回の記事ではSLBの料金計算を中心に順を追ってSLBの仕様を説明していきたいと思います。

⚠️本記事に記載の価格や仕様は執筆時点の情報となりますことご了承ください。

SLBの作成時に選択する項目について

SLBの作成時に選択する大きな項目としては以下を選択することになります。

・リージョン
・ゾーン(AZ)
・インスタンスタイプ(ネットワークタイプ)
・パフォーマンスタイプとスペック

Alibaba CloudのSLBは以下の2つの選択により仕様がそれぞれ大きく変わってきます。
・「インターネット」「イントラネット」を選択するインスタンスタイプ
・「パフォーマンス共有型」「パフォーマンス専有型」を選択するパフォーマンスタイプ

ここで「パフォーマンスタイプ」なんてあったっけ? と思われる方もいらっしゃると思います。
実際の画面では下図の赤枠の部分で一緒に表示されており判りにくいのですが、実はここで選択する項目によってパフォーマンスタイプが変わります。

f:id:sbc_y_matsuda:20190419125727p:plain:w800
SLBパフォーマンスタイプの選択

なおインスタンスタイプ(ネットワークタイプ)は下図の赤枠部分で選択します。

f:id:sbc_y_matsuda:20190419132400p:plain:w800
インスタンスタイプの選択

インスタンスタイプとパフォーマンスタイプ

インスタンスタイプとパフォーマンスタイプの選択方法は先に説明した通りです。
それぞれを選択した場合の関係を表にすると以下のようになります。
見て頂くと分かると思いますが「パフォーマンス共有型」以外を選択した場合は全て「パフォーマンス専有型」になりインスタンスのスペック(保証する性能)が定義される形になります。
ℹ️それぞれのスペック選択時の性能は後述いたします。

f:id:sbc_y_matsuda:20190419131718p:plain:w800
インスタンスタイプとパフォーマンスタイプ

パフォーマンスタイプの違いとは?

結局パフォーマンスタイプの違いって何なのか?という部分に関しては、以下のドキュメントにも記載のあるように「パフォーマンス共有型」はリソースを共有しているベストエフォートのサービスです。
それに対して「パフォーマンス専有型」は選択したスペックの性能を保証する性能保証型のサービスです。

パフォーマンス専有型インスタンスは、保証されたパフォーマンスメトリックを提供します。
対照的に、共有パフォーマンス型インスタンスはパフォーマンス保証を提供しません。
Server Load Balancer リソースは、パフォーマンス共有型・インスタンス間で共有されます。

パフォーマンス専有型インスタンスとは何ですか? より引用

SLB最大の誤解ポイント

さて、ここまで説明してきた様にパフォーマンス専有型は「スペック」を指定して「性能保証」をするサービスです。
こうやって聞くとSLBはスペックと金額が固定のサービスであると思ってしまいますよね?

さらにSLBの作成画面ではスペックを上げると下図の様に時間当たりの単価が表示されるので尚更です。
私も普通に最初固定だと思いました。

f:id:sbc_y_matsuda:20190419140450p:plain:w800
スペック選択時の画面表示

違うんです

スペックも金額も

スケールするんです

以下のドキュメントにこの様に記載されています。

指定料金は、実際の使用量に基づいて請求されます。
つまり、指定したスペックにかかわらず、実際に使用されたスペック(パフォーマンス)に従ってスペック料金が請求されます。
スーパー I(slb.s3.large)スペック(Max Connection 1,000,000、CPS 500,000、QPS 50,000)を選択し、最初の 1 時間のインスタンスの実際の使用量は次のとおりです。
最大接続 90,000、CPS 9,000、QPS 8,000。

この時間のインスタンスのサービスインデックスは、Super I(slb.s3.large) スペックの上限に達していません、slb.s3.small と slb.s3.medium の間にあります。
したがって、スペック料金は slb.s3.medium(整数に切り上げる原則)に従って請求されます。

 

f:id:sbc_y_matsuda:20190419145733p:plain:w950
参照:http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/57737/intl_en/1519789902151/%E5%9B%BE%E7%89%871.png

パフォーマンス専有型インスタンスは自動スケーリング(課金)が可能です。
購入時にお客様が選択したスペックはスケーリングの上限です。
たとえば、slb.s3.medium を選択すると、インスタンスが最大でslb.s3.medium のスペックに到達できることを意味します。

パフォーマンス専有型インスタンスはどのように請求されますか? より引用  
 

・・・マジか!?😳

 

と言うのが正直な気持ちです。入社してから最大の驚きでした🤣

つまり下図の「スペック」で指定しているのはSLBの性能上限の指定で、「費用」は時間当たりの最大単価と言うことです。

f:id:sbc_y_matsuda:20190419140450p:plain:w800
スペック選択時の画面表示

・・・orz

¥0.900 ~ ¥71.100 って表示してよ!

と思ったのは私だけでは無いはず

SLBのスペック

さて、実はスケールすることが判ったSLBちゃんですが、SLBの保証する性能とは何を指しているのか見てみましょう。

パフォーマンス専有型の主要なメトリックは以下の3つです。

最大接続数 : Max Connection

 SLB インスタンスへの最大接続数。
 最大接続数がスペックの限界に達すると、新しい接続はドロップされます。

接続数/秒 : Connection Per Second(CPS)

 1秒あたりに新しい接続が確立される件数。
 CPS がスペックの限界に達すると、新しい接続が切断されます。

クエリ/秒 : Query Per Second(QPS)

 1秒間に処理できるHTTP / HTTPS要求の数。これはレイヤー 7 リスナーに固有のものです。
 QPS がスペックの限界に達すると、新しい接続が切断されます。

SLBでは上記3つの項目に対して、それぞれのスペックで上限値と価格のテーブルが定義されていますのでそちらを見てみましょう。

スペック3、スペック4あたりでもなかなかの規模のサイトに対応できるのでは無いでしょうか?

f:id:sbc_y_matsuda:20190419153035p:plain:w800
SLBスペック料金表

スペック7、スペック8に関しては通常ご利用になれません。
サポートチームまでお問い合わせください。

SLBのスペック判定

スケールする際にどのスペックの料金が適用されるかは時間毎の実際の使用量(実際のピーク値)に基づいて決定されます。
なお、それぞれのスペックの値は上限値なので値を超えた場合は、次のスペックの料金が適用されることになります。

わかりやすく先程の料金表に各段階での範囲を記入してみました。

f:id:sbc_y_matsuda:20190421233114p:plain:w800
SLBスペック料金表 - 範囲付き

また、スペックの判定は3つのメトリクスそれぞれに対して判定されその中の一番高いものが適用されます。

例えば以下の様な使用量だった場合

最大接続数 : 90,000
CPS : 4,000
QPS : 11,000

最大接続数は、スペック2の上限50,000とスペック3の上限100,000の間にあります。
スペック3 の適用範囲 50,001 ≦ 90,000 ≦ 100,000 に該当します。
したがって、この1時間の最大接続数はスペック3です。

CPSは、スペック1の上限3,000とスペック2の上限5,000の間にあります。
スペック2 の適用範囲 3,001 ≦ 4,000 ≦ 5,000 に該当します。
したがって、この1時間のCPSはスペック2です。

QPSは、スペック3の上限10,000とスペック4の上限20,000の間にあります。 スペック4 の適用範囲 10,001 ≦ 11,000 ≦ 20,000 に該当します。
したがって、この1時間のQPSはスペック4です。

これら3つのメトリクスを比較すると、QPSのスペックが最も高いため、この時間内の料金はスペック4の価格で請求されます

この判定が毎時間行われて実際のスペック料金が決まります。

最大接続数 : スペック3
CPS : スペック2
QPS : スペック4 ⬅️ 一番高いこの費用が採用

f:id:sbc_y_matsuda:20190421234444p:plain:w800
スペック料金判定例

なお、スペック料金は累積ではありません。
スペック4と判定された時の料金は「¥27.6/時間」になります。

¥6.9 + ¥13.8 + ¥27.6 = ¥48.3/時間 にはなりませんのでご安心ください。

SLBの料金計算の考え方

スペック毎の料金判定は前述の通りです。
では、実際にSLBの料金として請求される金額はどうなっているかと言うと、以下の表の様になっています。

下記のインスタンス基本料金とトラフィック料金は東京リージョンの費用を表示しています。
実際の料金や各リージョンの費用はこちらをご確認ください。
なお、各リージョンの「slb.s1.small」の料金がインスタンス基本料金に相当しますのでお手数ですが読み替えて頂ければ幸いです。

f:id:sbc_y_matsuda:20190419165458p:plain:w800
SLB料金計算表

f:id:sbc_y_matsuda:20190421233114p:plain:w800
SLBスペック料金表 - 範囲付き

トラフィック価格に関しては以下の案内をご確認ください。

jp.alibabacloud.com

さて、お気づきでしょうか?
インターネット向けのSLBですが「パフォーマンス専有型」を買った場合以下の計算になります。

SLBの料金 = インスタンス基本料 + トラフィック料金 + スペック料金

 
例えばスペック6(Super I )を買ったとしてもアクセスが極小の状態ならスペック1(Small I)が適用されるため以下の様な金額が請求されます。

¥0.9 = ¥0.9 + ¥0 +  ¥0

 
つまり東京リージョンのSLBの最低利用価格は「¥0.9/時間」利用状況に応じてスケールしているのです。
仮に東京リージョンにて最低価格で1ヶ月運用した場合は月700円程度でご利用頂けることになります。
SLBの優秀さが判るのではないでしょうか?

また、イントラネットタイプは基本料金とトラフィック料金が無料でスペック料金のみ掛かる仕様になっていますので、VPC内でのロードバランスに上手くお使い頂ければと思います。

専用線でつなげて使うプライベートなシステムだとタダでロードバランサーが使える構成も組めちゃうかもしれませんよ!?

実際に一番大きいSLBを買ってみると・・・?

イロイロと書いてきましたが、本当にそんな計算なの?って気になりますよね?

なので・・・試してみました! こちらが購入したスペック6(Super I )のSLBです。
IDを覚えておいてください。

f:id:sbc_y_matsuda:20190419180740p:plain:w800
作成したSLB

作成したSLBを稼働させたまま適当に時間を置いておいて料金詳細を確認します。
何故かSLBの請求が2つに分かれていますが・・・
まぁ、ご愛嬌ということで・・・😅

f:id:sbc_y_matsuda:20190419181134p:plain:w800
料金詳細

こちらはインスタンス基本料金とトラフィック料金の方の料金詳細ページでした。
想定どおり東京リージョンの最低価格「¥0.9/時間」で課金が続いています。
トラフィックはほぼアクセスがないので¥0ですね。

f:id:sbc_y_matsuda:20190419180820p:plain:w800
インスタンス料金とトラフィック料金

こちらが目的のスペック料金の料金詳細です。
さぁ、どうでしょうか・・・

f:id:sbc_y_matsuda:20190419180853p:plain:w800
スペック料金

こちらも想定どおりスペックが「slb.s1.small」なので「¥0/時間」で計算されました!

🎉

おわりに

今回の検証で、実際にSLBの作成時に指定する「スペック」は上限値の指定であり実際にはスケール可能なサービスであることがおわかり頂けたのではないでしょうか🤗

SLBの使い方としてはデフォルトで提供する性能の上限までスケールしたいのであれば一番高いスペックを選ぶが正解ですね。

何処までもスケールすることは出来ないですが(それは何処のクラウドも同じかな?)性能上限がちゃんと判り、予算に合わせた上限を定義できることはユーザーに優しい仕様なのではないかなと思います。

是非、SLBを正確に理解して上手くご利用頂ければと思います。