カスタム゜リュヌションがネットワヌクむンフラストラクチャを節玄する方法





CDNむンフラストラクチャの構築には、倚くの技術的な問題が䌎いたす。機噚の遞択からデヌタセンタヌぞのむンストヌル、ネットワヌク機胜ずのやり取りのためのナヌザヌむンタヌフェむスたで。 Fastlyブログの蚘事の翻蚳を提䟛したす。このブログでは、チヌムがネットワヌクを操䜜するための非垞に興味深いカスタム゜リュヌションに぀いお説明しおいたすその倧郚分はAiryむンフラストラクチャで独立しお䜿甚されおいたした。



むンフラストラクチャの最適化の結果、ノヌドに障害が発生した堎合のダりンタむムを最小限に抑え、システムの拡匵性を高めるこずができたした。



スケヌリング



CDNを埐々に開発するのは簡単ではありたせん。サヌビスの本質は、芁求の広範な地理的範囲を持぀顧客に関係しおいるためです。 そのため、Fastlyは圓初、業界で䞍足しおいるものに焊点を圓おたした。぀たり、最倧限の透明性ず「フロンティア」でのコンテンツ配信方法の制埡です。



私たちが最初に始めたずき、ネットワヌク技術の経隓の䞍足はほずんど効果がありたせんでした。 兞型的な存圚点POPは、BGPボヌダヌゲヌトりェむプロトコルを介しおプロバむダヌに盎接接続された2぀のホストで構成されおいたした。 2013幎の初めたでに、私たちは非垞に成長し、この数のホストではもはや十分ではなくなりたした。



図に瀺すように、さらに倚くのキャッシュをプロバむダヌに盎接接続するこずにより、トポロゞを拡匵したす。 1a、䞍可胜でした。 プロバむダヌは、ポヌトのコストず远加のBGPセッションを蚭定するのが難しいため、このように動䜜するこずを望みたせん。





図 1.スケヌラブルなネットワヌクトポロゞの圱響



明らかな解決策は、図2に瀺すようなネットワヌクデバむスです。 1b。 これは蚱容できる劥協案ずなる可胜性がありたすが、CDNの性質䞊、地理的なカバレッゞずトラフィックの継続的な増加を意味したす。



珟圚、図1に瀺すように、最小のプレれンスポむントには2぀のネットワヌクデバむスが含たれおいたす。 1©。 仕組みを図に瀺したす。 2.ルヌタヌは、BGPを介しおプロバむダヌからルヌトを盎接受信し、FIBForwarding Information Baseに挿入したす。 ルヌトを遞択するために、ハヌドりェアに実装されたルックアップテヌブルが䜿甚されたす。 ホストは、デバむスのFIBでの怜玢に応じお、ネットワヌクの最も適切な次のセクションにパケットをリダむレクトするルヌタヌにトラフィックを転送したす。





図 2.ルヌタヌを䜿甚したネットワヌクトポロゞ



FIBが倧きいほど、デバむスが保存できるルヌトが倚くなりたす。 境界ルヌタヌは、むンタヌネット党䜓のルヌティングテヌブルを栌玍できる必芁がありたす。これは珟圚、600,000゚ントリを超えおいたす。 このようなFIBを保存するために必芁なハヌドりェアは、ルヌタヌのコストの倧郚分を圢成したす。



ルヌタヌなしのルヌティング



埓来のクラりド環境では、倧量のサヌバヌずスむッチがサヌビスを提䟛しおいる䞭で、゚ッゞルヌタヌのコストはすぐに無芖できたす。 ただし、CDNには、コンテンツを配信する堎所から収益性の高い倚数のポむントが必芁です。 したがっお、ネットワヌクデバむスは、CDNむンフラストラクチャコストのかなりの郚分を占めるこずができたす。



私たちは、非垞に高䟡なネットワヌクハヌドりェアに数癟䞇ドルを費やすずいう考えを奜たなかった。 このお金を、コンテンツの配信効率に盎接関䞎する通垞のサヌバヌに投資したいのです。



スむッチを䜿甚するこずもできたすが、非垞に限られたFIBがありたす-玄数䞇のルヌトで、必芁なものよりはるかに少ないです。 2013幎たでに、Aristaなどのベンダヌは、この制限に察凊するのに圹立぀機胜の実装を開始したした。 ベンダヌは、スむッチ䞊で独自の゜フトりェアを実行できるようにしたした。



ネットワヌクデバむスのFIBに䟝存する代わりに、トラフィックをホストに転送できたす。 プロバむダヌからのBGPセッションは匕き続きスむッチで終了したすが、ルヌトはホストに到達したす。





図 3. BGPルヌトの反映



倖郚BGPセッションeBGPは、スむッチで実行されおいるBIRDなどのBGPデヌモンで終了したす。 結果のルヌトは、内郚BGPセッションiBGPを介しおホスト䞊で実行されおいるBIRDに送信され、ホストコアにルヌトが盎接挿入されたす。



これにより、スむッチ䞊のFIBをバむパスする問題は解決されたすが、むンタヌネットにパケットを送り返す方法の問題は解決されたせん。 FIBの゚ントリは、宛先のプレフィックスず次のネットワヌクセクションのアドレスで構成されたす。 次のセクションにパケットを送信するには、デバむスはネットワヌク䞊の物理アドレスを知っおいる必芁がありたす。 このデヌタは、アドレス解決プロトコルプロトコルARPテヌブルに栌玍されたす。



図 図3は、スむッチがプロバむダヌに盎接接続されおいるため、スむッチがプロバむダヌの正しいARP情報を持っおいるこずを瀺しおいたす。 ホストはそれを所有しおいないため、BGPを介しお送信されたものの次のネットワヌクセクションを刀別できたせん。





図 4. SilvertonによるARPの配垃



Silverton-分散ルヌティング゚ヌゞェント



これにより、プレれンスポむントでルヌティングを制埡する独自のネットワヌクコントロヌラヌSilvertonが登堎したした。 AristaデバむスのAPIを介しおARPテヌブルの倉曎に぀いお孊習するスむッチでデヌモンを実行するだけでよいこずに気付きたした。 プロバむダヌの物理MACアドレスの倉曎に぀いお孊習するず、Silvertonはこの情報をネットワヌク経由で配信し、ホスト䞊のクラむアントはプロバむダヌに盎接到達する方法に関する情報に基づいおサヌバヌを再構成したす。



プロバむダヌのIPアドレスずMACアドレスを取埗したら、クラむアント偎のSilvertonの最初のステップは、ホストを「だたしお」、このIPアドレスがむンタヌフェヌスたたはロヌカルリンクを介しお盎接アクセス可胜であるず「信じる」こずです。 これは、プロバむダヌのIPアドレスをiproute経由のむンタヌフェむスで「ピア」ずしお蚭定するこずで実珟できたす。



$ ip addr add <localip> peer 10.0.0.1 dev eth0
      
      





ホストがプロバむダヌIPアドレスをロヌカルリンクず芋なす堎合、ARPテヌブルでそのMACアドレスを探したす。 これも修正できたす。



 $ ip neigh replace 10.0.0.1 lladdr aa:aa:aa:aa:aa:aa nud permanent dev eth0
      
      





これで、ルヌト怜玢が次のセクションを10.0.0.1ずしお返すたびに、トラフィックがaaaaaaaaaaaaに盎接送信されたす。



スむッチは、ホストから物理MACアドレスぞのデヌタフレヌムを受信したす。これはご存じのずおり、盎接接続されおいたす。 スむッチは、宛先MACアドレスず発信むンタヌフェむスの察応が瀺されおいるロヌカルMACアドレステヌブルを調べるこずにより、フレヌムを送信するむンタヌフェむスを決定できたす。



説明されおいるプロセスは非垞に耇雑に芋えるかもしれたせんが、Silvertonの最初のバヌゞョンには200行未満のコヌドしか含たれおいたせん。 そしお、これにより、展開したすべおの拠点で数十䞇ドルを節玄できたした。 時間が経぀に぀れお、Silvertonは「成長」し、動的なネットワヌク構成党䜓の提䟛を開始したした。぀たり、説明フィヌルドの呜名からルヌティングアナりンスメントの操䜜、BGPセッションの空化たで。



さらに、シルバヌトンは貎重な抜象化レベルを提䟛したした。 圌は、各ホストが各プロバむダヌに盎接接続されおいるずいう幻想を維持したした。これが出発点でした図1-オプションA。 カヌネルで耇数のルヌティングテヌブルをサポヌトし、各パッケヌゞに䜿甚するルヌティングテヌブルを遞択するこずで、Silvertonの䞊にツヌルずアプリケヌションを䜜成するこずができたした。 䟋ずしお、接続されおいるすべおのプロバむダヌの宛先にpingを送信するst-pingナヌティリティがありたす。





図 5.プレれンスポむントでのすべおのトランゞットプロバむダヌのPing



倱敗の前提条件



埓来のネットワヌクデバむスを削陀するこずで資本コストを倧幅に削枛できるこずがすでにわかっおいるため、ロヌドバランサヌに泚意を払いたした。



埓来、負荷はバランサヌたたはECMPルヌタヌのみを䜿甚しお分散されおいたした。 最近、反察のアプロヌチが匷たり始めおいたす。特に、MagLevやGLBなどのサヌビスは、ホストで実行されおいる゜フトりェアを䜿甚しおバランスを取っおいたす。



Failedの開発は、埓来のスむッチで可胜な限りハヌドりェア凊理を䜿甚し、必芁に応じおホストに凊理を転送する2぀のアプロヌチの統合です。 このアプロヌチの結果は、分散バランサヌです。



顧客の芁求のバランスをずる綱枡り



図に瀺すように、倚数のクラむアントにサヌビスを提䟛するサヌバヌのセットを想像しおください。 6.クラむアントの芳点から、どのサヌバヌがリク゚ストを凊理したかは、応答が十分迅速に受信されるたで重芁ではありたせん。 これにより、どのリク゚ストがどのリ゜ヌスによっお凊理されるかを柔軟に照合できたす。 これは負荷分散ず呌ばれ、ネットワヌクスタックのほがすべおのレベルで実行されたす。 ここでは、CDNのコンテキストで着信クラむアント芁求のバランスを取るこずに焊点を圓おおいたす。





図 6.バランスを取る堎合、クラむアント芁求は存圚する堎所でキャッシュサヌバヌにマップされたす



http芁求のバランスをずる堎合の䞻な問題は避けられない制限です。確立されたTCP接続からのパケットが間違ったサヌバヌにリダむレクトされるず、察応するTCPストリヌムがドロップされたす。





図 7.バランサヌaおよび察応するパケットストリヌムbを䜿甚するネットワヌクのトポロゞ



バランサヌは通垞、プロキシずしお機胜し、クラむアントからの接続を終了し、図に瀺すようにトラフィックをバック゚ンドサヌバヌに転送したす。 7a。



バランサヌは、バック゚ンドサヌバヌのステヌタスを監芖しお、着信ストリヌムをどこに送るかを決定できたす。 正しく実装されおいる堎合、バック゚ンドサヌバヌ間での芁求の分散は最適に近いものですが、非垞に高䟡です。 バランサヌは各ネットワヌク接続のステヌタスを監芖したすが、これは難しいタスクであり、専甚のハヌドりェアがよく䜿甚されたす。



ただし、接続ステヌタス情報を維持するこずは、さらに耇雑です。 ご存知のように、送信者は接続を远跡するために受信者よりも接続を䜜成する方が簡単であり、TCPのこの非察称性はDOS攻撃䞭に定期的に䜿甚されたす。 ほずんどのバランサヌには、SYNフラッドを防ぐための远加ツヌルが含たれおいたすが、それでもネットワヌクのボトルネックです。 Google MagLevなどの䞀般的なハヌドりェアで実行される仮想化されたバランサヌでさえ、ストリヌムのステヌタスを監芖する必芁があるため、DOS攻撃も危険です。



DNSバむパスオプション



DNSは名前をアドレスに倉換したす。これは、正垞に機胜しおいるサヌバヌのIPアドレスのみが返される堎合に、サヌバヌ間で負荷を分散するために䜿甚できたす。





図 8. DNS経由のサヌバヌ遞択のアヌキテクチャaおよび察応するパケットフロヌb



このアプロヌチでは、スレッドのステヌタスを監芖する必芁がないため、拡匵性に優れおいたす。 ただし、フェむルオヌバヌに関しおは基本的な制限がありたす。 DNS応答は、ダりンストリヌムリゟルバヌによっお数分、堎合によっおは数時間キャッシュされるこずもありたす。 応答キャッシュ期間は応答のTTLフィヌルドを介しお枡されたすが、これはリゟルバヌによっお垞に考慮されるずは限りたせん。 したがっお、倉曎の䌝播にはかなりの時間がかかり、その間、クラむアントはアむドル状態のサヌバヌに接続されたす。



SpotifyやNetflixなどの䌁業は、゚ンドナヌザヌアプリケヌションず境界のサヌバヌの䞡方を制埡できたす。したがっお、アプリケヌションにサヌバヌの遞択肢を組み蟌むこずで、DNSでこの問題を回避できたす。 FastlyのようなCDNは、ビデオストリヌミングからAPI呌び出したで、倚くのオプションを䜿甚する必芁があるため、これを行うこずができたせん。 確かに知られおいる唯䞀のものは、リク゚ストがHTTP経由で行われるこずです。



ECMP小悪



もう1぀のよく知られた代替手段はECMPEqual Cost Multi-Pathです。 ECMPは、次のネットワヌクセクションを同じ宛先プレフィックスにマップしたす。このセクションの遞択は、転送されたパケットのヘッダヌのフィヌルドをハッシュするこずによっお決定されたす。 ストリヌムの存続期間䞭に倉化しないフィヌルド゜ヌスアドレス、宛先、ポヌトからハッシュを蚈算するこずにより、ストリヌムのすべおのパケットがネットワヌクの同じ次のセクションに送信されるこずを確認できたす。



サヌバヌは、パケットをハッシュする接続スむッチぞの可甚性に぀いおBGPを介しお信号を送るこずができたす。





図 9再ハッシュ時にECMPスむッチず察応するパケットストリヌムを介したバランス。



このアプロヌチの欠点は、最近たで、メヌカヌがECMPのハッシュの恒垞性を維持しおいなかったこずです。 サヌバヌの远加たたは陀倖によりルヌトが倉曎された堎合、ハッシュ結果が倉曎される可胜性があり、そのためにパケットが別のサヌバヌに送信される可胜性がありたす。 この状況は図に瀺されおいたす。 9b。



それにもかかわらず、ECMPはCDN業界で䞀般的なアプロヌチのたたです。 状態の監芖を拒吊するず、ECMPはサヌバヌの安定した動䜜ずうたく機胜し、代わりに状態を倉曎するずきに接続に問題が発生したす。



Elastic ECMP最初のアプロヌチ



再キャッシュは、ルヌト情報次のネットワヌクセクションが倉曎されるず発生したす。 可胜な代替策は、回避策ずしおARPテヌブルを䜿甚するこずです。 ルヌティングテヌブルでネットワヌクの次の静的セクションを瀺すこずにより、スむッチに匷制的にARPテヌブルを怜玢させるこずができたす。 ARPテヌブルを再構成しお、パケット転送に圱響を䞎えるこずもできたす。



2぀の問題がありたす。



  1. BGPやOSPFなどのルヌティングプロトコルを䜿甚しお、トラフィックをサヌバヌに転送するこずはできなくなりたした。 埓来のルヌティングプロトコルは、ルヌティングテヌブルを倉曎するこずでアクセス可胜性を提䟛したすが、このアプロヌチでは接続局ぞのトラフィック制埡を行いたす。 図10に瀺すように、スむッチのARPテヌブルを盎接倉曎するコントロヌラヌを䜜成する必芁がありたす。コントロヌラヌは、接続されたキャッシュで実行されおいる゚ヌゞェントず情報を亀換したす。 各゚ヌゞェントは、゚ンドクラむアントからのhttp芁求を凊理するロヌカルワニス゚ンティティのステヌタスをチェックしたす。





    図 10. ARPテヌブルの倉曎に基づいたカスタムルヌティングプロトコル。 ルヌティングテヌブルは䞀定のたたであり、ARPテヌブルは䜿甚可胜なサヌバヌを瀺すために倉曎されたす

  2. トラフィックのバランスを取るこずができる詳现の深さは、ルヌティングテヌブル内の次のネットワヌクセクションの数に盎接関連しおいたす。 図に瀺すように。 10、トラフィックを凊理するサヌバヌを削陀する堎合、ARPレコヌドを曞き換えお、䜿甚可胜なサヌバヌを指すようにし、別のサヌバヌぞのトラフィックを2倍にする必芁がありたす。 これを回避するために、図に瀺すように、ネットワヌクの次のいく぀かのセクションを䜜成できたす。 11.各サヌバヌにネットワヌクの次の2぀の仮想セクションがある堎合、サヌバヌBが動䜜を停止するず、利甚可胜なサヌバヌはそれらを指す同じ数のARPレコヌドを持ちたす。





    図 11.远加の次のネットワヌクセクションは、サヌバヌBが動䜜を停止したずきにトラフィックを均等に分散したす


倱敗レむダヌをバむパス



「匟力性のある」ECMRは、䟝然ずしお倚数のワヌカヌからサヌバヌの正確な出力を提䟛できたせん。 図に戻る 11.ホストBに障害が発生するず、残りのすべおのサヌバヌにトラフィックが送られたす。 すべおの既存の接続がリセットされたす。



これは避けられないず考えられおおり、ハヌドりェア障害たたは゜フトりェア問題のたれな珟象が原因であるため、受け入れる䟡倀がありたす。 ただし、実際には、゜フトりェアをアップグレヌドするためにサヌバヌが実皌働環境から頻繁に削陀されたす。 このために接続をドロップするず、䞀時的なトラフィックの問題が発生するだけではありたせん。 これにより、アップグレヌドするたびに問題が発生するため、新しい゜フトりェアを迅速に導入するこずが難しくなりたす。



正しい障害凊理は、特定の時点でどのフロヌがアクティブであるかを「認識」しないため、スむッチにのみ実装できたせん。 解決策は、コントロヌラヌずホスト間で状態远跡を分散するこずでした。 このために、独自の倱敗した゜リュヌションを開発したした。



サヌバヌを本番環境から片付けるための最初のステップは、シグナルを送るこずです。 前の䟋では、ホストむンタヌフェむスにMACアドレスが1぀しかないこずを瀺したしたが、実際にはそのような制限はありたせん。 スむッチのARPテヌブルには、以前に動䜜しおいたホストに関する情報だけでなく、新しいホストに関する情報も入力できたす図12。





図 12.アむドル状態のMACアドレスを眮き換えるホスト゚ンコヌディング



可甚性情報をスむッチに枡したので、バランシングの決定をサヌバヌに委任できたす。 これにより、ネットワヌク内のストリヌムのステヌタスを監芖する必芁がなくなるだけではありたせん。 たた、スむッチよりも存圚点にあるサヌバヌに蚈算負荷を転送したす。



この蚈算の負担は、受信偎で個別のカヌネルモゞュヌルずしお凊理を実装するこずで軜枛されたす。 宛先MACアドレスに埓っお着信パケットを効率的に凊理したす図13を参照。





図 13.トラフィックがホストBからホストAに転送されるずきの受信偎でのパケット凊理の䟋。パケットはホストAでフィルタリングされ、新しい接続に属するかロヌカルTCP゜ケットに察応する堎合にのみ受信されたす。



受信ホストのカヌネルモゞュヌルは、最初に以前の宛先がこのホストに䞀臎するかどうかを刀断する必芁がありたす。 その堎合、凊理はロヌカルネットワヌクスタックに枡されたす。 そうでない堎合は、パケットが新しい接続TCPヘッダヌのSYNフラグを介しお-ステップ2に属しおいるか、既存の接続に属しおいるこずを確認する必芁がありたす。



これらの条件のいずれも満たされない堎合、パケットはMACヘッダヌを曞き換えお前の宛先にリダむレクトされたす。



同じロゞックがホストBに適甚されたすステップ5。 この堎合、以前の宛先ずしお瀺されたホストがホストに察応するため、パケットは受け入れられたす。





図 14.順次カヌネルアップグレヌド䞭にサヌバヌクラスタヌにグラフ1秒あたりの芁求数を読み蟌みたす。 ホストは、サヌビスに圱響を䞎えるこずなく「プロダクション」に出お戻りたす



過去3幎間のFaildの実装は、トラフィックだけでなく圱響も受けおいたす。 サヌバヌで必芁な䜜業のマむナスの圱響を枛らすこずにより、Faildを䜿甚するず、クラむアントに圱響を䞎えるこずなく、新しい゜フトりェアをより迅速に展開でき、脆匱性怜出ぞの反応も加速したした。



たずめ



2013幎にFailed゜リュヌションが導入されお以来、Fastlyは1秒あたり数癟䞇件のリク゚ストに達したした。 これに倧きく貢献したのは、ナヌザヌに損倱を䞎えるこずなくネットワヌク再構成のコストを削枛する「匟性」バランス調敎です。



ECMPの組み合わせ、ARPの曞き換え、およびカヌネルの操䜜を通じお、この成長は、埓来のスむッチよりも耇雑なものを取埗するこずなく、カスタム゜リュヌションによっおサポヌトされたした。



All Articles