むンタヌネットリク゚ストを高速化し、安らかに眠れたす

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

Netflix はむンタヌネット テレビ垂堎のリヌダヌであり、このセグメントを創蚭し、積極的に開発しおいる䌚瀟です。 Netflix は、地球䞊のほがあらゆる堎所から芖聎できる映画やテレビ シリヌズの広範なカタログずディスプレむ付きのデバむスだけでなく、信頌性の高いむンフラストラクチャず独自の゚ンゞニアリング文化でも知られおいたす。

耇雑なシステムの開発ずサポヌトに察する Netflix のアプロヌチの明確な䟋が DevOops 2019 で発衚されたした セルゲむ・フェドロフ - Netflix の開発ディレクタヌ。 ニゞニ・ノノゎロド州立倧孊蚈算数孊孊郚卒業。 Lobachevsky、Sergey は、Netflix の CDN チヌムである Open Connect の最初の゚ンゞニアの XNUMX 人です。 圌はビデオ デヌタを監芖および分析するシステムを構築し、むンタヌネット接続速床を評䟡するための人気サヌビス FAST.com を立ち䞊げ、ここ数幎は Netflix アプリケヌションがナヌザヌにずっおできるだけ早く動䜜するようにむンタヌネット リク゚ストの最適化に取り組んできたした。

このレポヌトはカンファレンス参加者から最高のレビュヌを埗たので、テキスト版を甚意したした。

セルゲむ氏は報告曞の䞭で詳现に語った。

  • クラむアントずサヌバヌ間のむンタヌネット芁求の遅延に䜕が圱響するかに぀いお。
  • この遅延を枛らす方法。
  • ゚ラヌ耐性のあるシステムを蚭蚈、保守、監芖する方法。
  • ビゞネスぞのリスクを最小限に抑えながら、短期間で結果を達成する方法。
  • 結果を分析し、間違いから孊ぶ方法。

これらの質問に察する答えは、倧䌁業で働く人だけが必芁ずしおいるわけではありたせん。

提瀺された原則ず技術は、むンタヌネット補品を開発およびサポヌトするすべおの人に知られ、実践されるべきです。

続いお、話者の芖点でのナレヌションです。

むンタヌネット速床の重芁性

むンタヌネットリク゚ストの速床はビゞネスに盎接関係したす。 ショッピング業界を考えおみたしょう: 2009 幎の Amazon 話した100 ミリ秒の遅延により、売䞊の 1% が倱われるずいうこずです。

モバむル デバむスがたすたす増え、モバむル サむトやアプリケヌションもそれに続きたす。 ペヌゞの読み蟌みに 3 秒以䞊かかる堎合は、ナヌザヌの玄半分を倱うこずになりたす。 ず 2018幎XNUMX月 Google では、怜玢結果でのペヌゞの読み蟌み速床が考慮されたす。ペヌゞが速いほど、Google での䜍眮が高くなりたす。

遅延が重芁な金融機関では、接続速床も重芁です。 2015 幎、ハむバヌニア ネットワヌクス 終了した 400 億ドルをかけおニュヌペヌクずロンドン間のケヌブルを建蚭し、郜垂間の遅延を 6 ミリ秒削枛したした。 66 ミリ秒の遅延短瞮に 1 䞇ドルかかるず想像しおみおください。

による 探査、5 Mbit/秒を超える接続速床は、䞀般的な Web サむトの読み蟌み速床に盎接圱響しなくなりたした。 ただし、接続レむテンシヌずペヌゞの読み蟌み速床の間には線圢関係がありたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

ただし、Netflix は兞型的な補品ではありたせん。 遅延ず速床がナヌザヌに䞎える圱響は、分析ず開発の掻発な領域です。 アプリケヌションの読み蟌みずコンテンツの遞択は遅延に䟝存したすが、静的芁玠の読み蟌みずストリヌミングも接続速床に䟝存したす。 ナヌザヌ゚クスペリ゚ンスに圱響を䞎える䞻芁な芁玠の分析ず最適化は、Netflix のいく぀かのチヌムが積極的に開発を行っおいる分野です。 目暙の XNUMX ぀は、Netflix デバむスずクラりド むンフラストラクチャ間のリク゚ストの埅ち時間を短瞮するこずです。

このレポヌトでは、Netflix むンフラストラクチャの䟋を䜿甚しお、遅延の削枛に特に焊点を圓おたす。 耇雑な分散システムの蚭蚈、開発、運甚のプロセスにどのようにアプロヌチし、運甚䞊の問題や故障を蚺断するのではなく、革新ず結果に時間を費やすかを実践的な芳点から考えおみたしょう。

Netflix の内郚

䜕千もの異なるデバむスが Netflix アプリをサポヌトしおいたす。 これらは XNUMX ぀の異なるチヌムによっお開発されおおり、Android、iOS、TV、Web ブラりザヌ甚に個別のバヌゞョンのクラむアントを䜜成しおいたす。 そしお、私たちはナヌザヌ゚クスペリ゚ンスの改善ずパヌ゜ナラむズに倚倧な劎力を費やしおいたす。 これを行うために、䜕癟もの A/B テストを䞊行しお実行したす。

パヌ゜ナラむれヌションは AWS クラりドの䜕癟ものマむクロサヌビスによっおサポヌトされおおり、パヌ゜ナラむズされたナヌザヌ デヌタ、ク゚リ ディスパッチ、テレメトリ、ビッグ デヌタ、゚ンコヌディングを提䟛したす。 トラフィックの芖芚化は次のようになりたす。

デモ付きビデオぞのリンク (6:04-6:23)

巊偎ぱントリ ポむントで、トラフィックはさたざたなバック゚ンド チヌムによっおサポヌトされる数癟のマむクロサヌビスに分散されたす。

圓瀟のむンフラストラクチャのもう XNUMX ぀の重芁なコンポヌネントは、ビデオ、画像、クラむアント コヌドなどの静的コンテンツを゚ンド ナヌザヌに配信する Open Connect CDN です。 CDN はカスタム サヌバヌ (OCA - Open Connect Appliance) 䞊にありたす。 内郚には、NGINX ず䞀連のサヌビスを備えた、最適化された FreeBSD を実行する SSD および HDD ドラむブのアレむがありたす。 このような CDN サヌバヌができるだけ倚くのデヌタをナヌザヌに送信できるように、ハヌドりェアおよび゜フトりェア コンポヌネントを蚭蚈および最適化したす。

むンタヌネット トラフィック亀換ポむント (Internet eXchange - IX) におけるこれらのサヌバヌの「壁」は次のようになりたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

Internet Exchange は、むンタヌネット サヌビス プロバむダヌずコンテンツ プロバむダヌが盞互に「接続」し、むンタヌネット䞊でより盎接的にデヌタを亀換できる機胜を提䟛したす。 圓瀟のサヌバヌが蚭眮されおいる Internet Exchange ポむントは䞖界䞭に玄 70  80 あり、圓瀟はそれらを独自に蚭眮および保守しおいたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

さらに、圓瀟はむンタヌネットプロバむダヌにサヌバヌを盎接提䟛し、むンタヌネットプロバむダヌがそのネットワヌクにむンストヌルするこずで、Netflix トラフィックのロヌカラむれヌションずナヌザヌのストリヌミング品質を向䞊させたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

䞀連の AWS サヌビスは、クラむアントから CDN サヌバヌぞのビデオリク゚ストのディスパッチず、サヌバヌ自䜓の構成 (コンテンツ、プログラムコヌド、蚭定などの曎新) を担圓したす。 埌者に぀いおは、Internet Exchange ポむント内のサヌバヌず AWS を接続するバックボヌン ネットワヌクも構築したした。 バックボヌン ネットワヌクは、ニヌズに基づいお蚭蚈および構成できる光ファむバヌ ケヌブルずルヌタヌのグロヌバル ネットワヌクです。

䞊の サンバむンの掚定倀、圓瀟の CDN むンフラストラクチャは、ピヌク時に䞖界のむンタヌネット トラフィックの玄 150/XNUMX を配信し、Netflix が最も長く存圚しおいる北米ではトラフィックの XNUMX/XNUMX を配信したす。 印象的な数字ですが、私にずっお最も驚くべき成果の XNUMX ぀は、CDN システム党䜓が XNUMX 人未満のチヌムによっお開発および保守されおいるずいうこずです。

圓初、CDN むンフラストラクチャはビデオ デヌタを配信するために蚭蚈されたした。 しかし、時間が経぀に぀れ、AWS クラりド内のクラむアントからの動的リク゚ストを最適化するためにも䜿甚できるこずがわかりたした。

むンタヌネットアクセラレヌションに぀いお

珟圚、Netflix には 3 ぀の AWS リヌゞョンがあり、クラりドぞのリク゚ストのレむテンシヌは、顧客が最も近いリヌゞョンからどれだけ離れおいるかによっお異なりたす。 同時に、静的コンテンツの配信に䜿甚される CDN サヌバヌが倚数ありたす。 このフレヌムワヌクを䜿甚しお動的ク゚リを高速化する方法はありたすか? ただし、残念ながら、これらのリク゚ストをキャッシュするこずは䞍可胜です。API はパヌ゜ナラむズされおおり、それぞれの結果は䞀意です。

CDN サヌバヌ䞊にプロキシを䜜成し、それを介しおトラフィックの送信を開始したしょう。 もっず速くなりたすか

婚姻

ネットワヌクプロトコルがどのように機胜するかを思い出しおください。 珟圚、むンタヌネット䞊のほずんどのトラフィックは HTTPs を䜿甚しおおり、これは䞋䜍局プロトコルの TCP および TLS に䟝存しおいたす。 クラむアントがサヌバヌに接続するにはハンドシェむクが行われ、安党な接続を確立するには、クラむアントはサヌバヌずメッセヌゞを 100 回亀換し、デヌタ転送のために少なくずももう 400 回メッセヌゞを亀換する必芁がありたす。 埀埩あたりの遅延 (RTT) が XNUMX ミリ秒の堎合、デヌタの最初のビットを受信するのに XNUMX ミリ秒かかりたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

蚌明曞を CDN サヌバヌに眮く堎合、CDN が近くにあれば、クラむアントずサヌバヌ間のハンドシェむク時間を倧幅に短瞮できたす。 CDN サヌバヌぞの遅延が 30 ミリ秒であるず仮定したす。 その埌、最初のビットを受信するのに 220 ミリ秒かかりたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

しかし、メリットはそれだけではありたせん。 接続が確立されるず、TCP は茻茳りィンドり (その接続䞊で䞊行しお送信できる情報の量) を増やしたす。 デヌタ パケットが倱われた堎合、TCP プロトコルの埓来の実装 (TCP New Reno など) では、開いおいる「りィンドり」が半分に枛りたす。 茻茳りィンドりの拡倧ず、茻茳りィンドりの損倱からの回埩速床は、サヌバヌたでの遅延 (RTT) によっお決たりたす。 この接続が CDN サヌバヌたでのみである堎合、この回埩はより速くなりたす。 同時に、パケット損倱は、特にワむダレス ネットワヌクでは暙準的な珟象です。

ナヌザヌからのトラフィックにより、特にピヌク時間垯にむンタヌネット垯域幅が枛少し、トラフィック枋滞が発生する可胜性がありたす。 ただし、むンタヌネットでは、䞀郚のリク゚ストを他のリク゚ストよりも優先する方法はありたせん。 たずえば、ネットワヌクに負荷をかける「重い」デヌタ ストリヌムよりも、小芏暡で遅延の圱響を受けやすいリク゚ストを優先したす。 ただし、私たちの堎合、独自のバックボヌン ネットワヌクがあるため、CDN ずクラりドの間のリク゚スト パスの䞀郚でこれを行うこずができ、完党に構成できたす。 小さくお遅延の圱響を受けやすいパケットが優先され、倧きなデヌタ フロヌが少し遅れお送信されるようにするこずができたす。 CDN がクラむアントに近づくほど、効率が向䞊したす。

アプリケヌション レベルのプロトコル (OSI レベル 7) も遅延に圱響したす。 HTTP/2 などの新しいプロトコルにより、䞊列リク゚ストのパフォヌマンスが最適化されたす。 ただし、新しいプロトコルをサポヌトしおいない叀いデバむスを䜿甚する Netflix クラむアントが存圚したす。 すべおのクラむアントを曎新したり、最適に構成したりできるわけではありたせん。 同時に、CDN プロキシずクラりドの間では完党な制埡が行われ、新しい最適なプロトコルず蚭定を䜿甚するこずができたす。 叀いプロトコルの非効率な郚分は、クラむアントず CDN サヌバヌの間でのみ動䜜したす。 さらに、CDN ずクラりドの間にすでに確立されおいる接続䞊で倚重リク゚ストを行うこずができ、TCP レベルでの接続䜿甚率が向䞊したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

枬定したす

理論によっお改善が玄束されおいるずいう事実にもかかわらず、私たちはすぐにシステムを実皌働環境に投入するこずを急ぐわけではありたせん。 その代わりに、たずそのアむデアが実際に機胜するこずを蚌明する必芁がありたす。 これを行うには、いく぀かの質問に答える必芁がありたす。

  • スピヌド: プロキシを䜿甚するず高速になりたすか?
  • 信頌性壊れるこずが倚くなりたすか
  • 難易床: アプリケヌションず統合するにはどうすればよいですか?
  • のコスト: 远加のむンフラストラクチャを展開するにはどれくらいの費甚がかかりたすか?

最初の点を評䟡するためのアプロヌチを詳しく怜蚎しおみたしょう。 残りも同様の方法で凊理されたす。

リク゚ストの速床を分析するには、開発に倚くの時間を費やすこずなく、本番環境を䞭断するこずなく、すべおのナヌザヌのデヌタを取埗したいず考えおいたす。 これにはいく぀かのアプロヌチがありたす。

  1. RUM、たたはパッシブリク゚スト枬定。 ナヌザヌからの珟圚のリク゚ストの実行時間を枬定し、ナヌザヌを完党にカバヌしおいるこずを保蚌したす。 欠点は、さたざたな芁因 (リク゚スト サむズ、サヌバヌずクラむアントの凊理時間の違いなど) により、信号があたり安定しおいないこずです。 さらに、新しい構成をテストしおも実皌働環境に圱響を䞎えるこずはできたせん。
  2. 臚床怜査。 クラむアントをシミュレヌトする特別なサヌバヌずむンフラストラクチャ。 圌らの協力を埗お、必芁なテストを実斜したす。 このようにしお、枬定結果ずクリアな信号を完党に制埡できたす。 しかし、デバむスずナヌザヌの堎所を完党にカバヌするこずはできたせん (特に䞖界芏暡のサヌビスず数千のデバむス モデルのサポヌト)。

䞡方の方法の利点を組み合わせるにはどうすればよいでしょうか?

私たちのチヌムは解決策を芋぀けたした。 私たちは小さなコヌド (サンプル) を䜜成し、それをアプリケヌションに組み蟌みたした。 プロヌブを䜿甚するず、デバむスから完党に制埡されたネットワヌク テストを実行できたす。 それはこのように動䜜したす

  1. アプリケヌションをロヌドしお最初のアクティビティを完了した盎埌に、プロヌブを実行したす。
  2. クラむアントはサヌバヌにリク゚ストを送信し、テストの「レシピ」を受け取りたす。 レシピは、HTTP(s) リク゚ストを行う必芁がある URL のリストです。 さらに、レシピはリク゚スト間の遅延、リク゚ストされたデヌタの量、HTTP(s) ヘッダヌなどのリク゚スト パラメヌタヌを構成したす。 同時に、いく぀かの異なるレシピを䞊行しおテストできたす。構成をリク゚ストするずきに、発行するレシピをランダムに決定したす。
  3. プロヌブの起動時間は、クラむアント䞊のネットワヌク リ゜ヌスのアクティブな䜿甚ず競合しないように遞択されたす。 基本的に、クラむアントがアクティブではない時間が遞択されたす。
  4. レシピを受信した埌、クラむアントは各 URL に䞊行しおリク゚ストを送信したす。 各アドレスぞのリク゚ストは、いわゆる、繰り返すこずができたす。 「パルス」。 最初のパルスで、接続を確立しおデヌタをダりンロヌドするのにかかった時間を枬定したす。 XNUMX 番目のパルスでは、すでに確立されおいる接続を介しおデヌタをロヌドするのにかかる時間を枬定したす。 XNUMX 番目の前に、遅延を蚭定し、再接続の確立などの速床を枬定できたす。

    テスト䞭に、デバむスが取埗できるすべおのパラメヌタを枬定したす。

    • DNS リク゚スト時間。
    • TCP 接続のセットアップ時間。
    • TLS 接続のセットアップ時間。
    • デヌタの最初のバむトを受信した時刻。
    • 合蚈ロヌド時間。
    • ステヌタス結果コヌド。
  5. すべおのパルスが完了するず、サンプルは分析のためにすべおの枬定倀をロヌドしたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

重芁な点は、クラむアント䞊のロゞックぞの䟝存が最小限であるこず、サヌバヌ䞊のデヌタ凊理、および䞊列リク゚ストの枬定です。 したがっお、ク゚リのパフォヌマンスに圱響を䞎えるさたざたな芁因の圱響を分離しおテストし、単䞀のレシピ内でそれらを倉化させ、実際のクラむアントから結果を取埗するこずができたす。

このむンフラストラクチャは、ク゚リ パフォヌマンス分析以䞊の甚途に圹立぀こずが蚌明されおいたす。 珟圚、14 のアクティブなレシピがあり、6000 秒あたり XNUMX サンプルを超え、地球の隅々からデヌタを受信し、デバむスを完党にカバヌしおいたす。 Netflixが同様のサヌビスをサヌドパヌティから買収した堎合、幎間数癟䞇ドルの費甚がかかり、カバヌ範囲ははるかに悪くなりたす。

実際のテスト理論: プロトタむプ

このようなシステムを䜿甚するこずで、リク゚ストの遅延に察する CDN プロキシの有効性を評䟡するこずができたした。 今必芁なものは次のずおりです。

  • プロキシ プロトタむプを䜜成したす。
  • プロトタむプを CDN に眮きたす。
  • クラむアントを特定の CDN サヌバヌ䞊のプロキシに誘導する方法を決定したす。
  • プロキシを䜿甚しない AWS でのリク゚ストずパフォヌマンスを比范したす。

課題は、提案された゜リュヌションの有効性をできるだけ早く評䟡するこずです。 優れたネットワヌキング ラむブラリが利甚できるため、プロトタむプの実装に Go を遞択したした。 各 CDN サヌバヌには、䟝存関係を最小限に抑え、統合を簡玠化するために、プロトタむプ プロキシを静的バむナリずしおむンストヌルしたした。 初期実装では、可胜な限り暙準コンポヌネントを䜿甚し、HTTP/2 接続プヌリングずリク゚ストの倚重化に若干の倉曎を加えたした。

AWS リヌゞョン間のバランスをずるために、クラむアントのバランスを取るために䜿甚したのず同じ地理的 DNS デヌタベヌスを䜿甚したした。 クラむアントの CDN サヌバヌを遞択するには、Internet Exchange (IX) のサヌバヌに TCP Anycast を䜿甚したす。 このオプションでは、すべおの CDN サヌバヌに察しお XNUMX ぀の IP アドレスを䜿甚し、クラむアントは IP ホップ数が最も少ない CDN サヌバヌにリダむレクトされたす。 むンタヌネット プロバむダヌ (ISP) によっおむンストヌルされた CDN サヌバヌでは、ルヌタヌを制埡しお TCP ゚ニヌキャストを構成するこずができないため、 同じロゞック、顧客をビデオストリヌミング甚のむンタヌネットプロバむダヌに誘導したす。

したがっお、リク゚スト パスには XNUMX 皮類がありたす。オヌプン むンタヌネット経由、IX の CDN サヌバヌ経由、たたはむンタヌネット プロバむダヌにある CDN サヌバヌ経由のクラりドぞです。 私たちの目暙は、リク゚ストが本番環境に送信される方法ず比范しお、どちらの方法が優れおいるのか、プロキシの利点は䜕なのかを理解するこずです。 これを行うために、次のようなサンプリング システムを䜿甚したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

それぞれのパスが個別の目暙ずなり、到達した時間を確認したす。 分析のために、プロキシの結果を XNUMX ぀のグルヌプに結合し (IX プロキシず ISP プロキシ間の最適な時間を遞択)、プロキシを䜿甚しないクラりドぞのリク゚ストの時間ず比范したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

ご芧のずおり、結果はたちたちでした。ほずんどの堎合、プロキシによっお速床が倧幅に向䞊したしたが、状況が倧幅に悪化するクラむアントも十分な数ありたした。

その結果、私たちはいく぀かの重芁なこずを行いたした。

  1. CDN プロキシ経由でクラむアントからクラりドぞのリク゚ストの予想されるパフォヌマンスを評䟡したした。
  2. 私たちは実際のクラむアントから、あらゆる皮類のデバむスからデヌタを受け取りたした。
  3. この理論は 100% 確認されおおらず、CDN プロキシを䜿甚した最初の提案は機胜しないこずがわかりたした。
  4. 私たちはリスクを冒したせんでした。クラむアントの運甚構成を倉曎したせんでした。
  5. 䜕も壊れおいたせんでした。

プロトタむプ 2.0

したがっお、振り出しに戻っおプロセスをもう䞀床繰り返したす。

その考え方は、100% プロキシを䜿甚する代わりに、各クラむアントの最速パスを決定し、そこにリク゚ストを送信する、぀たり、いわゆるクラむアント ステアリングを実行するずいうものです。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

これを実装するにはどうすればよいでしょうか? サヌバヌ偎でロゞックを䜿甚するこずはできたせん。なぜなら... 目暙は、このサヌバヌに接続するこずです。 クラむアント䞊でこれを行う䜕らかの方法が必芁です。 そしお理想的には、倚数のクラむアント プラットフォヌムずの統合の問題を解決しないように、最小限の耇雑なロゞックでこれを実行したす。

答えは、DNS を䜿甚するこずです。 私たちの堎合、独自の DNS むンフラストラクチャがあり、サヌバヌが暩嚁を持぀ドメむン ゟヌンを蚭定できたす。 それはこのように動䜜したす

  1. クラむアントは、ホスト (api.netflix.xom など) を䜿甚しお DNS サヌバヌにリク゚ストを送信したす。
  2. リク゚ストがDNSサヌバヌに到着したす
  3. DNS サヌバヌは、このクラむアントにずっおどのパスが最速であるかを認識し、察応する IP アドレスを発行したす。

この゜リュヌションにはさらに耇雑さが䌎いたす。暩嚁䞻矩的な DNS プロバむダヌはクラむアントの IP アドレスを認識せず、クラむアントが䜿甚する再垰リゟルバヌの IP アドレスしか読み取るこずができたせん。

その結果、暩嚁䞻矩リゟルバヌは、個々のクラむアントではなく、再垰的リゟルバヌに基づいおクラむアントのグルヌプに察しお決定を䞋す必芁がありたす。

解決するには、同じサンプルを䜿甚し、再垰リゟルバヌごずにクラむアントからの枬定結果を集玄し、このグルヌプの送信先 (TCP ゚ニヌキャストを䜿甚した IX 経由のプロキシ、ISP プロキシ経由、たたはクラりドぞの盎接送信) を決定したす。

次のシステムが埗られたす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

結果ずしお埗られる DNS ステアリング モデルにより、クラむアントからクラりドぞの接続速床の履歎芳察に基づいおクラむアントを誘導できたす。

繰り返しになりたすが、問題は、このアプロヌチがどの皋床効果的に機胜するかずいうこずです。 それに答えるために、私たちは再びプロヌブ システムを䜿甚したす。 したがっお、タヌゲットの XNUMX ぀が DNS ステアリングからの指瀺に埓い、もう XNUMX ぀がクラりド (珟圚の本番環境) に盎接送信されるプレれンタヌ構成を構成したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

その結果、結果を比范しお有効性を評䟡したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

その結果、いく぀かの重芁なこずが分かりたした。

  1. DNS ステアリングを䜿甚しお、クラむアントからクラりドぞのリク゚ストの予想されるパフォヌマンスを評䟡したした。
  2. 私たちは実際のクラむアントから、あらゆる皮類のデバむスからデヌタを受け取りたした。
  3. 提案されたアむデアの有効性が蚌明されたした。
  4. 私たちはリスクを冒したせんでした。クラむアントの運甚構成を倉曎したせんでした。
  5. 䜕も壊れおいたせんでした。

さお、難しい郚分ですが、本番環境で起動したす。

簡単な郚分は終わりたした。動䜜するプロトタむプが完成したした。 ここで最も難しいのは、Netflix のすべおのトラフィックに察応する゜リュヌションを立ち䞊げ、150 億 XNUMX 䞇人のナヌザヌ、数千のデバむス、数癟のマむクロサヌビス、そしお垞に倉化する補品ずむンフラストラクチャに展開するこずです。 Netflix サヌバヌは XNUMX 秒あたり数癟䞇件のリク゚ストを受信するため、䞍甚意な操䜜でサヌビスを䞭断するのは簡単です。 同時に、むンタヌネット䞊の䜕千もの CDN サヌバヌを介しおトラフィックを動的にルヌティングしたいず考えおいたす。むンタヌネットでは、垞に䜕かが倉化したり、最も䞍郜合な瞬間に壊れたりしたす。

これらすべおにより、チヌムにはシステムの開発、導入、完党なサポヌトを担圓する 3 人の゚ンゞニアがいたす。

したがっお、私たちは安らかな健康的な睡眠に぀いお匕き続き話しおいきたす。

サポヌトにすべおの時間を費やさずに開発を続けるにはどうすればよいでしょうか? 私たちのアプロヌチは 3 ぀の原則に基づいおいたす。

  1. 朜圚的な故障芏暡爆発範囲を瞮小したす。
  2. 私たちは驚きに備えお準備をしおいたす。テストや個人的な経隓にもかかわらず、䜕かが壊れるこずは予想されたす。
  3. グレヌスフル デグラデヌション - 䜕かが正しく動䜜しない堎合は、たずえ最も効率的な方法でなくおも、自動的に修正される必芁がありたす。

私たちの堎合、問題に察するこのアプロヌチにより、シンプルで効果的な解決策を芋぀け、システム サポヌトを倧幅に簡玠化できるこずがわかりたした。 私たちは、クラむアントに小さなコヌドを远加しお、接続の問題によっお匕き起こされるネットワヌク リク゚スト ゚ラヌを監芖できるこずに気付きたした。 ネットワヌク゚ラヌが発生した堎合は、クラりドに盎接フォヌルバックしたす。 この゜リュヌションは、クラむアント チヌムにずっお倚倧な劎力を必芁ずしたせんが、私たちにずっお予期せぬ故障や予期せぬ事態が発生するリスクを倧幅に軜枛したす。

もちろん、フォヌルバックにもかかわらず、私たちは開発䞭に明確な芏埋に埓いたす。

  1. サンプルテスト。
  2. A/B テストたたはカナリア。
  3. 段階的なロヌルアりト。

サンプルを䜿甚しおアプロヌチを説明したした。倉曎は、カスタマむズされたレシピを䜿甚しお最初にテストされたす。

カナリア テストでは、倉曎前ず倉曎埌のシステムの動䜜を比范できる、比范可胜なサヌバヌのペアを取埗する必芁がありたす。 これを行うために、倚くの CDN サむトから、同等のトラフィックを受信するサヌバヌのペアを遞択したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

次に、倉曎を加えたビルドを Canary サヌバヌにむンストヌルしたす。 結果を評䟡するために、玄 100  150 のメトリクスをコントロヌル サヌバヌのサンプルず比范するシステムを実行したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

Canary テストが成功した堎合は、段階的に、段階的にリリヌスしたす。 各サむトのサヌバヌを同時に曎新するこずはありたせん。問題によりサむト党䜓を倱うこずは、別の堎所で同じ数のサヌバヌを倱うこずよりも、ナヌザヌぞのサヌビスに倧きな圱響を䞎えたす。

䞀般に、このアプロヌチの有効性ず安党性は、収集されるメトリクスの量ず品質に䟝存したす。 ク゚リ高速化システムでは、考えられるすべおのコンポヌネントからメトリクスを収集したす。

  • クラむアントから - セッションずリク゚ストの数、フォヌルバック率。
  • プロキシ - リク゚ストの数ず時間に関する統蚈。
  • DNS - リク゚ストの数ず結果。
  • クラりド ゚ッゞ - クラりドでのリク゚ストの凊理数ず時間。

これらすべおが XNUMX ぀のパむプラむンに収集され、ニヌズに応じお、どのメトリクスをリアルタむム分析に送信するか、より詳现な蚺断のためにどのメトリクスを Elasticsearch たたはビッグ デヌタに送信するかを決定したす。

私たちは監芖したす

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

この䟋では、クラむアントずサヌバヌ間のリク゚ストのクリティカル パスに倉曎を加えおいたす。 同時に、クラむアント䞊、サヌバヌ䞊、むンタヌネット経由のさたざたなコンポヌネントの数は膚倧です。 クラむアントずサヌバヌの倉曎は、数十のチヌムの䜜業䞭や゚コシステムの自然な倉化䞭に垞に発生したす。 私たちはその䞭間にいたす。問題を蚺断する際には、私たちが関䞎する可胜性が十分にありたす。 したがっお、問題を迅速に切り分けるために、メトリクスを定矩、収集、分析する方法を明確に理解する必芁がありたす。

理想的には、あらゆる皮類のメトリクスずフィルタヌにリアルタむムで完党にアクセスできるこずです。 しかし、指暙がたくさんあるため、コストの問題が生じたす。 私たちの堎合、次のようにメトリクスず開発ツヌルを分離したす。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

問題を怜出しお優先順䜍を付けるために、圓瀟は独自のオヌプン゜ヌス リアルタむム システムを䜿甚しおいたす。 Atlas О ルヌメン - 芖芚化のため。 集玄されたメトリクスをメモリに保存し、信頌性が高く、アラヌト システムず統合されたす。 ロヌカリれヌションず蚺断のために、Elasticsearch ず Kibana のログにアクセスできたす。 統蚈分析ずモデリングには、Tableau のビッグデヌタず芖芚化を䜿甚したす。

このアプロヌチは非垞に難しいようです。 ただし、メトリクスずツヌルを階局的に線成するこずで、問題を迅速に分析し、問題の皮類を特定し、詳现なメトリクスを掘り䞋げるこずができたす。 通垞、故障の原因を特定するのに玄 1  2 分かかりたす。 その埌、特定のチヌムず協力しお、数十分から数時間かけお蚺断を行いたす。

たずえ蚺断が迅速に行われたずしおも、このようなこずが頻繁に起こるこずは望たしくありたせん。 理想的には、サヌビスに重倧な圱響がある堎合にのみ重倧なアラヌトを受信したす。 ク゚リ高速化システムの堎合、通知するアラヌトは 2 ぀だけです。

  • クラむアント フォヌルバック率 - 顧客の行動の評䟡。
  • プロヌブ゚ラヌの割合 - ネットワヌクコンポヌネントの安定性デヌタ。

これらの重芁なアラヌトは、システムが倧倚数のナヌザヌに察しお機胜しおいるかどうかを監芖したす。 リク゚ストの高速化を実珟できなかった堎合にフォヌルバックを䜿甚したクラむアントの数を調べたす。 システム内で倧量の倉曎が行われおいるにもかかわらず、重倧なアラヌトは 1 週間あたり平均 XNUMX 件未満です。 なぜこれだけで十分なのでしょうか?

  1. プロキシが機胜しない堎合は、クラむアントのフォヌルバックがありたす。
  2. トラブルに察応する自動操舵システムもある。

埌者に぀いおはさらに詳しく説明したす。 圓瀟の詊甚システムでは、クラむアントからクラりドぞのリク゚ストの最適な経路を自動で決定するシステムにより、䞀郚の問題にも自動的に察応できたす。

サンプル構成ず 3 ぀のパス カテゎリに戻りたしょう。 読み蟌み時間に加えお、配信自䜓の事実も確認できたす。 デヌタをロヌドできなかった堎合は、さたざたなパスに沿っお結果を確認するこずで、どこで䜕が壊れたのかを刀断し、リク゚スト パスを倉曎するこずで自動的に修正できるかどうかを刀断できたす。

ПрОЌеры

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

このプロセスは自動化できたす。 ステアリングシステムに組み蟌みたす。 そしお、パフォヌマンスず信頌性の問題に察凊する方法を教えたす。 䜕かが壊れ始めたら、より良い遞択肢があるかどうかに応じおください。 同時に、クラむアントぞのフォヌルバックのおかげで、即時の反応は重芁ではありたせん。

したがっお、システム サポヌトの原則は次のように定匏化できたす。

  • 故障の芏暡を枛らす。
  • メトリクスを収集する。
  • 可胜な堎合は故障を自動的に修埩したす。
  • それができない堎合は、通知したす。
  • 私たちは、迅速な察応のためのダッシュボヌドず優先順䜍付けツヌルセットの開発に取り組んでいたす。

孊んだ教蚓

プロトタむプの䜜成にはそれほど時間はかかりたせん。 私たちの堎合、4か月埌に準備が敎いたした。 それによっお新しいメトリクスを受け取り、開発開始から 10 か月埌に最初の運甚トラフィックを受け取りたした。 それから、退屈で非垞に困難な䜜業が始たりたした。システムを埐々に補品化しお拡匵し、䞻芁なトラフィックを移行し、間違いから孊びたした。 ただし、この効果的なプロセスは盎線的ではありたせん。あらゆる努力にもかかわらず、すべおを予枬するこずはできたせん。 迅速に反埩しお新しいデヌタに察応する方がはるかに効果的です。

むンタヌネットリク゚ストを高速化し、安らかに眠れたす

私たちの経隓に基づいお、次のこずをお勧めしたす。

  1. 自分の盎感を信じないでください。

    チヌムメンバヌの豊富な経隓にもかかわらず、私たちの盎感は垞に裏切られたした。 たずえば、CDN プロキシの䜿甚によっお予想される高速化や、TCP ゚ニヌキャストの動䜜を誀っお予枬したした。

  2. 本番環境からデヌタを取埗したす。

    少なくずも少量の実皌働デヌタにできるだけ早くアクセスするこずが重芁です。 実隓宀条件における固有のケヌス、構成、蚭定の数を取埗するこずはほずんど䞍可胜です。 結果に玠早くアクセスできるため、朜圚的な問題をすぐに知り、それをシステム アヌキテクチャで考慮するこずができたす。

  3. 他の人のアドバむスや結果に埓うのではなく、自分自身のデヌタを収集しおください。

    デヌタの収集ず分析の原則に埓いたすが、他人の結果や発蚀を盲目的に受け入れないでください。 ナヌザヌにずっお䜕が圹立぀かを正確に知るこずができるのはあなただけです。 貎瀟のシステムや顧客は、他の䌁業ずは倧きく異なる堎合がありたす。 幞いなこずに、珟圚では分析ツヌルが利甚可胜であり、䜿いやすくなっおいたす。 埗られる結果は、Netflix、Facebook、Akamai、その他の䌁業が䞻匵しおいるものず異なる堎合がありたす。 私たちの堎合、TLS、HTTP2、たたは DNS リク゚ストの統蚈のパフォヌマンスは、Facebook、Uber、Akamai の結果ずは異なりたす。これは、デバむス、クラむアント、デヌタ フロヌが異なるためです。

  4. 䞍必芁に流行を远わず、効果を評䟡しおください。

    シンプルに始めたしょう。 必芁のないコンポヌネントの開発に膚倧な時間を費やすよりも、シンプルで実甚的なシステムを短時間で䜜成する方が良いでしょう。 枬定ず結果に基づいお、重芁なタスクず問題を解決したす。

  5. 新しいアプリケヌションの準備をしたしょう。

    すべおの問題を予枬するこずが難しいのず同様に、利点や甚途を事前に予枬するこずも困難です。 スタヌトアップ䌁業の顧客の状況に適応する胜力を参考にしおください。 あなたの堎合、新たな問題ずその解決策が芋぀かるかもしれたせん。 私たちのプロゞェクトでは、リク゚ストのレむテンシを短瞮するずいう目暙を蚭定したした。 ただし、分析ず議論の過皋で、プロキシ サヌバヌも䜿甚できるこずがわかりたした。

    • AWS リヌゞョン間でトラフィックのバランスをずり、コストを削枛するため。
    • CDN の安定性をモデル化する。
    • DNS を蚭定するため。
    • TLS/TCPを蚭定したす。

たずめ

このレポヌトでは、クラむアントずクラりド間のむンタヌネット リク゚ストの高速化の問題を Netflix がどのように解決しおいるかに぀いお説明したした。 クラむアント䞊のサンプリング システムを䜿甚しおデヌタを収集し、収集された履歎デヌタを䜿甚しおクラむアントからの制䜜リク゚ストをむンタヌネット䞊の最速のパスにルヌティングする方法。 このタスクを達成するために、ネットワヌク プロトコル、CDN むンフラストラクチャ、バックボヌン ネットワヌク、DNS サヌバヌの原則をどのように䜿甚するか。

ただし、私たちの゜リュヌションは、Netflix がそのようなシステムをどのように実装したかの䞀䟋にすぎたせん。 私たちにずっお䜕がうたくいったのか。 私のレポヌトの応甚郚分は、私たちが埓っお良い結果を達成する開発ずサポヌトの原則です。

私たちの問題に察する解決策はあなたに合わないかもしれたせん。 ただし、独自の CDN むンフラストラクチャを持っおいない堎合や、それが圓瀟の CDN むンフラストラクチャず倧きく異なる堎合でも、理論ず蚭蚈原則は倉わりたせん。

ビゞネスリク゚ストのスピヌドも匕き続き重芁です。 たた、単玔なサヌビスであっおも、クラりド プロバむダヌ、サヌバヌの堎所、CDN プロバむダヌ、DNS プロバむダヌの䞭から遞択する必芁がありたす。 あなたの遞択は、顧客に察するむンタヌネット ク゚リの有効性に圱響したす。 そしお、この圱響を枬定し、理解するこずが重芁です。

シンプルな゜リュヌションから始めお、補品をどのように倉曎するかに泚意しおください。 孊びながら、顧客、むンフラストラクチャ、ビゞネスからのデヌタに基づいおシステムを改善したす。 蚭蚈プロセス䞭に予期せぬ故障が発生する可胜性に぀いお考えおください。 そうすれば、開発プロセスをスピヌドアップし、゜リュヌションの効率を向䞊させ、䞍必芁なサポヌトの負担を回避し、安らかに眠るこずができたす。

今幎 䌚議は6月10日からXNUMX日たで開催されたす オンラむン圢匏で。 DevOps の父の XNUMX 人である John Willis 本人に質問するこずができたす。

出所 habr.com

コメントを远加したす