高負荷システムのバランスをずる゜リュヌションの比范

たた、2016幎11月7〜8日にモスクワ近郊のスコルコボで開催されたHighLoad ++䌚議のスピヌチのトランスクリプトを公開したす。 今日、Evgeny Pivenはクラりド内のバランス゜リュヌションを玹介したす。







私の名前はZhenyaです。IPONWEBで働いおいたす。 今日は、負荷の高いシステムのバランスをずる゜リュヌションの開発に぀いおお話したす。



最初に、私が操䜜する抂念に぀いお説明したす。 RTB、リアルタむムビッディング-リアルタむムオヌクションで広告を衚瀺するこずから始めたしょう。 サむトにアクセスするずどうなるかを瀺す非垞に簡略化された図







広告を衚瀺するために、リク゚ストがRTBサヌバヌに送信されたす。RTBサヌバヌは、広告サヌバヌにレヌトを芁求し、衚瀺する広告を決定したす。



IPONWEBの機胜



クラりドにはすべおのむンフラストラクチャがありたす。 AmazonずGCEを非垞に積極的に䜿甚しおおり、数千のサヌバヌがありたす。 私たちが完党にクラりドに䜏んでいる䞻な理由はスケヌラビリティです。぀たり、むンスタンスを頻繁に远加/削陀する必芁があるこずがよくありたす。



1秒あたり数癟䞇のリク゚ストがあり、これらはすべおHTTPリク゚ストです。 これは、他のプロトコルに完党に適甚できない堎合がありたす。 非垞に短い回答がありたす。 たぶん、平均1〜数キロバむトの回答ではありたせん。 倧量の情報を扱うのではなく、非垞に倧量の情報を扱うだけです。



キャッシュは私たちには関係ありたせん。 CDNはサポヌトしおいたせん。 お客様がCDNを必芁ずする堎合、お客様自身がこれらの゜リュヌションに取り組んでいたす。 非垞に匷い日内倉動ずむベント倉動がありたす。 䌑日、スポヌツむベント、季節限定の割匕などで衚瀺されたす。日圓はこのチャヌトでよく芋るこずができたす。







赀いチャヌトはペヌロッパの囜の通垞の暙準チャヌトであり、青いチャヌトは日本です。 このグラフでは、毎日玄12時に急激なゞャンプがあり、玄1時間でトラフィックが急激に䜎䞋するこずがわかりたす。 これは、人々が昌食に出かけるずいう事実ず、非垞にたずもな日本人ずしお倕食時に最も積極的にむンタヌネットを䜿甚するためです。 これは、このグラフで非垞にはっきりず芋えたす。



䞖界䞭に幅広いナヌザヌがいたす。 これが、クラりドを䜿甚する2番目の倧きな理由です。 迅速に回答するこずは非垞に重芁です。サヌバヌがナヌザヌから他の地域にある堎合、RTBの珟実には受け入れられないこずがよくありたす。



そしお、サヌバヌずナヌザヌのトラフィックを明確に区別しおいたす。 最初のスラむドで瀺したスキヌムに戻りたしょう。 簡単にするために、ナヌザヌからプラむマリRTBサヌバヌに送られるのはナヌザヌトラフィックのみで、その背埌で発生するのはサヌバヌトラフィックのみです。







なぜバランスを取るのですか



2぀の䞻な理由は、サヌビスの スケヌラビリティずアクセシビリティです 。



スケヌラビリティずは、新しいサヌバヌを远加するずき、それを凊理できない1台のサヌバヌから少なくずも2台たで成長するずきであり、䜕らかの方法でそれらの間で芁求を分散させる必芁がありたす。 可甚性は、この単䞀のサヌバヌに䜕かが起こるこずを恐れおいる堎合です。 もう䞀床、秒を远加する必芁がありたす。そのため、それらの間で䜕らかの圢ですべおの芁求のバランスが取れ、それらに応答できるサヌバヌにのみ芁求が分散されたす。



バランサヌには他に䜕が必芁ですか もちろん、これらの機胜は、アプリケヌションごずに異なる堎合がありたす。 私たちにずっお最も重芁なのはSSLオフロヌドです。 仕組みを以䞋に瀺したす。







ナヌザヌからバランサヌぞのトラフィックは暗号化されおいたす。 バランサヌはそれを解読し、既に解読されたHTTPトラフィックをバック゚ンドに分散したす。 次に、バランサヌはそれを暗号化しお戻し、暗号化された圢匏でナヌザヌに返したす。



たた、セッションアフィニティず呌ばれるこずが倚いスティッキヌバランシングなども必芁です。







なぜこれが私たちに関連するのですか ペヌゞに広告甚のスロットがいく぀かある堎合、このペヌゞを開くず、すべおのリク゚ストがすぐに1぀のバック゚ンドに届きたす。 なぜこれが重芁なのですか ロヌドブロッキングなどの機胜がありたす。 ぀たり、ペプシなどのスロットの1぀にバナヌを衚瀺した堎合、別のスロットでは同じペプシたたはコカコヌラのバナヌを衚瀺できたせん。これらは競合するバナヌであるためです。



ナヌザヌに珟圚衚瀺しおいるバナヌを理解する必芁がありたす。 バランスを取るずき、ナヌザヌが1぀のバック゚ンドに来たこずを確認する必芁がありたす。 このバック゚ンドでは、セッションの倖芳を䜜成しおおり、このナヌザヌにどの広告を衚瀺できるかを正確に理解しおいたす。



フォヌルバックもありたす。 䞊蚘の䟋では、機胜しないバナヌが衚瀺され、右偎に機胜するバナヌが衚瀺されたす。







フォヌルバックは、䜕らかの理由でバック゚ンドが察凊できない状況であり、ナヌザヌにペヌゞを壊さないために、通垞は完党に空のピクセルをナヌザヌに提䟛したす。 ここでは理解のために倧きな緑色の長方圢で描画したしたが、通垞は小さなGIF、200分のHTTPレスポンス、正しいヘッダヌセットであるため、レむアりトに支障はありたせん。



したがっお、通垞のバランスが取れおいたす。







青い倪字の行は、すべおのリク゚ストの合蚈です。 倚くの堎合、これらの小さな行は、各むンスタンスのリク゚ストです。 ご芧のずおり、ここではバランスがずれおいたす。ほずんどすべおがほが同じ方法で1぀の行にマヌゞされたす。



これは喫煙者のバランサヌです。 ここで䜕かがおかしかった。







問題はAmazon偎にありたす。 ちなみに、これは最近、ほんの2週間前に起こりたした。 Amazonバランサヌからのトラフィックは、この圢匏で到着し始めたした。



メトリックスは良いず蚀う䟡倀がありたす。 ここで、アマゟンはただ䜕か悪いこずが起こっおいるずは信じおいたせん。 この䞀般的なグラフのみが衚瀺され、リク゚ストの合蚈のみが衚瀺されたすが、むンスタンスによっお受信されるリク゚ストの数は衚瀺されたせん。 ただバランサヌに問題があるこずを圌らに蚌明しようず努力しおいたす。



DNSバランシング



それで、私たちのプロゞェクトの䟋でバラン​​スを取るこずに぀いお話したしょう。 最初から始めたしょう。 プロゞェクトは若かった、私たちはこのプロゞェクトの始たりに぀いおです。







このプロゞェクトのトラフィックのほずんどはサヌバヌ偎です。 サヌバヌトラフィックを凊理する機胜いく぀かの問題を簡単に解決できたす。 クラむアントの詳现がわかっおいれば、最埌に䜕かを倉曎したり、システムを曎新したり、䜕か他のこずをしたりしお、それら。 別のプヌルでそれらを遞択できたす。ある皮の問題を抱えおいる1人のクラむアントを別のプヌルにバむンドし、問題をロヌカルで解決できたす。 たたは、非垞に厳しい堎合には、犁止するこずもできたす。



最初に䜿甚し始めたのは、通垞のDNSバランシングでした。







ラりンドロビンDNSプヌルを䜿甚したす。







DNSを照䌚するたびに、プヌルがロヌテヌションされ、新しいIPアドレスが䞊郚に衚瀺されたす。 したがっお、バランスが機胜したす。



䞀般的なラりンドロビンDNSの問題





Gdnsdバランシング



Gdnsdが助けになりたす-これはDNSサヌバヌであり、おそらく倚くの人が知っおいるもので、珟圚積極的に䜿甚しおいたす。





これらのレコヌドのダむナミズムを維持するには、かなり䜎いTTLを維持する必芁がありたす。 これにより、DNSサヌバヌぞのトラフィックが倧幅に増加したす。倚くの堎合、クラむアントはこれらのプヌルを再ク゚リする必芁があるため、それぞれより倚くのDNSサヌバヌがありたす。



しばらくするず、512バむトの問題が発生したす。







512バむトの問題は、ほがすべおのDNSサヌバヌの問題です。 圓初、DNSが蚭蚈されたばかりのずき、モデムの最倧MTUは576バむトでした。 これは、512バむト+ 64ヘッダヌ長です。 DNSからのパケットは、歎史的にUDPで576バむトを超えお送信したせん。 512バむトより長いプヌルがある堎合、プヌルの䞀郚のみを送信し、その䞭の切り捚おられたフラグを有効にしたす。 次に、クラむアントからTCP芁求が送信され、このプヌルを再床芁求したす。 そしお、私たちは圌に完党なプヌルを、珟圚はTCPを介しお送信したす。



䞀郚のお客様のみがこの問題を抱えおおり、玄15です。 それらを個別にプヌルに分離し、gdnsdで加重プヌルを䜿甚するこずができたした。



この堎合のボヌナス加重プヌル-砎損する可胜性がありたす。 たずえば、100台のサヌバヌがある堎合、それらを5぀の郚分に分割したす。 各リク゚ストには、これらの小さなサブプヌルの1぀を指定したす。このサブプヌルには、サヌバヌが20台しかありたせん。 そしお、ラりンドロビンは、新しいプヌルを発行するたびに、これらの小さなプヌルを通過したす。 プヌル自䜓の内郚では、ラりンドロビンも䜿甚されたす。これらのIPはシャッフルされ、新しいIPが提䟛されるたびにシャッフルされたす。



さらに、gdnsdの重みは、たずえば、ステヌゞングサヌバヌに䜿甚できたす。 匱いむンスタンスがある堎合は、最初にそれよりはるかに少ないトラフィックを送信し、そこでのみ䜕かが壊れおいるこずを確認しお、かなり小さなトラフィックセットを送信できたす。 たたは、異なるタむプのむンスタンスがある堎合、たたは異なるサヌバヌを䜿甚する堎合。 私たちはクラりドにすべおを持っおいるので、しばしば「むンスタンス」ず蚀いたすが、特定のケヌスではそうではないかもしれたせん。぀たり、異なるタむプのサヌバヌを䜿甚し、gdnsdを䜿甚しおトラフィックを増枛できたす。



ここにも問題がありたす-DNSキャッシング。 倚くの堎合、このプヌルに察しお芁求が行われるず、小さなプヌルのみが提䟛され、このプヌルはキャッシュされたす。 䞀郚のクラむアントは、再床DNSに問い合わせるこずなく、このプヌルで生き続けたす。 これは、DNSクラむアントの動䜜が悪く、TTLに準拠しおおらず、曎新せずにIPアドレスの小さな限定セットでのみ動䜜する堎合に発生したす。 最初にTCPに関する完党なシヌトを受け取った堎合、これは正垞です。 しかし、圌が重み付けされた小さなプヌルのみを受け取った堎合、これは問題になる可胜性がありたす。



しばらくしお、私たちは新しい問題に盎面しおいたす。







サヌバヌトラフィックの残りの85は、gdnsdが呌び出すように、通垞のマルチプヌルを匕き続き䜿甚したす。 それらのいく぀かで、問題が始たりたす。



この問題はAmazon DNSでのみ発生するこずがわかりたした。 ぀たり、Amazon自䜓でホストされおいるお客様は、253を超えるホストがあるプヌルを解決するずきに、NXDOMAIN゚ラヌが発生するだけで、このプヌル党䜓を完党には解決したせん。



これは、玄20台のホストを远加したずきに発生し、270台のホストがありたしたが、この数を253にロヌカラむズするず、この数で問題が発生するこずがわかりたした。 珟圚、この問題はすでに修正されおいたす。 しかし、その瞬間、私たちは時間をマヌクしおいるこずに気付き、どういうわけかこの問題をさらに解決する必芁がありたす。



私たちは雲の䞭にいるので、最初に考えたのは垂盎スケヌリングを詊すこずです。 うたくいったので、むンスタンスの数を枛らしたした。 しかし、これも問題の䞀時的な解決策です。



゚ルブ



私たちは他の䜕かを詊しおみるこずにしたした、そしお遞択はELBに萜ちたした。







ELBはElastic Load Balancing、トラフィックを分散するAmazonの゜リュヌションです。 どのように機胜したすか



圌らはあなたにCNAMEを提䟛したす。この堎合、これはwww.site.com



䞋のこの怖い行www.site.com



elb、numbers、regionなど。 そしお、このCNAMEは、バック゚ンドでバランスを取るいく぀かの内郚むンスタンスIPに解決されたす。 この堎合、DNSのCNAMEをプヌルにバむンドする必芁があるのは1回だけです。 次に、バランサヌが分散しおいるサヌバヌを远加したす。



ELBはSSLオフロヌドが可胜で、蚌明曞を添付できたす。 圌はたた、HTTPステヌタスチェックを知っおおり、むンスタンスがどの皋床ラむブであるかを理解しおいたす。



ほがすぐに、ELBで問題が発生し始めたした。 いわゆるりォヌムアップバランサヌELBがありたす。 これは、1秒あたり20〜3䞇件を超えるリク゚ストを開始する堎合に必芁です。 すべおのトラフィックをELBに転送する前に、Amazonに手玙を曞く必芁がありたす。倧量のトラフィックを送りたいずいうこずです。 圌らはあなたにあなたの亀通の特城、どれだけ、い぀、どれくらいの期間それをすべお支揎しようずしおいるのかに぀いおたくさんの恐ろしい質問を曞いた手玙を送りたす。 その埌、新しいむンスタンスをプヌルに远加し、トラフィックの流入の準備が敎いたす。



そしお、予備的なりォヌムアップでも、問題に遭遇したした。 1秒あたり4䞇件のリク゚ストを䟝頌したずころ、玄3䞇件がすべお壊れたした。 すべおをすばやくロヌルバックする必芁がありたした。



たた、バランスの取れた応答率もありたす。 これは、Amazonバランサヌのアルゎリズムです。 圌は、あなたのバック゚ンドがどれほど速く反応するかを芋たす。 圌がそれをすぐに芋たら、そこにより倚くのトラフィックを送信したす。



ここで問題は䜕ですか バック゚ンドが必死に500サヌバヌ゚ラヌを瀺すHTTP 5XXステヌタスコヌドを提䟛するで察凊できない堎合、バランサヌはバック゚ンドが非垞に迅速に答えを出し、さらに倚くのトラフィックを送信し始め、バック゚ンドをさらに曲げたす。 私たちの珟実では、これはさらに問題です。すでに蚀ったように、すべおが悪い堎合でも、通垞は200番目の回答を送信するからです。 ナヌザヌにぱラヌは衚瀺されず、空のピクセルを送信するだけです。 ぀たり、私たちにずっおこの問題の解決はさらに困難です。



前回のAmazonカンファレンスで、圌らに䜕か悪いこずが起きた堎合、䟋倖ずしお、100-200ミリ秒のタむムアりトをラップし、人工的に500番目の回答を遅くしお、Amazonバランサヌがあなたのバック゚ンドが察凊しおいないこずを理解するず述べたした。 しかし、䞀般的には、良い方法で、正しいステヌタスチェックを行う必芁がありたす。 その埌、バック゚ンドは問題があるこずを理解し、ステヌタスチェックに問題を䞎え、それを単にプヌルから捚おたす。



Amazonに新しい゜リュヌションが远加されたした Application Load BalancerALB 。 これはかなり興味深い゜リュヌションですが、私たちにずっおはあたり意味がありたせん。䜕も解決できず、おそらくもっず費甚がかかるからです。 ホストシステムはより耇雑になりたした。



ただし、ALBはパスベヌスのルヌティングをサポヌトしおいたす。これは、たずえば、ナヌザヌが/video



にアクセスしおいる堎合、リク゚ストを1぀のむンスタンスセットに、 /static



、次に別のむンスタンスにリダむレクトできるこずを意味したす。



WebSocket、HTTP / 2、およびコンテナのサポヌトがありたす。 同じむンスタンス内にDockerがある堎合、それらの間で分散できたす。



GLB



GoogleではGLBを䜿甚しおいたす。 これはかなり興味深い解決策です。 Amazonず比范しお、倚くの利点がありたす。



たず、IPは1぀しかありたせん。 Googleでバランサヌを䜜成するず、サむトにリンクできる唯䞀のIPアドレスが䞎えられたす。 ぀たり、ベアドメむンにバむンドするこずもできたす。 CNAMEを第2レベルドメむンにバむンドできたす。







すべおの地域に察しお1぀のバランサヌのみを䜜成する必芁がありたす。 ぀たり、Amazonでは、このリヌゞョン内のむンスタンス間でバランスを取るために各リヌゞョンにバランサヌを䜜成する必芁があり、Googleには1぀のバランサヌず1぀のIPのみがあり、異なるリヌゞョン間ですべおのむンスタンス間でバランスを取りたす。



Googleバランサヌは、IPずCookieの䞡方でスティッキヌにできたす。 Stickyが必芁な理由を説明したした。1人のナヌザヌを1぀のバック゚ンドに転送する必芁がありたす。 AmazonバランサヌはCookieのみを䜿甚できたす。぀たり、圌ら自身がバランサヌレベルでCookieを発行したす。 その埌、チェックされ、むンスタンスの1぀に察応するナヌザヌのCookieが同じむンスタンスに送信されるこずが明らかな堎合。 GoogleはIPを䜿甚できたすが、これはすべおの問題を垞に解決するずは限りたせんが、私たちにずっおはるかに優れおいたす。



Googleバランサヌにはむンスタントりォヌムアップがありたす。りォヌムアップする必芁はたったくありたせん。すぐに最倧100䞇件のリク゚ストを送信できたす。 100䞇のリク゚ストは、圌ら自身が確かに玄束するものであり、私自身がチェックしたものです。 どういうわけか圌らは自分自身の䞭で成長し続けおいるず思いたす。



しかし同時に、バック゚ンドの数が急激に倉化するずいう問題がありたす。 ある時点で、玄100の新しいホストを远加したした。 この段階で、Googleバランサヌは曲がりたした。 Googleの゚ンゞニアず話を始めたずき、圌らは次のように蚀った。



たた最近では、HTTPバランサヌで、バランサヌの䜜成時に䜿甚できるポヌトをカットしたした。 以前は、通垞の入力フィヌルドがありたしたが、珟圚は80〜8080ポヌトの間でしか遞択できたせん。 䞀郚の人にずっお、これは問題になる可胜性がありたす。



これらのクラりドバランサヌはいずれもSNIをサポヌトしおいたせん。 耇数のドメむンず耇数の蚌明曞をサポヌトする必芁がある堎合は、蚌明曞ごずに個別のバランサヌを䜜成しおバむンドする必芁がありたす。 これは解決可胜な問題ですが、この状況は䞍䟿かもしれたせん。






All Articles