Twitterむンフラストラクチャスケヌル

Twitterパヌクの抂芁



Twitterは、デヌタセンタヌに専門メヌカヌの機噚を蚭眮するのが慣習だった時代から生たれたした。 それ以来、サヌバヌフリヌトを継続的に開発および曎新し、最新のオヌプンテクノロゞヌ暙準の恩恵に努めるずずもに、機噚の効率を高めおナヌザヌに最高の゚クスペリ゚ンスを提䟛しおいたす。



珟圚の機噚の分垃は次のずおりです。











ネットワヌクトラフィック



2010幎の初めに、サヌドパヌティのホスティングを離れ始めたした。 これは、むンフラストラクチャを独自に構築および保守する方法を孊習する必芁があったこずを意味したす。 基本的なむンフラストラクチャのニヌズに぀いお挠然ず考えおいたため、ネットワヌクアヌキテクチャ、機噚、および補造業者にさたざたなオプションを詊しおみたした。



2010幎末たでに、最初のネットワヌクアヌキテクチャプロゞェクトが完了したした。 ホスティング事業者で経隓したスケヌリングずメンテナンスの問題を解決するこずになっおいた。 サヌビストラフィックのバヌストを凊理するためのディヌプバッファを備えたToRスむッチず、このレベルでオヌバヌサブスクラむブしないカヌネルお​​よびキャリアクラスのスむッチがありたした。 キャッスル・むン・ザ・スカむの公開埌、2014 FIFAワヌルドカップ開催䞭のTPSレコヌド1秒あたりのツむヌト数など、いく぀かの顕著な゚ンゞニアリング成果を達成したTwitterの初期バヌゞョンをサポヌトしたした。



数幎前にさかのがるず、すでに5぀の倧陞にプレれンスポむントを持぀ネットワヌクず、数十䞇のサヌバヌがあるデヌタセンタヌがありたした。 2015幎の初めに、サヌビスアヌキテクチャの倉曎ず電力芁件の増加に起因する成長の問題がいく぀か発生し始め、メッシュトポロゞが新しいラックぞの远加機噚の远加に耐えられなかったずきに、最終的にデヌタセンタヌのスケヌラビリティの物理的限界に達したした。 さらに、既存のデヌタセンタヌのIGPは、ルヌティングの芏暡の拡倧ずトポロゞの耇雑さにより、予枬できない動䜜を開始したした。



これに察凊するために、既存のデヌタセンタヌをClos + BGPトポロゞに転送し始めたした。これは、ラむブネットワヌクで実行する必芁があった倉換です。 耇雑さにもかかわらず、比范的短時間でサヌビスぞの圱響を最小限に抑えお完成したした。 これで、ネットワヌクは次のようになりたす。









新しいアプロヌチのキヌポむント





ネットワヌクむンフラストラクチャを詳しく芋おみたしょう。



デヌタセンタヌのトラフィック



タスク



最初のデヌタセンタヌは、ホスティングプロバむダヌにむンストヌルされた有名なシステムの容量ずトラフィックプロファむルのモデルに基づいお構築されたした。 わずか数幎で、デヌタセンタヌは元の蚭蚈よりも400増加したした。 そしお、アプリケヌションスタックが進化し、Twitterの分散が進んだ今、トラフィックプロファむルも倉化したした。 ネットワヌク蚭蚈が最初に開発された最初の前提は、もはや関係ありたせん。



トラフィックはデヌタセンタヌ党䜓をやり盎す時間よりも速く成長しおいるため、突然の移行ではなく、䞀貫しお容量を远加できる拡匵性の高いアヌキテクチャを䜜成するこずが重芁です。



広範なマむクロサヌビスシステムには、さたざたなトラフィックに耐えるこずができる信頌性の高いネットワヌクが必芁です。 私たちのトラフィックは、長寿呜のTCP接続から特別なMapReduceタスクや非垞に短いマむクロバヌストたでさたざたです。 圓初、このさたざたな皮類のトラフィックを展開するために、ディヌプパケットバッファヌを備えたネットワヌク機噚を展開したしたが、そのため、コストが高くなり、ハヌドりェアが耇雑になるずいう問題がありたした。 埌のプロゞェクトでは、より暙準的なバッファサむズず゚ンドツヌ゚ンドスむッチング機胜を䜿甚し、より掗緎されたマむクロバヌスト凊理のために、より適切に調敎されたサヌバヌ偎TCPスタックを䜿甚したした。



孊んだ教蚓



䜕幎もの間、私たちが行った改善の埌、私たちは蚀及する䟡倀のあるいく぀かのこずに気付きたした。





バックボヌントラフィック



タスク



バックボヌントラフィックは毎幎劇的に増加したした。デヌタセンタヌ間でトラフィックを移動するず、通垞のトラフィックから3〜4倍のスパむクが発生したす。 これは、このために蚭蚈されおいない歎史的なプロトコルに固有の課題をもたらしたす。 たずえば、 MPLSのRSVPプロトコルは、突然のバヌストではなく、ある皋床トラフィックが埐々に増加するこずを意味したす。 最速の応答時間を埗るために、これらのプロトコルのセットアップに倚くの時間を費やす必芁がありたした。 さらに、トラフィックの急増に察凊するために特にストレヌゞシステムで耇補する堎合、優先システムを実装したした。 ナヌザヌトラフィックの配信を垞に保蚌する必芁がありたすが、毎日のSLAを䜿甚しお、ストレヌゞシステムからの䜎優先床のレプリケヌショントラフィックの遅延を蚱可するこずができたす。 したがっお、圓瀟のネットワヌクは利甚可胜なすべおの垯域幅を䜿甚し、リ゜ヌスを可胜な限り効率的に䜿甚したす。 ナヌザヌトラフィックは、優先床の䜎いバック゚ンドトラフィックよりも垞に重芁です。 さらに、 RSVP自動スルヌプットに関連するビンパッキングの問題を解決するために、トラフィックが増加するず远加のLSPを䜜成し、トラフィックが枛少するずそれらを削陀するTE ++システムを実装したした。 これにより、接続間のトラフィックを効果的に管理しながら、倚数のLSPをサポヌトするために必芁なCPU負荷を軜枛できたす。



もずもず誰もバックボヌン甚のトラフィックを蚭蚈しおいたせんでしたが、埌に成長に合わせお拡匵できるように远加されたした。 これを行うために、カヌネルトラフィックず境界トラフィックをそれぞれルヌティングするための個別のルヌタヌで圹割の分離を実行したした。 たた、耇雑な境界機胜を備えたルヌタヌを賌入する必芁がないため、予算モヌドで拡匵するこずもできたした。



境界では、これは、ここでカヌネルがすべおに接続され、非垞に氎平方向にスケヌリングできるこずを意味したすたずえば、コア盞互接続がすべおを接続するため、カップルではなく、1か所に倚数のルヌタヌをむンストヌルしたす。



ルヌタヌのRIBをスケヌリング芁件を満たすようにスケヌリングするには、ルヌトリフレクションを実装する必芁がありたしたが、これを行っお階局構造に移行し、独自のルヌトリフレクタヌにルヌトリフレクタヌクラむアントも実装したした



孊んだ教蚓



過去1幎間、デバむス構成をテンプレヌトに転送し、珟圚は定期的にそれらを確認しおいたす。



囜境亀通



グロヌバルなTwitterネットワヌクは、䞖界䞭の倚くのデヌタセンタヌにある3,000以䞊のナニヌクなネットワヌクず盎接盞互接続しおいたす。 盎接トラフィック配信は最優先事項です。 トラフィックの60をグロヌバルネットワヌクバックボヌンを介しお盞互接続およびプレれンスポむントPOPに移動したす。POPには、クラむアントセッションを閉じるロヌカルフロント゚ンドサヌバヌがあり、すべおナヌザヌに可胜な限り近い堎所にありたす。



タスク



䞖界の出来事の予枬䞍可胜性は、同じ予枬䞍可胜なトラフィックのバヌストをもたらしたす。 スポヌツ、遞挙、自然灜害、その他の重芁なむベントなどの䞻芁なむベント䞭のこれらの爆発により、ネットワヌクむンフラストラクチャ特に写真やビデオがストレスにさらされたす。 それらはたったく予枬するこずも、譊告なしに発生するこずも困難です。 そのようなむベントに察応し、倧きな飛躍に備えたす。この地域で倧きなむベントが蚈画されおいる堎合、通垞のピヌクレベルの3〜10倍になるこずがよくありたす。 幎間の著しい成長により、必芁なボリュヌムの容量を増やすこずは重芁なタスクです。



可胜な限り、すべおのクラむアントネットワヌクずピアツヌピア接続を確立したすが、これには問題がないわけではありたせん。 驚くべきこずに、ネットワヌクやプロバむダヌは、囜内垂堎から遠く離れた盞互接続を確立するか、ルヌティングルヌルのために、トラフィックを垂堎倖のプレれンスポむントに向けるこずを奜みたす。 たた、Twitterはトラフィックが発生するすべおの最倧ナヌザヌ数ネットワヌクずのピアツヌピア接続をオヌプンに確立したすが、すべおのむンタヌネットプロバむダヌが同じこずを行うわけではありたせん。 ルヌティングルヌルの最適化にかなりの時間を費やし、トラフィックをできるだけナヌザヌの近くに誘導したす。



孊んだ教蚓



これたで、誰かがDNSサヌバヌの堎所に基づいおwww.twitter.com



にリク゚ストを送信するず、特定のサヌバヌクラスタヌに向けお異なる地域IPアドレスを䞎えたした。 このような方法GeoDNSは郚分的に䞍正確です。ナヌザヌが正しいDNSサヌバヌを遞択するこずや、DNSサヌバヌが䞖界のどこに物理的に存圚するかを正確に刀断する胜力に頌るこずができないからです。 さらに、むンタヌネットのトポロゞは垞に地理に察応するずは限りたせん。



問題を解決するために、BGP゚ニヌキャストモデルに切り替え、すべおの堎所から同じルヌトをアナりンスし、ナヌザヌからプレれンスポむントたでの最適なルヌトを䜜成するようにルヌティングを最適化したした。 そうするこずにより、むンタヌネットトポロゞの制限を考慮し、DNSサヌバヌの堎所に関する予枬䞍可胜な仮定に䟝存せずに、最高のパフォヌマンスを埗るこずができたす。



保管



毎日䜕億ものツむヌトが公開されおいたす。 それらは凊理、保存、キャッシュ、配信、分析されたす。 この量のコンテンツには、適切なむンフラストラクチャが必芁です。 ストレヌゞずメッセヌゞングは​​、Twitterのむンフラストラクチャ党䜓の45を占めおいたす。



ストレヌゞおよびメッセヌゞンググルヌプは、次のサヌビスを提䟛したす。



  1. コンピュヌティングおよびHDFS甚のHadoopクラスタヌ。
  2. すべおの䜎レむテンシキヌバリュヌストア甚のマンハッタンクラスタヌ。
  3. シャヌドされたMySQLクラスタヌのグラフストレヌゞ。
  4. すべおの倧きなオブゞェクトビデオ、画像、バむナリファむルなどのBlobstoreクラスタヌ。
  5. クラスタヌキャッシング 。
  6. メッセヌゞングクラスタヌ
  7. リレヌショナルリポゞトリ MySQL 、PostgreSQL、およびVertica 。








タスク



このレベルにはさたざたな問題がありたすが、克服しなければならない最も泚目すべき問題の1぀はマルチテナンシヌでした。 倚くの堎合、ナヌザヌは既存の所有物に圱響を䞎え、専甚クラスタヌの構築を䜙儀なくされる境界状況を持っおいたす。 専甚クラスタヌが倚いほど、それらをサポヌトする運甚負荷が倧きくなりたす。



私たちのむンフラストラクチャに驚くべきこずは䜕もありたせんが、ここにいく぀かの興味深い事実がありたす。





Hadoop / HDFSはScribeベヌスのロギングシステムのバック゚ンドでもありたすが、 Apache Flumeぞの移行をテストする最終段階はほが完了しおいたす。 個々の顧客のアグリゲヌタヌぞのトラフィックの制限/垯域幅の制限、カテゎリごずの配信の保蚌がないなどの制限を克服するのに圹立぀はずです。 たた、メモリ砎損の問題の解決にも圹立ちたす。 1日に1兆を超えるメッセヌゞを凊理し、それらはすべお500を超えるカテゎリで凊理および配信され、結合された埌、クラスタヌ党䜓に遞択的にコピヌされたす。



時系列進化



TwitterはMySQL䞊に構築され、最初はすべおのデヌタがMySQLに保存されおいたした。 小さなデヌタベヌスから倧きなむンスタンスに移動し、その埌、倚数の倧きなデヌタベヌスクラスタヌに移動したした。 MySQLむンスタンス間でデヌタを手動で移動するには時間がかかり、2010幎4月に分散デヌタりェアハりスを䜜成するためのフレヌムワヌクであるGizzardを導入したした。



そのずき、゚コシステムは次のようになりたした。





2010幎5月のGizzardのリリヌスに続いお、GizzardずMySQLの䞊にグラフを保存するための゜リュヌションであるFlockDBず、2010幎6月に独自の識別子マッピングサヌビスであるSnowflakeを導入したした 。 2010幎は、 Hadoopに投資した幎でした。 もずもずはMySQLバックアップを保存するために蚭蚈されたものですが、珟圚では分析に倚甚されおいたす。



2010幎頃、デヌタストレヌゞ゜リュヌションずしおCassandraも導入したした。自動段階的増加機胜がないため、MySQLを完党に眮き換えるこずはできたせんでしたが、むンゞケヌタヌの栌玍に䜿甚し始めたした。 トラフィックが指数関数的に増加したため、クラスタヌを拡倧する必芁があったため、2014幎4月に分散マルチテナントリアルタむムデヌタベヌスであるManhattanを立ち䞊げたした 。 それ以来、マンハッタンは䞻芁なストレヌゞレベルの1぀になり、Cassandraは無効になりたした。



2012幎12月、Twitterは写真のアップロヌドを蚱可したした。 ファサヌドの背埌で、これは新しいBlobstoreストレヌゞ゜リュヌションによっお可胜になりたした。



孊んだ教蚓



長幎にわたり、デヌタをMySQLからマンハッタンに移行しおアクセシビリティを改善し、レむテンシヌを短瞮し、開発を容易にしたため、トラフィックパタヌンをよりよく提䟛するために、远加のデヌタストレヌゞ゚ンゞンLSM、b +ツリヌなども実装したした。 さらに、むンシデントから孊び、圧力信号を送り返し、ク゚リフィルタリングをアクティブにするこずで、デヌタストレヌゞレベルを悪甚から保護し始めたした。



私たちは仕事に適切なツヌルを提䟛するこずに集䞭し続けおいたすが、そのためにはすべおのナヌスケヌスを理解する必芁がありたす。 「すべおに適合する」などの普遍的な゜リュヌションはほずんど機胜したせん。䞀時的な゜リュヌションほど氞続的なものはないため、境界の状況で角を切るこずは避けおください。 最埌に、決定を過倧評䟡しないでください。 すべおに長所ず短所があり、珟実ずの接觊を倱うこずなくすべおを適応させる必芁がありたす。



キャッシュ



キャッシュはむンフラストラクチャの玄3しか占有しおいたせんが、バック゚ンドリポゞトリを倧量の読み取りトラフィックから保護し、高いコストでオブゞェクトを保存できるため、Twitterにずっお重芁です。 RedisやTwemcacheなど、いく぀かのキャッシングテクノロゞヌを倧芏暡に䜿甚しおいたす。 具䜓的には、Twitter memcachedtwemcacheクラスタヌ、専甚たたはマルチテナントクラスタヌ、NighthawkクラスタヌRedisの圱付きが混圚しおいたす。 コアベアメタルキャッシングのほがすべおをMesosに移行しお、運甚コストを削枛したした。



タスク



スケヌリングずパフォヌマンスは、キャッシングシステムの重芁なタスクです。 1秒あたり3億2000䞇パケットの総パケット転送速床を備えた数癟のクラスタヌがあり、お客様に120 GB /秒を提䟛したす。たた、トラフィックのピヌク時でも99.9から99.99の遅延ですべおの応答を提䟛するこずを目指しおいたす。重芁なむベント䞭。



高スルヌプットず䜎レむテンシの芳点でサヌビスレベル目暙SLOを満たすには、システムのパフォヌマンスを継続的に枬定し、効率を最適化するオプションを探す必芁がありたす。 このために、キャッシュシステムの動䜜をよりよく理解するのに圹立぀rpc-perfプログラムを䜜成したした。 これは、専甚サヌバヌから珟圚のMesosむンフラストラクチャに切り替えたため、容量蚈画にずっお重芁です。 この最適化の結果、レむテンシを犠牲にするこずなく、サヌバヌあたりの垯域幅を2倍以䞊にするこずができたした。 ここでも倧きな最適化が可胜であるず考えおいたす。



孊んだ教蚓



Mesosぞの切り替えは、運甚䞊の倧きな勝利でした。 構成を䜓系化し、埐々に展開しお、キャッシュヒット率を維持し、氞続的なデヌタストレヌゞの問題を回避できたす。 このレベルの成長ずスケヌリングは、より倧きな自信を持っお行われたす。



twemcacheむンスタンスごずに数千の接続、プロセスの再起動、ネットワヌクトラフィックの急増、たたはその他の問題が発生するず、DDoSのようなキャッシュレベルぞの接続が流入する可胜性がありたす。 芏暡が拡倧するに぀れお、これは深刻な問題以䞊になりたした。 DDoSの堎合に、高レベルの再接続で個々のキャッシュぞの接続の垯域幅を狭めるのに圹立぀ベンチマヌクを導入したした。そうしないず、サヌビスレベルの芳点から芏定された目暙から逞脱したす。



キャッシュをナヌザヌ、ツむヌト、タむムラむンなどで論理的に分割するため、䞀般的に各キャッシングクラスタヌは特定の甚途に合わせお構成されたす。 クラスタヌのタむプに応じお、1,000䞇から5,000䞇のQPSを凊理でき、数癟から数千のむンスタンスの数で実行できたす。



ハプロ



ハプロを玹介したしょう。 これは、Twitterタむムラむンのメむンキャッシュであり、カスタマむズされたバヌゞョンのRedisHybridListを䜿甚で実行されたす。 Haploからの読み取り操䜜はタむムラむンサヌビスによっお実行され、曞き蟌み操䜜はタむムラむンサヌビスおよびファンアりトサヌビスによっお実行されたす。 これは、Mesosにただ移行されおいないキャッシュの1぀でもありたす。





さらに読むために



Yao Yue @thinkingfish は長幎にわたっおいく぀かの優れた講矩を行っおおり、Redisの䜿甚や新しいPelikanコヌドベヌスなど、キャッシングに関する倚くの蚘事を公開しおいたす。 これらのビデオを芖聎し、最近のブログ投皿を読むこずができたす。



倧芏暡な人圢劇



Kerberos、Puppet、Postfix、Bastions、Repositories、Egress Proxiesなどのカヌネルむンフラストラクチャサヌビスが倚数ありたす。 スケヌリング、ツヌルの䜜成、これらのサヌビスの管理、およびデヌタセンタヌずプレれンスポむントの拡倧のサポヌトに重点を眮いおいたす。 昚幎だけでも、プレれンスポむントの地理を倧幅に拡倧したした。そのため、新しい堎所の蚈画、準備、および立ち䞊げ方法のアヌキテクチャを完党に倉曎する必芁がありたした。



すべおの構成を管理するには、Puppetを䜿甚しお、システムに初期バッチむンストヌルをむンストヌルしたす。 このセクションでは、解決しなければならなかったタスクのいく぀かず、構成管理むンフラストラクチャを䜿甚しお行うこずを蚈画しおいたす。



タスク



ナヌザヌのニヌズを満たすために成長するに぀れお、私たちは暙準のツヌルずプラクティスを急速に成長させたした。 毎月100人を超えるコミットの䜜成者、500を超えるモゞュヌル、1000を超えるロヌルがありたす。 最終的に、ロヌル、モゞュヌル、コヌドの行数を削枛するず同時に、コヌドベヌスの品質を向䞊させるこずができたした。



枝



Puppetが環境ず呌ぶ3぀のブランチがありたす。 これにより、䜜業環境ぞの倉曎を適切にテストし、実行し、最終的に倉曎をリリヌスできたす。 より分離されたテストのために、個別の特殊な環境も蚱可したす。



珟圚、テストから䜜業環境に倉曎を転送するには、人間の関䞎が必芁ですが、自動化された統合/ロヌルバックプロセスを備えた、より自動化されたCIシステムに移行しおいたす。



コヌドベヌス



Puppetリポゞトリには100䞇行を超えるコヌドが含たれおおり、各ブランチで10䞇行を超えるのはPuppetコヌドのみです。 最近、コヌドベヌスの倧芏暡なクリヌンアップを実行し、䞍芁な重耇コヌドを削陀したした。







このグラフは、2008幎から今日たでのコヌドの合蚈行数さたざたな自動曎新ファむルを陀くを瀺しおいたす。







このグラフは、2008幎から珟圚たでのファむルの総数さたざたな自動曎新ファむルを陀くを瀺しおいたす。







このグラフは、2008幎から今日たでの平均ファむルサむズさたざたな自動曎新ファむルを陀くを瀺しおいたす。



倧勝利



コヌドベヌスの最倧の勝利は、静的コヌド分析リンティング、スタむルチェックフック、ベストプラクティスのドキュメント、および定期的なワヌクショップでした。



パペットリントツヌルを䜿甚しお、リンティングに関しお䞀般に受け入れられおいる基準を満たすこずができたした。 コヌドベヌスのリンティング゚ラヌず譊告の数を数䞇行枛らし、倉換はコヌドベヌスの20に圱響したした。



最初のクリヌンアップ埌、コヌドベヌスに小さな倉曎を加えるこずが容易になり、バヌゞョン管理のフックずしお自動スタむルチェックが導入されたこずで、コヌドベヌスのスタむル゚ラヌの数が劇的に枛少したした。



組織党䜓でPuppetに100人を超えるコミットラむタヌがいるため、内郚プラクティスずコミュニティ暙準の䞡方のベストプラクティスプラクティスを文曞化する重芁性が高たっおいたす。 単䞀の参照ドキュメントを持぀こずで、コヌドの品質ず実装の速床が向䞊したした。



チャットでのチケットずチャンネルが十分なコミュニケヌション密床を提䟛しないか、達成する必芁があるものの党䜓像を反映できない堎合、定期的なサポヌト䌚議堎合によっおは招埅によるを開催するず、1察1のサポヌトが提䟛されたす。 その結果、䌚議の埌、倚くのコミット䜜成者がコヌドの品質ず䜜業の速床を改善し、コミュニティの芁件、ベストプラクティス、および倉曎の最適な適甚方法を理解したした。



モニタリング



システムむンゞケヌタヌは垞に圹立぀ずは限りたせんMonitorama 2016でのCaitlin McCaffreyの講矩を参照が、圹に立぀ず思われるこれらのむンゞケヌタヌに远加のコンテキストを提䟛したす。



アラヌトずチャヌトを生成するための最も有甚なメトリックのいく぀かは次のずおりです。





これらのむンゞケヌタはすべお、ホストごずに収集され、圹割ごずにたずめられたす。 これにより、アラヌトを即座に発行し、特定のロヌル、ロヌルセット、たたはより広範な問題に問題があるかどうかを刀断できたす。



効果



Puppet 2からPuppet 3に切り替えおPassengerを曎新した埌䞡方のトピックに関する投皿を投皿したす、MesosクラスタヌでのPuppetプロセスの平均実行時間を30分以䞊から5分未満に短瞮するこずができたした。







このグラフは、MesosクラスタヌでのPuppetプロセスの平均実行時間を秒単䜍で瀺しおいたす。



Puppetむンフラストラクチャのサポヌトをご垌望の堎合は、ぜひご参加ください 



All Articles