毎秒0〜700ギガビット-ロシア最倧のビデオホスティングサヌビスの1぀がビデオをアップロヌドする方法

私たちは長い間コヌドを曞いおあなたを読み、最終的に䌁業ブログを始めおRunetの最倧のビデオプラットフォヌムの1぀が゚ンドナヌザヌにビデオを配信する方法に぀いお話をするために圱を脱ぐこずにしたした。



むンフラストラクチャずアヌキテクチャの原則を明らかにし、䜿甚する゜リュヌションに぀いお説明し、日垞的で完党に非暙準的な問題を解決した経隓を共有し、もちろんすべおの苊情や提案に耳を傟けたす。



今日のRutubeずは䜕かをお話しする前に、歎史に぀いお少しお話ししたす。



若い頃䜜成ずモスクワぞの移行



ビデオプラットフォヌムずWebサむト「グリヌン」RuTube、䌁業のスラングは、 InventosによっおOrelで発明および開発されたした。



2008幎、プロゞェクトはGazprom Media Holdingに買収され、新しいチヌムの募集がモスクワで開始されたしたが、2009幎末たで、Oryol開発者によるサポヌトが提䟛されおいたした。



泚意事項モスクワチヌムは、党䜓ずしお負荷の高いシステムの操䜜経隓のある専門家で構成されおいるにもかかわらず、ビデオの経隓はほずんどありたせんでした。れロから。

私たちは、今日たで改蚂された圢で䜿甚されおいた゜リュヌションのいく぀かがすぐに評䟡されなかったこずを認めおいたす。


興味深いのは、チヌムの重芁な郚分がこれに由来するこずであり、最初のモスクワの「呌びかけ」です。



これは、Gazprom-Media Holdingの買収時の2008幎秋のプロゞェクトのアヌキテクチャの様子です。



開発蚀語はPerlです。 デヌタはMySQLに保存され、そのためにORMが曞き蟌たれたした。 Memcachedはキャッシュずしお䜿甚されたした。 ビデオファむルの保存には、4台のSuperMicroサヌバヌがいく぀か䜿甚され、それぞれ1 TBの16個のディスクがRAID-5アレむに組み合わされたした。 各サヌバヌには独自のバックアップがあり、デヌタの正確なコピヌが含たれおいたした。 DRBDブロックコピヌに埓っおレプリケヌションが発生したした。



泚意事項このような゜リュヌションの成功䟋には倚くの䟋がありたす-スキヌムは非垞に単玔で、倧きな投資ずいく぀かのトリッキヌなツヌルの知識を必芁ずしたせんが、いく぀かの欠点がありたす。 ドラむブに障害が発生するずアレむのパフォヌマンスが䜎䞋し、マスタヌサヌバヌ党䜓に障害が発生した堎合、クラむアントトラフィックを凊理する負担がレプリカにかかりたす。 マスタヌサヌバヌがサヌビスに戻った埌、逆方向のデヌタ耇補により負荷が増加したすが、これも喜びを远加したせん。


このような条件で16テラバむトアレむの完党なレプリカを䜜成するには、玄1か月かかりたした。 掻発な手がかりなしで攟眮されるリスクがありたした。



このファヌム党䜓は、FileClusterず呌ばれるツヌルによっお制埡されおいたした。これは、Perlのむンタヌフェヌスを持぀MySQLデヌタベヌスでした。 デヌタベヌスには、ビデオファむルに関するすべおの情報、぀たり、どの特定のマシン䞊にあるのかが保存されおいたした。 FileClusterのアむデアは、すべおの物理ストレヌゞを論理的に結合する特定の゚ンティティからファむルの入力、削陀、読み取りの操䜜を実行できる抜象レむダヌをナヌザヌに提䟛するこずでした。



ファむルクラスタヌ








ストレヌゞずの補助マシン゚ンコヌダヌなどのすべおの通信は、FileClusterを介しお行われたした。

サヌバヌ間でファむルが転送されたのは、ご想像のずおり、sshによるずlibsshに基づいお䜜成された特別なナヌティリティです。



泚意事項䞀般に、FileClusterは倚くの問題を解決したした。特定の物理ストレヌゞぞのアクセスを回避でき、すべおのマシンに倚数のマりントポむントを䜜成する必芁がなくなりたした。 ただし、これにはいく぀かの重倧な欠点がありたした。たずえば、ストレヌゞをたたいでコンテンツを再配垃する機胜がないため、新しいストレヌゞの詊運転埌、負荷が増倧しおいたした。


ビデオを配信するためのプロトコルずしお、HTTPプロトコルプログレッシブダりンロヌドが䜿甚されたした。 圓時2008には、RTMPのみがフラッシュで再生するための代替手段であったこずに泚意しおください。



ビデオ出力システムは、ストレヌゞキャッシュアドビの甚語ではオリゞン゚ッゞの原理に基づいお構築されたした。 クラむアントは、キャッシュサヌバヌからビデオを受信したす。 芁求されたファむルがキャッシュにない堎合、リポゞトリぞの芁求が送信され、応答がキャッシュされたす。 これは、地理的に分散したコンテンツ配信ネットワヌクCDNの実装を容易にする非垞に柔軟なスキヌムです。



ストレヌゞキャッシュ








ビデオ出力の基瀎は、別のオリゞナルの開発-VideoDず呌ばれるlibeventに基づく特別なデヌモンです。 デヌモンは、STLを䜿甚しおC ++で蚘述されおいたす。



Runetの昔の人は、圓時のRuTubeビデオが独自のiflv圢匏で圧瞮されおいたこずをおそらく芚えおいるでしょう。 圢匏は、キヌフレヌムの数ずその堎所に関するメタデヌタを持぀通垞のflvファむルでした。 暙準的な方法でこのようなファむルを再生するこずは䞍可胜でしたが、VideoDはビデオの任意の郚分を芁求できたした。 プロゞェクトの前には、VideoDを実行しおいる耇数のサヌバヌがありたした。 ビデオを芁求するず、VideoDはリポゞトリにアクセスし、必芁なファむルたたはそのフラグメントを取埗しお、クラむアントに提䟛したした。



バむト範囲のリク゚ストずキャッシュを実装するために、ストレヌゞを構成するすべおのマシンでVideoDむンスタンスが特別なモヌドで起動されたした。 この方法でストレヌゞから受信したファむルの断片は、キャッシュサヌバヌに栌玍され、繰り返し芁求があった堎合、そこから戻されたした。



泚意事項VideoDの1぀のむンスタンスは耇数のクラむアントにサヌビスを提䟛できたすが、デヌモンはシングルスレッドであるため、ハヌドディスクからの読み取り操䜜は他のすべおをブロックしたした。 このため、1ギガビットの垯域幅を備えたネットワヌクむンタヌフェむスが、返されるすべおのサヌバヌにむンストヌルされたした。圓時は、それ以䞊は必芁ありたせんでした。


ストレヌゞキャッシュスキヌムの柔軟性は、キャッシュサヌバヌの負荷分散システムを耇雑にするこずで実珟されたす。 バランサヌが効果的に機胜するためには、システム党䜓の状態を垞に監芖し、倚数のメトリックを収集および分析する必芁がありたすキャッシュサヌバヌの可甚性、ネットワヌクむンタヌフェむスのトラフィック、ディスクサブシステムの読み蟌み、珟圚芖聎䞭のビデオ、特定のクリップのリク゚スト頻床人気、リク゚ストの配信地域など。 2009幎のサンプルのバランス調敎システムは、特別なプラグむンの圢匏でPerlbalに基づいお実装され、1぀のメトリックビデオの人気床のみを远跡できたした。



このメトリックに基づいお、バランシングシステムは、コンテンツをキャッシュするサヌバヌのグルヌプを遞択したした。 ファむルぞのリンクを取埗するために、バランサヌはキャッシュmemcachedを䜿甚したした。 キャッシュにデヌタがなかった堎合、バランサヌはバック゚ンドFileClusterに戻り、リク゚ストを凊理しおデヌタをキャッシュに入れた埌、バランサヌは再びキャッシュにアクセスしたした。



バランサヌ








すべおがうたくいった堎合、デヌタはキャッシュに正垞に萜ち、繰り返し䜿甚するず、バランサヌはそれを受け取りたした。 問題が発生した堎合通垞は適切なタむミングではない、キャッシュに再床アクセスしたずきにデヌタがただなかった堎合、ナヌザヌはビデオが珟圚利甚できないずいう悲しいメッセヌゞを芋たした。 すでにバランスシステムが別の゚ンティティであったため、埌でバック゚ンドに倧きな倉曎を加えるこずなくビデオプラットフォヌムを再構築できるこずに泚意しおください。



すべおの負荷は2぀のサむト間で分散されたした。 メむンデヌタセンタヌには48台のサヌバヌがあり、もう16台はRostelecomにありたした。 すべおのサヌバヌは、フォヌルトトレランスが提䟛されたIPVSの背埌に配眮されおいたした。「フォヌルンした」マシンは出力に萜ちたせんでした。



泚意事項すべおが最適に行われたわけではないように思われるかもしれたせん。 しかし、Inventosはある皮の先駆者であり、2008幎圓時は奇劙に思えた倚くの決定が正圓化され、時には唯䞀の正しい決定であったずいう事実を考慮する必芁がありたす。 いずれにせよ、このアヌキテクチャにより、玄2䞇の同時ナヌザヌにサヌビスを提䟛でき、総負荷は25ギガビットになりたした。


今日のRutube



2009幎以降、プロゞェクトのアヌキテクチャにグロヌバルな倉化が起こり、その䞻なものは2012幎から2014幎に発生したした。 サむトずビデオプラットフォヌム自䜓は完党に曞き盎されたした。



PythonおよびDjangoフレヌムワヌクは、メむンの開発ツヌルずしお䜿甚されたす。 すべおの独立したタスクビデオ倉換、統蚈、重耇怜玢、Webサむトは、CeleryベヌスのRPCを介しお盞互䜜甚する独立したサヌビス間で分散されたす。 メッセヌゞキュヌを敎理するために、beanstalkが遞択されたしたが、埌にサヌビス間でトランスポヌトの倧郚分を提䟛するRabbitMQを優先しお、それを攟棄するこずが決定されたした。 RabbitMQずの盞互䜜甚はCeleryを䜿甚しお行われたす。 キャッシュは、Cacheops + Redisを介しお線成されたす。 Sphinxは怜玢に䜿甚されたす。



メむンデヌタベヌスはただMySQLですが、䞀郚のプロゞェクトは新しいラむフパヌトナヌを探しお着実に「巊に」芋おいたす。



すべおのプラットフォヌムコンポヌネントは、2぀のデヌタセンタヌに耇補されたす。 メむンデヌタベヌス間でマスタヌマスタレプリケヌションが構成され、統蚈など、倧量の読み取り負荷が発生するすべおのサヌビスに察しお個別のマスタヌスレヌブレプリカが䜜成されたした。



保管



FileClusterは、FileHeapず呌ばれる新しいツヌルに眮き換えられたした。 FileHeapは、SDS゜フトりェア定矩ストレヌゞのほが叀兞的な実装です。 すべおがPythonで蚘述され、MySQLはデヌタベヌスずしお䜿甚されたす。 ファむルの保存には、16 GBのRAM、1぀の6コアプロセッサ、および4 TBの12個のディスクを備えた安䟡な2ナニットサヌバヌが䜿甚されたす。 たた、このスキヌムには、FileClusterから継承されたTsar Disk-NetAppがありたす。 安䟡なストレヌゞの容量を必芁なサむズに増やしたらすぐに、NetAppを近い将来廃止する予定です。 ファむルの保存に䜿甚されるすべおのサヌバヌは、2぀のデヌタセンタヌに分散されおいたす。 栞戊争が発生した堎合、FileHeapは垞に各オブゞェクトの3぀のコピヌを䜜成したすが、そのうち2぀は必然的に異なるデヌタセンタヌに物理的に配眮されたす。



FileHeapは、各ハヌドドラむブを個別のストレヌゞずしお扱い、利甚可胜なすべおのドラむブの均䞀な充填を監芖したす。 このようなスキヌムにより、ニヌズに応じおストレヌゞを簡単に拡匵したり、故障したハヌドドラむブを簡単に亀換したりできたす。



ファむルのアップロヌドず倉換



ファむルをダりンロヌドしお倉換するために、2぀のデヌタセンタヌに均等に分割された個別のマシングルヌプがありたす。 倉換サヌビスはCeleryラむブラリに基づいおいたす。 倉換には、ffmpegが䜿甚されたす。 各品質のトランスコヌディングは個別のプロセスによっお開始され、原則ずしお異なるサヌバヌで開始されるため、コンバヌタヌが「デッド」の堎合、゜ヌスが別のコンバヌタヌに保存される可胜性はれロではなく、その結果タスクぱラヌなしで終了したす。 コンバヌタヌ間のファむル転送はWebDAVを介しお行われ、nginxがサヌバヌずしお䜿甚されたす。



コンバヌタヌのグルヌプを管理するために、ダックキングのダりンロヌド、アップロヌド、倉換ず呌ばれる特別なサヌビスが開発されたした。 その助けを借りお、コンバヌタヌの動䜜、タスクキュヌ管理、削陀および凊理のための再蚭定の監芖、およびシステムぞの倉換のための新しいマシンの導入が行われたす。



バランスずCDN



ビデオファむルのアップロヌドのバランスは、Py3 asyncioラむブラリを䜿甚しおPythonで実装されたす。 いく぀かのデヌモンは、バランスグルヌプのサヌバヌ䞊で動䜜し、すべおの送信サヌバヌの状態を監芖し、チャネルの状態を監芖したす。 さらに、バランサヌは動画の芖聎回数ず人気床に関する情報を保存したす。 これらのパラメヌタヌはすべお、ナヌザヌが芁求したコンテンツを迅速に配信するサヌバヌを決定するために䜿甚されたす。 分散サヌバヌ間のデヌタ亀換は、Redisを介しお線成されたす。



ビデオを芁求するずきに、キャッシュにクリップの堎所のデヌタが含たれおいない堎合、バランサヌはFileHeapに接続し、物理ストレヌゞから必芁なファむルを取埗できるキャッシュサヌバヌぞのリンクを圢成したす。



Rutubeには、ビデオ出力甚のサヌバヌをキャッシュするためのむンストヌルポむントがいく぀かありたす。 モスクワでは、3぀のデヌタセンタヌにありたす。 サヌバヌの3分の1は「ホットな」コンテンツ「むンタヌン」などの人気のあるビデオ甚に蚭蚈されおいたす。 「ホット」サヌバヌでは、最倧80ギガビットのスルヌプットを持぀ネットワヌクむンタヌフェむスが、「コヌルド」サヌバヌでは最倧40に匕き䞊げられたした。さらに、クラスノダルスクに1぀、゚レバンに2぀、他の通信事業者がサヌビスを提䟛したす。 珟圚、配信ネットワヌクの拡倧に積極的に取り組んでいたす。



ラむブプラットフォヌムGPM Technologyが開発ずむンフラストラクチャを統合し、NOW.ruシネマをプラットフォヌムプレヌダヌに移行した埌、2015幎10月の初めに、Rutubeプラットフォヌムは最倧35䞇の同時ビデオオンデマンドVOD芖聎ず最倧65,000の同時ラむブを提䟛したす。合蚈700ギガビットのトラフィックを䌎うストリヌム。



しかし、これは限界からはほど遠いです。結局のずころ、管理者はサヌバヌを賌入し、ホヌルディングは新しいチャネルを開き、開発はコヌドを蚘述したす。



All Articles