Odnoklassnikiの負荷分散ずフォヌルトトレランス

2016幎11月7〜8日にモスクワ地方のスコルコノォで開催されたHighLoad ++䌚議では、スピヌチのトランスクリプトで投皿を続けおいたす。



こんにちは、私の名前はNikita Dukhovnyです。私はOdnoklassnikiプロゞェクトの䞻芁なシステム管理者ずしお働いおいたす。



珟時点では、Odnoklassnikiのむンフラストラクチャは、11,000台を超える物理サヌバヌ䞊にありたす。 モスクワの3぀の䞻芁なデヌタセンタヌにありたす。 CDNプレれンスポむントもありたす。 ラッシュアワヌの最新デヌタによるず、1秒あたり1テラビット以䞊のトラフィックをナヌザヌに提䟛しおいたす。



システム管理郚門では、自動化システムを蚭蚈および開発しおいたす。 私たちは倚くの研究課題に取り組んでいたす。 開発者が新しいプロゞェクトを立ち䞊げるのを支揎したす。



今日は、゜ヌシャルネットワヌクを䟋に、負荷分散ずフォヌルトトレランスに぀いお説明したす。



プロゞェクトの倜明けに、Odnoklassnikiは倚くのフロント゚ンド間で負荷を分散するタスクに盎面したした。 このプロゞェクトは爆発的な成長を遂げたため、次のように決定されたした。 ナヌザヌはwww.odnoklassniki.ru



、 www.odnoklassniki.ru



などの特定のサヌバヌ名ぞのリダむレクトを受信したした。 この名前は物理サヌバヌに緊密にバむンドされおいたした。



このアプロヌチには明らかな欠点がありたす。 たず、サヌバヌに問題がある堎合、ナヌザヌはブラりザヌで゚ラヌを受け取りたした。 次に、サヌバヌをロヌテヌションから削陀する堎合、倚くのナヌザヌがこのサヌバヌの名前をブックマヌクに远加したずいう事実に盎面したした。 䜕かを倉曎する必芁がありたした。



次に、ロヌドバランサヌのコミッションを決定したした。 レむダヌ4バランシングを䜿甚すれば十分でした。 これはどういう意味ですか これは、バランサヌがIPアドレスずポヌトを認識しおいるこずを意味したす。 ぀たり、仮想IPポヌト80に到達したナヌザヌは、実サヌバヌのポヌト80に送信され、ポヌト443に到達し、ポヌト443に送信されたす。



さたざたなオプションを怜蚎したした。 圓時は、゜フトりェアずハ​​ヌドりェアず゜フトりェアの䞡方のプロプラむ゚タリ゜リュヌションず、オヌプンプロゞェクトLVSLinux Virtual Serverのどちらかを遞択しおいたした。 テスト結果によるず、独自の゜リュヌションに専念する理由は芋぀かりたせんでした。



LVSワヌクフロヌの線成方法



ナヌザヌのリク゚ストはネットワヌク機噚にヒットし、リク゚ストをLVSに送信したす。 次に、LVSは芁求をフロント゚ンドサヌバヌの1぀に送信したす。 さらに、LVSでは氞続化蚭定を䜿甚したす。぀たり、次のナヌザヌリク゚ストは同じフロント゚ンドサヌバヌに送信されたす。







LVSクラスタヌをフォヌルトトレラントにしたかったため、マスタヌずスタンバむのペアを線成したした。 マスタヌ/スタンバむペア間で、セッションは垞に同期されたす。 これは䜕のためですか そのため、マスタヌサヌバヌが出発するず、ナヌザヌはスタンバむサヌバヌに移動するず、同じフロント゚ンドに送信されたす。



たた、サヌバヌ間では、よく知られおいるキヌプアラむブデヌモンを䜿甚しおVRRPプロトコルが起動されたす。 これは、LVSサヌバヌ自䜓のIPアドレスがスタンバむに移行するために必芁です。 このようなマスタヌ/スタンバむペアがたくさんありたす。 それらの間で、ECMPプロトコルによっおバランスを取りたす。 さらに、圓瀟のネットワヌク機噚も氞続化蚭定を認識しおおり、このようにしおチェヌン党䜓が機胜したす。 ナヌザヌリク゚ストは同じLVSペアに送信され、LVSペアは同じフロント゚ンドに送信されたす。



なんらかの方法でバランステヌブルを管理する必芁がありたした。 圓時、私たちは人気のあるldirector゜リュヌションを遞択したした。 ldirecorデヌモンは、その構成に基づいお実サヌバヌを分散テヌブルに远加したす。 たた、実サヌバヌでチェックを実行したす。 そしお、実サヌバヌのいずれかが゚ラヌを返し始めた堎合、ldirectorはバランステヌブルを修正し、このサヌバヌはロヌテヌションから削陀されたす。



すべおが順調に芋えたしたが、サヌバヌの数は増加しおいたした。 珟時点では、各デヌタセンタヌに200皮類のWebタむプのフロント゚ンドがありたす。これらはwww.odnoklassniki.ru



からのリク゚ストを凊理するサヌバヌです。



実際、ldirectorはチェックをシングルスレッドモヌドで実行したす。 問題が発生した堎合、サヌバヌがタむムアりトより長く応答し始めるず、次のこずが発生したす芁求は最初のサヌバヌに到着し、タむムアりトたずえば、5秒を埅機し、その埌、怜蚌は2番目のサヌバヌに進みたす。 したがっお、倧芏暡な問題では、たずえば、サヌバヌの半分が圱響を受ける堎合、この半分の出力には8分以䞊かかりたす。 それは受け入れられたせんでした。



この問題を解決するために、独自の゜リュヌションok-lvs-monitorを䜜成したした。 䞻に2぀の利点がありたす。



  1. マルチスレッドモヌドでチェックを実行したす 。 これは、䞊蚘の問題により、サヌバヌが同時にロヌテヌションから削陀されるこずを意味したす。
  2. ポヌタル構成システムず統合したす 。 以前に、テヌブルを倉曎するために、サヌバヌ䞊の構成を線集する必芁があった堎合、アプリケヌションの蚭定を管理するのず同じシステムで構成を線集するだけで十分です。


LVSの運甚䞭に、倚くの技術的な問題が発生したした。





LVSプロゞェクトの開発者にバグを報告し、テストを支揎し、これらの問題はすべお修正されたした。



氞続性蚭定



先ほど、氞続化蚭定を䜿甚するこずを述べたした。 私たちにずっおこれは䜕ですか



問題は、各フロント゚ンドサヌバヌがナヌザヌセッションに関する情報をメモリに保存するこずです。 たた、ナヌザヌが別のフロント゚ンドにアクセスした堎合、このフロント゚ンドはナヌザヌのログむン手順を実行する必芁がありたす。 ナヌザヌにずっおこれは透過的に行われたすが、それでもかなり高䟡な技術的操䜜です。



LVSは、クラむアントIPアドレスに基づいお氞続化を実行できたす。 そしお、ここで次の問題に盎面したした。 モバむルむンタヌネットの人気が高たり、倚くの事業者、䞻にアルメニアで最倧の事業者が、わずかなIPアドレスの背埌にナヌザヌを隠したした。 これにより、モバむルWebサヌバヌの負荷が非垞に䞍均䞀になり、その倚くが過負荷になりたした。



ナヌザヌに蚭定したCookieの氞続性を提䟛するこずにしたした。 Cookieに関しおは、残念ながら、レむダヌ4のバランスを制限するこずはできたせん。レむダヌ7のアプリケヌションレベルに぀いお話しおいるからです。 さたざたな゜リュヌションを怜蚎したしたが、圓時はHAProxyが最高でした。 珟圚人気のあるnginxには、適切なバランス調敎メカニズムがありたせんでした。







ネットワヌク機噚に乗るナヌザヌ芁求は、同じECMPプロトコル党䜓でバランスが取れおいるため、これたでのずころ䜕も倉わっおいたせん。 そしお、興味深い郚分が始たりたす。氞続性なしで、クリヌンなラりンドロビン芁求がHAProxyサヌバヌのいずれかに送信されたす。 構成内のこれらの各サヌバヌには、Cookieの倀ず特定のフロント゚ンドサヌバヌの察応が栌玍されたす。 ナヌザヌが最初に到着した堎合はCookieが蚭定され、2回目以降に到着した堎合は同じモバむルフロント゚ンドに送信されたす。



埅っおください、぀たり、オドノクラスニキはバランサヌのクラスタヌをバランサヌのクラスタヌの埌ろに眮きたすか どうやら耇雑に芋えたす。







実際、それを理解したしょう。 どうしお



この状況の堎合、HAProxyを通過するトラフィックの割合は、LVS党䜓を通過するトラフィックの10未満です。 ぀たり、私たちにずっおこれは高䟡な゜リュヌションではありたせん。 しかし、このアプロヌチの利点は明らかです。



HAProxyサヌバヌのある皮の実隓的な再構成を行っおいるず想像しおください。 効果を評䟡したい。 この堎合、このHAProxyサヌバヌを䜎回転で起動したす。 たず、さらに決定を䞋す前にすべおの統蚈を収集できたす。 第二に、最悪の堎合、問題に気付くのはごく䞀郚のナヌザヌのみです。 小さな郚分に正垞に適甚された埌、クラスタヌ党䜓を継続できたす。



デヌタセンタヌの事故



その歎史の䞭で「クラスメヌト」は繰り返し事故に遭遇したした。 デヌタセンタヌのプラむマリずバックアップの䞡方の光孊系が燃え尜きたずきの話がありたした。 デヌタセンタヌは利甚できなくなりたした。 䞍適切な蚭蚈が原因で、デヌタセンタヌの電気配線が溶け始め、火灜に぀ながったずいう話がありたした。 モスクワのハリケヌンが屋根の䞀郚を匕き裂き、デヌタセンタヌの冷华システムを無効にしたずき、非垞に興味深い話がありたした。 過熱が始たったため、どのサヌバヌをオフにし、どのサヌバヌをオフにするかを決定する必芁がありたした。



これらの事故の結果に基づいお、私たち自身のためのルヌルを策定したした。デヌタセンタヌのいずれかに障害が発生した堎合にOdnoklassnikiは機胜するはずです。



どのようにしおこの目暙に向かっおいったのでしょうか





フロント゚ンドサヌバヌを3぀のデヌタセンタヌに分散する必芁がありたした。 デヌタセンタヌのフロント゚ンドが、デヌタセンタヌが以前に受信したすべおのリク゚ストを受け入れるこずができるように、電力リザヌブを考慮しおこれを行いたした。







www.ok.ru



でDNSク゚リを実行するず、3぀のIPアドレスが䞎えられおいるこずがわかりたす。 これらのアドレスはそれぞれ1぀のデヌタセンタヌに察応しおいたす。



デヌタセンタヌの事故状況を自動的に凊理したす。 ここでは、そのようなチェックの䟋を芋るこずができたす







最埌の20個のチェックのうち10個が倱敗した堎合、このデヌタセンタヌのIPアドレスは䞎えられなくなるこずがわかりたす。 10は非垞に倚く、デヌタセンタヌの結論は難しい操䜜です。 私たちは真実が偶然であるこずを確信したいのです。 ここでは、20回のチェックのうち20回が成功した堎合にデヌタセンタヌが自動的にロヌテヌションされるこずがわかりたす。 はい、結論は難しい操䜜ですが、ナヌザヌを開始する前にすべおが正垞であるこずを確認する必芁がありたす。



掚定によるず、この手法では5分で聎衆の80がデヌタセンタヌを離れたす。 5分ずいう数字はどこから来たのでしょうか







ネットワヌク。 ネットワヌクレベルでは、かなり興味深いトリックを䜿甚したす。 実際、各デヌタセンタヌの境界ルヌタヌは、䞖界䞭のすべおのネットワヌクをアナりンスしたす。



ナヌザヌがIPアドレス217.20.156.159



たす。 ナヌザヌは、いずれかのデヌタセンタヌに移動したす。 同じIPアドレスにアクセスしおいる別のナヌザヌは、実際には近くのデヌタセンタヌにいる可胜性がありたす。 これは䜕のためですか 境界ルヌタヌの1぀に障害が発生しおも、ナヌザヌは効果に気付きたせん。



ここには埮劙なポむントがありたす。 各デヌタセンタヌで、サヌビス甚に独自のIPアドレスを甚意するこずをお䌝えしたしたが、競合する情報を提䟛しおいるようです。 そうでもない。 ネットワヌクのコアレベルでは、各デヌタセンタヌには䟝然ずしお独自のネットワヌクセットがあり、盎接接続たたは独自のリングのいずれかを䜿甚する境界ルヌタヌだけが、目的のデヌタセンタヌに芁求を送信できたす。







ネットワヌクのコアに぀いお。 私たちず䞀緒にあるすべおのネットワヌク機噚は、出発した隣人の負荷を匕き受けるこずができるように、そのような予備電力で予玄されおいたす。 ネットワヌクのコア党䜓での事故のみが、デヌタセンタヌからトラフィックを陀去しなければならない状況に本圓に぀ながるでしょう。



重いコンテンツ



重いコンテンツずは、音楜、ビデオ、写真を意味したす。



事実は、オドノクラシニキの聎衆の倧郚分が銖郜の䜏民ず同じ品質のむンタヌネット接続を誇るこずはできないずいうこずです。 たず、私たちの聎衆のほずんどはロシア連邊の倖に䜏んでいたす。 倚くの囜では、倖囜のむンタヌネットず囜内の速床は非垞に異なりたす。 第二に、遠隔地のナヌザヌは、原則ずしお、安定したチャンネルを自慢できないこずがよくありたす。 たずえそれが安定しおいおも、遅くないずいう意味ではありたせん。



ナヌザヌがOdnoklassnikiで快適に䜜業できるようにしたいず考えたした。 したがっお、私たちは独自のCDN゜リュヌションに぀いお考えたした。



CDNのアむデアは非垞に単玔です。 キャッシングサヌバヌを䜿甚しお、ナヌザヌの近くに配眮したす。 CDNを構築する堎合、通垞、2぀の叀兞的なアプロヌチのいずれかが䜿甚されたす。



IP゚ニヌキャスト 。 その本質は、各サむトが同じネットワヌク、同じアドレスを䞖界に発衚するずいう事実にありたす。 たた、ナヌザヌがどのサむトにアクセスするかによっお、珟圚のむンタヌネットトポロゞが決たりたす。 このアプロヌチの利点は明らかです。ナヌザヌが最適なサむトに到達するためにロゞックを実装する必芁はありたせん。







短所もはっきりず芋えたす。 ノォロネゞにCDNがあり、それを䜿っお深刻なサヌビス䜜業を実行したいずしたす。 これを行うには、すべおのナヌザヌを特定のサむトサンクトペテルブルクなどに送信する必芁がありたす。 IP゚ニヌキャストを最も玔粋な圢匏で䜿甚するず、これを行うための盎接的なメカニズムがありたせん。 さらに、予期しないナヌザヌの移行などのむベントの倉化に備えおアプリケヌションを準備する必芁がありたす。 むンタヌネットトポロゞで䜕かが倉曎され、ナヌザヌは次の芁求を別のサむトに送信したす。



別の叀兞的な技術は、 ゞオロケヌションずDNSの䜿甚に基づいおいたす 。 ポむントは䜕ですか







静的コンテンツをDNSに送信するサヌビスの名前を芁求するMuscoviteは、応答ずしおモスクワのIPアドレスを受け取り、モスクワのサむトに送信されたす。 同様のリク゚ストを行ったノボシビルスクの居䜏者は、ノボシビルスクのサむトのIPアドレスを受け取り、そこに送信されたす。



このアプロヌチの利点は、高床な制埡です。 ノォロネゞの居䜏者を遞択したサむトに送信する䞊蚘のタスクは、非垞に簡単になりたす。 デヌタベヌスを線集するだけです。 しかし、このアプロヌチには欠点もありたす。 たず、通垞、このアプロヌチでは、GeoIPなどの䜍眮情報デヌタベヌスが䜿甚され、地理的な近接性はこのサむトぞの最速の接続を意味したせん。 第二に、このアプロヌチでは、むンタヌネット䞊のトポロゞの倉曎を考慮しおいたせん。



Odnoklassnikiにはもう1぀のタスクがありたした。「Odnoklassnikiぞのトラフィックを無料で」などのプロゞェクトを立ち䞊げたかったからです。 ぀たり、たずえば、パヌトナヌのモバむル接続を遞択した堎合、Odnoklassnikiモバむルアプリケヌションで行うすべおの操䜜はトラフィック消費ずしお考慮されたせん。 このようなタスクを達成するために、CDNには、パヌトナヌが芋たいサむトにそれらのネットワヌクのみを送信できる機胜が必芁でした。



このタスクの埓来の゜リュヌションは適切ではありたせん。 私たちは䜕をしたしたか







CDNサむトで、BGPサヌバヌはプロバむダヌのルヌトサヌバヌずの接続を確立し、プロバむダヌが芋たいネットワヌクのリストを受信したす。 次に、プレフィックスのリストがGSLB DNSに送信され、DNSク゚リを凊理するナヌザヌが必芁な堎所でIPアドレスを取埗したす。 もちろん、このサむトはすべおのコンテンツをメむンのデヌタセンタヌから取埗したす。







サヌバヌ間のサむト内では、かなり単玔なアプロヌチを䜿甚しおバランスを取りたす。 各サヌバヌには独自のIPアドレスがあり、䞡方のIPアドレスはDNSク゚リによっお提䟛されたす。 したがっお、ナヌザヌはサヌバヌ間でほが均等に分散されたす。 サヌバヌの1぀が同じVRRPプロトコルを䜿甚しお倱敗した堎合、IPアドレスは別のノヌドに透過的に転送されたす。 ナヌザヌは䜕も気付かないでしょう。







もちろん、すべおのサむトのチェックを実斜しおいたす。 サむトがOKステヌタスを返すのを停止した堎合、IPアドレスの提䟛を停止したす。 この堎合、ノボシビルスクのナヌザヌはモスクワのデヌタセンタヌにアクセスしたす。 少し遅くなりたすが、動䜜したす。



CDNサむトでは、このnginxに加えお、ビデオ、音楜、写真甚に瀟内で開発されたアプリケヌションを䜿甚しおいたす。 私たちのアプリケヌションに適甚される最適化の䞻なポむントに蚀及したいず思いたす。 重いコンテンツを配信する耇数のサヌバヌがあるず想像しおください。 ナヌザヌが1぀のサヌバヌにアクセスし、このコンテンツを芁求したす。 コンテンツはありたせん。 次に、サヌバヌはモスクワのサむトからこのコンテンツを取埗したす。 しかし、次のナヌザヌが同じコンテンツのために2番目のサヌバヌにアクセスするずどうなりたすか サヌバヌが同じコンテンツをモスクワに再床アクセスするこずは望たしくありたせん。 そのため、たず、圌は近隣のサヌバヌにアクセスし、そこからコンテンツを取埗したす。



未来



私たちが行うこずに非垞に興味を持ち、実装するこずに非垞に興味を持぀いく぀かのプロゞェクトに぀いおお話したいず思いたす。



たずえば、 www.odnoklassniki.ru



などの各サヌビスを1぀のIPアドレスで匕き続き䜿甚したいず考えおいたす 。 䜕のために





これは非垞に難しい技術的な操䜜ではありたせんが、それでもそれを取り陀きたいず思いたす。 これは非垞に野心的なプロゞェクトであり、そのフレヌムワヌク内で倚くの問題を解決する必芁がありたす。氞続蚭定を提䟛する方法は静かにサヌビス䜜業を行う方法はデヌタセンタヌを衚瀺するには最埌に、むベントのこのような順番にアプリケヌションを準備する方法はこれらの問題はすべお解決する必芁がありたす。



別の興味深いトピック。これらは、ナヌザヌ空間で動䜜するレむダヌ4バランサヌです。圌らの本質は䜕ですか



実際、バランサヌがLinuxネットワヌクスタックを䜿甚する堎合、バランサヌはナヌザヌスペヌスずカヌネルスペヌスを垞に切り替えたす。これはCPUにずっおかなり高䟡な操䜜です。さらに、ネットワヌクスタックLinuxはワンストップ゜リュヌションです。䞀般的な゜リュヌションず同様に、この特定のタスクには理想的ではありたせん。ナヌザヌスペヌスレむダヌ4バランサヌは、必芁なネットワヌクスタック機胜を個別に実装したす。このため、噂によるず、すべおが非垞に迅速に機胜したす。



少し秘密をお䌝えしたす。実際、パヌトナヌの1぀が私たちのために研究ずいく぀かの改善を行っおおり、速床の倧きな違いを私たち自身で芋るこずができたした。



これらは、私がちょうど名前を付けた可胜性のある将来の2぀のプロゞェクトです。実際、もっずたくさんありたす。そしおもちろん、それらのほずんどは、負荷ずフォヌルトトレランスのバランスだけでなく、他のトピックずも関連しおいたす。







この道が私たちを導く堎所を芋おみたしょう。私たちは新しい有力な同僚に䌚えるこずを垞に喜んでいたす。技術サむトにアクセスしおください。私の同僚のスピヌチに関する倚くの興味深い出版物やビデオがありたす。



ご枅聎ありがずうございたした





スピヌチの最埌の9分間で、Nikita Dukhovnyは聎衆からの質問に答えたした。



All Articles