90 日間でビデオ プラットフォヌムを開発

この春はずおも陜気な気候に恵たれたした。 パンデミックのため、倏のカンファレンスをオンラむンに移行する必芁があるこずが明らかになりたした。 そしお、それらをオンラむンで効率的に実行するには、既補の゜フトりェア ゜リュヌションは私たちには適しおおらず、独自の゜フトりェア ゜リュヌションを䜜成する必芁がありたした。 そしお、これを行うのにXNUMXか月かかりたした。

刺激的な XNUMX か月だったこずは明らかです。 しかし、倖から芋るず、オンラむン䌚議プラットフォヌムずは䜕なのか、完党に明らかではありたせん。 どのような郚品で構成されおいたすか? そこで、倏の DevOops カンファレンスの最埌に、私はこのタスクの責任者に次の質問をしたした。

  • ニコラむ・モルチャノフ - JUG Ru Group テクニカルディレクタヌ。
  • Vladimir Krasilshchik は、バック゚ンドで働く実甚的な Java プログラマヌです (Java カンファレンスで圌のレポヌトを芋るこずもできたす)。
  • Artyom Nikonov はすべおのビデオ ストリヌミングを担圓しおいたす。

ちなみに、秋冬のカンファレンスでは、同じプラットフォヌムの改良版を䜿甚する予定です。そのため、倚くの Habra 読者が匕き続きそのナヌザヌずなるでしょう。

90 日間でビデオ プラットフォヌムを開発

倧局

――チヌム構成はどのような感じでしたか

ニコラむ・モルチャノフ アナリスト、デザむナヌ、テスタヌ、フロント゚ンダヌ XNUMX 名、バック゚ンド XNUMX 名がいたす。 そしおもちろん、T字のスペシャリストです

—党䜓的にはどのようなプロセスでしたか

ニコラむ 15月䞭旬たではオンラむン察応の準備がたったく敎っおいたせんでした。 そしお XNUMX 月 XNUMX 日、オンラむン カルヌセル党䜓が回転し始めたした。 私たちはいく぀かのリポゞトリをセットアップし、基本的なアヌキテクチャに぀いお蚈画し、議論し、すべおを XNUMX か月で実行したした。

もちろん、これは、蚈画、アヌキテクチャ、機胜の遞択、機胜の投祚、機胜のポリシヌ、蚭蚈、開発、テストずいう叀兞的な段階を経たした。 その結果、6 月 XNUMX 日にすべおを実皌働環境にロヌルアりトしたした。 テックトレむン。 すべおの期間は90日でした。

— 玄束したこずは達成できたしたか

ニコラむ 私たちは珟圚、DevOops カンファレンスにオンラむンで参加しおいるので、それがうたくいったこずになりたす。 私は個人的に最も重芁なこずを玄束したした。それは、顧客がオンラむン䌚議を行うためのツヌルを提䟛するずいうこずです。

課題は、チケット所有者にカンファレンスをブロヌドキャストできるツヌルを提䟛しおほしいずいうこずでした。

すべおの蚈画はいく぀かの段階に分割され、すべおの機胜 (グロヌバル玄 30) は 4 ぀のカテゎリに分類されたした。

  • 私たちは必ずそうしたす圌らなしでは生きおいけたせん、
  • これは XNUMX 番目に行いたす。
  • 私たちは決しおそんなこずはしたせんが、
  • そしお私たちは決しお、決しおそんなこずはしたせん。

最初の XNUMX ぀のカテゎリからすべおの機胜を䜜成したした。

— 合蚈 600 の JIRA 課題が䜜成されたず聞きたした。 13 か月で 5 個のマむクロサヌビスを䜜成したしたが、それらは Java だけで曞かれたものではないず思われたす。 さたざたなテクノロゞヌを䜿甚し、Amazon には XNUMX ぀のアベむラビリティ ゟヌンに XNUMX ぀の Kubernetes クラスタヌず XNUMX ぀の RTMP ストリヌムがありたす。

次に、システムの各コンポヌネントを個別に芋おみたしょう。

ストリヌミング

— すでにビデオ画像があり、それがいく぀かのサヌビスに送信されるずころから始めたしょう。 Artyom、このストリヌミングがどのようにしお起こるのか教えおください。

アルチョム・ニコノフ: 䞀般的なスキヌムは次のようになりたす。カメラからの画像 -> コントロヌル ルヌム -> ロヌカル RTMP サヌバヌ -> Amazon -> ビデオ プレヌダヌ。 さらに詳しく それに぀いお曞きたした XNUMX月のハブレで。

䞀般に、これを行うには XNUMX ぀のグロヌバルな方法がありたす。ハヌドりェアを䜿甚するか、゜フトりェア ゜リュヌションに基づくかのいずれかです。 リモヌトスピヌカヌの堎合は゜フトりェアの方が簡単なので、゜フトりェアのルヌトを遞択したした。 別の囜の講挔者にハヌドりェアを持ち蟌むこずが垞に可胜であるずは限りたせんが、゜フトりェアを講挔者に配信するこずはより簡単で確実であるように思えたす。

ハヌドりェアの芳点から芋るず、䞀定数のカメラ (スタゞオずリモヌト スピヌカヌ) ずスタゞオ内に䞀定数のリモコンがあり、攟送䞭にテヌブルの真䞋で修理する必芁がある堎合がありたす。

これらのデバむスからの信号は、キャプチャ カヌド、入出力カヌド、サりンド カヌドを備えたコンピュヌタに入力されたす。 そこで信号は混合され、レむアりトに組み立おられたす。

90 日間でビデオ プラットフォヌムを開発
4スピヌカヌのレむアりト䟋

90 日間でビデオ プラットフォヌムを開発
4スピヌカヌのレむアりト䟋

さらに、継続的なブロヌドキャストは XNUMX 台のコンピュヌタの助けを借りお提䟛されたす。XNUMX 台のメむン マシンず XNUMX 台の皌働マシンが順番に存圚したす。 最初のコンピュヌタヌは最初のレポヌトを収集し、XNUMX 番目のコンピュヌタヌは䌑憩、最初のコンピュヌタヌは次のレポヌト、XNUMX 番目のコンピュヌタヌは次の䌑憩、ずいうようになりたす。 そしお、メむンマシンは最初のものずXNUMX番目のものを混合したす。

これにより䞀皮の䞉角圢が圢成され、これらのノヌドのいずれかに障害が発生した堎合でも、品質を損なうこずなく、迅速にコンテンツをクラむアントに配信し続けるこずができたす。 そんな状況がありたした。 カンファレンスの最初の週に、私たちは XNUMX 台のマシンを修理し、電源を入れたり切ったりしたした。 人々は私たちの回埩力に満足しおいるようです。

次に、コンピュヌタからのストリヌムはロヌカル サヌバヌに送られたす。ロヌカル サヌバヌには、RTMP ストリヌムのルヌティングずレコヌドのバックアップずいう XNUMX ぀のタスクがありたす。 したがっお、耇数の蚘録ポむントがありたす。 ビデオストリヌムは、Amazon SaaS サヌビス䞊に構築されたシステムの䞀郚に送信されたす。 を䜿甚しおおりたす メディアラむブ、S3、クラりドフロント。

ニコラむ ビデオが芖聎者に届くたでに䜕が起こっおいるのでしょうか? 䜕ずかカットしないずいけないですよね

アルチョム: 匊瀟偎でビデオを圧瞮し、MediaLive に送信したす。 そこでトランスコヌダヌを起動したす。 圌らはビデオをリアルタむムでいく぀かの解像床にトランスコヌドし、人々が携垯電話や田舎の貧匱なむンタヌネットなどを通じおビデオを芖聎できるようにしたす。 次に、これらのストリヌムは次のように分割されたす。 チャンク、これがプロトコルの仕組みです HLS。 これらのチャンクぞのポむンタヌを含むプレむリストをフロント゚ンドに送信したす。

— 1080p の解像床を䜿甚しおいたすか?

アルチョム: 私たちのビデオの幅は1080p - 1920ピクセルず同じですが、高さは少し䜎く、画像はより長くなりたす。これには理由がありたす。

プレむダヌ

— Artyom は、ビデオがどのようにストリヌムに取り蟌たれ、異なる画面解像床の異なるプレむリストにどのように分散され、チャンクに分割されおプレヌダヌに取り蟌たれるかを説明したした。 Kolya、今床はこれがどのような皮類のプレヌダヌなのか、ストリヌムをどのように消費するのか、なぜ HLS なのか教えおください。

ニコラむ すべおのカンファレンスの芖聎者が芖聎できるプレヌダヌがありたす。

90 日間でビデオ プラットフォヌムを開発

本質的に、これはラむブラリのラッパヌです hls.js, そこには他の倚くの遞手が曞かれおいたす。 しかし、私たちは非垞に特殊な機胜を必芁ずしおいたした。巻き戻しお、その人がいる堎所、珟圚どのレポヌトを芋おいるかをマヌクする機胜です。 たた、独自のレむアりト、あらゆる皮類のロゎ、その他組み蟌みのものすべおも必芁でした。 したがっお、独自のラむブラリ (HLS 䞊のラッパヌ) を䜜成し、サむトに埋め蟌むこずにしたした。

これはルヌト機胜なので、ほが最初に実装されたした。 そしお、その呚りにすべおが成長したした。

実際、プレヌダヌは認蚌を通じお、時間ず品質に関連付けられたチャンクぞのリンクを含むプレむリストをバック゚ンドから受け取り、必芁なものをダりンロヌドしおナヌザヌに衚瀺し、途䞭でいく぀かの「魔法」を実行したす。

90 日間でビデオ プラットフォヌムを開発
タむムラむンの䟋

— すべおのレポヌトのタむムラむンを衚瀺するボタンがプレヌダヌに組み蟌たれおいたす...

ニコラむ はい、ナヌザヌ ナビゲヌションの問題はすぐに解決されたした。 XNUMX 月䞭旬、私たちは各カンファレンスを別の Web サむトで攟送せず、すべおを XNUMX ぀の Web サむトに統合するこずを決定したした。 フルパスチケットのナヌザヌは、ラむブブロヌドキャストず過去の䌚議の録画の䞡方で、さたざたなカンファレンスを自由に切り替えるこずができたす。

たた、ナヌザヌが珟圚のストリヌムをナビゲヌトし、トラックを切り替えるのを容易にするために、「党䜓ブロヌドキャスト」ボタンず、トラックずレポヌトを切り替えるための氎平レポヌト カヌドを䜜成するこずにしたした。 キヌボヌドコントロヌルあり。

――技術的に難しい点はありたしたか

ニコラむ スクロヌル バヌがあり、そこにさたざたなレポヌトの開始点がマヌクされおいたした。

— 結局のずころ、スクロヌルバヌにこれらのマヌクを実装したのは、YouTubeが同様のこずを行う前だったのですか

アルチョム: 圓時はベヌタ版でした。 過去 XNUMX 幎間にわたっおナヌザヌを察象に郚分的にテストしおきたため、これはかなり耇雑な機胜のようです。 そしお今、それが販売に至った。

ニコラむ しかし実際には、より早く販売できるようになりたした。 正盎なずころ、このシンプルな機胜の背埌には、プレヌダヌ内で膚倧な量のバック゚ンド、フロント゚ンド、蚈算、数孊が存圚したす。

フロント゚ンド

— 私たちが衚瀺するこのコンテンツ (スピヌチ カヌド、講挔者、りェブサむト、スケゞュヌル) がどのようにしおフロント゚ンドに届くのかを考えおみたしょう。

りラゞミヌル・クラシルシチク 圓瀟にはいく぀かの瀟内 IT システムがありたす。 すべおのレポヌトずすべおの発蚀者を入力するシステムがありたす。 講挔者が䌚議に参加するたでにはプロセスがありたす。 講挔者がアプリケヌションを送信するず、システムがそれをキャプチャし、それに埓っおレポヌトが䜜成される特定のパむプラむンが存圚したす。

90 日間でビデオ プラットフォヌムを開発
講挔者はパむプラむンをこのように芋おいたす

このシステムは匊瀟瀟内で開発したものです。

次に、個々のレポヌトからスケゞュヌルを䜜成する必芁がありたす。 ご存知のずおり、これは NP 困難な問題ですが、なんずか解決できたす。 これを行うには、スケゞュヌルを生成し、それをサヌドパヌティのクラりド サヌビス Contentful にアップロヌドする別のコンポヌネントを起動したす。 そこでは、すべおがすでにテヌブルのように芋え、その䞭にはカンファレンスの日があり、その日にはタむムスロットがあり、そのスロットにはレポヌト、䌑憩、たたはスポンサヌ掻動が含たれおいたす。 したがっお、私たちが芋るコンテンツはサヌドパヌティのサヌビスにありたす。 そしおそれを珟堎に䌝えるのが仕事です。

このサむトはプレヌダヌが含たれる単なるペヌゞであるように芋えたすが、ここでは耇雑なこずは䜕もありたせん。 そうではないこずを陀いお。 このペヌゞの背埌にあるバック゚ンドは Contentful に移動し、そこからスケゞュヌルを取埗し、いく぀かのオブゞェクトを生成しおフロント゚ンドに送信したす。 私たちのプラットフォヌムのすべおのクラむアントが行う WebSocket 接続を䜿甚しお、バック゚ンドからフロント゚ンドにスケゞュヌルの曎新を送信したす。

実際のケヌス: 講挔者は䌚議の途䞭で転職したした。 圌の雇甚䞻の瀟章を倉曎する必芁がありたす。 これはバック゚ンドからどのようにしお起こるのでしょうか? 曎新は WebSocket 経由ですべおのクラむアントに送信され、フロント゚ンド自䜓がタむムラむンを再描画したす。 これらすべおがシヌムレスに行われたす。 クラりド サヌビスずいく぀かのコンポヌネントを組み合わせるこずで、このすべおのコンテンツを生成しおフロントに提䟛する機䌚が埗られたす。

ニコラむ ここで、私たちのサむトが叀兞的な SPA アプリケヌションではないこずを明確にするこずが重芁です。 これは、レむアりトベヌスのレンダリングされた Web サむトであり、SPA でもありたす。 実際、Google はこのサむトをレンダリングされた HTML ずしお認識したす。 これは SEO ずナヌザヌぞのコンテンツ配信に適しおいたす。 ペヌゞを衚瀺する前に 1,5 メガバむトの JavaScript が読み蟌たれるのを埅たずに、すでにレンダリングされたペヌゞがすぐに衚瀺され、レポヌトを切り替えるたびにそれが感じられたす。 コンテンツはすでに準備ができおおり、適切な堎所に投皿されるため、すべおが XNUMX 秒で行われたす。

— テクノロゞヌを列挙しお、䞊蚘すべおの䞋に線を匕いおみたしょう。 Tyoma 氏は、Amazon ストリヌムが 5 ぀あり、そこでビデオず音声を配信しおいるず述べたした。 そこには bash スクリプトがあり、それを起動しお蚭定するために䜿甚したす...

アルチョム: これは AWS API を通じお行われ、そこにはさらに倚くの技術的なサむド サヌビスがありたす。 私たちは責任を分担したので、私は CloudFrontを、フロント゚ンドずバック゚ンドの開発者はそこからそれを採甚したす。 コンテンツのレむアりトを簡玠化するための独自のバむンディングが倚数あり、それを 4K などで䜜成したす。 玍期が非垞に厳しかったため、ほがすべお AWS 䞊で䜜業を行いたした。

— 次に、これらすべおがバック゚ンド システムを䜿甚しおプレヌダヌに入力されたす。 プレヌダヌには TypeScript、React、Next.JS が含たれおいたす。 バック゚ンドには、C#、Java、Spring Boot、Node.js のいく぀かのサヌビスがありたす。 これはすべお、Yandex.Cloud むンフラストラクチャを䜿甚する Kubernetes を䜿甚しおデプロむされたす。

たた、プラットフォヌムに慣れる必芁があったずき、それは簡単であるこずがわかったこずにも泚意したいず思いたす。すべおのリポゞトリは GitLab 䞊にあり、すべおに適切な名前が付けられ、テストが蚘述され、ドキュメントがありたす。 ぀たり、非垞モヌドでもそういう察応をしおいたずいうこずです。

ビゞネスの制玄ず分析

— ビゞネス芁件に基づいお 10 人のナヌザヌをタヌゲットにしたした。 私たちが課しおいたビゞネス制限に぀いお話す時が来たした。 高い䜜業負荷を確保し、個人デヌタの保存に関する法埋を確実に遵守する必芁がありたした。 他には䜕があるでしょうか

ニコラむ たずは動画の芁件からスタヌトしたした。 最も重芁なこずは、クラむアントに迅速に配信できるように䞖界䞭に分散されたビデオ ストレヌゞです。 その他には、1080p 解像床や巻き戻しが含たれたすが、他の倚くはラむブ モヌドで実装しおいたせん。 その埌、2 倍速を有効にする機胜を远加したした。これにより、ラむブに「远い぀き」、カンファレンスをリアルタむムで芖聎し続けるこずができたす。 そしおその過皋で、タむムラむンのマヌキング機胜が登堎したした。 さらに、耐障害性があり、10 接続の負荷に耐える必芁がありたした。 バック゚ンドの芳点から芋るず、これは、ペヌゞ曎新ごずに玄 000 の接続ず 10 ぀のリク゚ストを掛け合わせたものになりたす。 これはすでに 000 RPS/秒です。 かなりの量です。

— パヌトナヌのオンラむンスタンドずの「バヌチャル展瀺䌚」に必芁な芁件は他にありたしたか?

ニコラむ はい、これは非垞に迅速か぀普遍的に行われる必芁がありたした。 各カンファレンスには最倧 10 瀟のパヌトナヌ䌁業が参加し、すべおのパヌトナヌ䌁業を XNUMX  XNUMX 週間で完了する必芁がありたした。 ただし、内容の圢匏が若干異なりたす。 しかし、事実䞊それ以䞊の開発参加を必芁ずせず、これらのペヌゞをその堎で組み立おる特定のテンプレヌト ゚ンゞンが䜜成されたした。

— リアルタむムのビュヌず統蚈の分析に察する芁件もありたした。 このために Prometheus を䜿甚しおいるこずは知っおいたすが、分析に関しおどのような芁件を満たしおいるのか、たた、これはどのように実装されおいるのかを詳しく教えおください。

ニコラむ 最初は、A/B テストのための収集ず、将来的にクラむアントに最適なコンテンツを提䟛する方法を理解するための情報収集のためのマヌケティング芁件がありたす。 パヌトナヌのアクティビティに関する䞀郚の分析や、衚瀺される分析 (カりンタヌぞの蚪問) にも芁件がありたす。 すべおの情報はリアルタむムで収集されたす。

特定の時点で䜕人があなたを芖聎しおいたかずいう情報を、スピヌカヌに察しおも集蚈圢匏で提䟛できたす。 同時に、連邊法第 152 条を遵守するため、お客様の個人アカりントず個人デヌタはいかなる方法でも远跡されたせん。

このプラットフォヌムには、レポヌトぞの参加状況のグラフを䜜成するために、ナヌザヌのアクティビティ (誰がレポヌトの䜕秒目を芋たのか) をリアルタむムで枬定するためのマヌケティング ツヌルずメトリクスがすでに組み蟌たれおいたす。 このデヌタに基づいお、次回のカンファレンスをより良いものにするための研究が行われおいたす。

詐欺

— 䞍正防止メカニズムはありたすか?

ニコラむ ビゞネスの芳点からするず時間枠が厳しいため、タスクは圓初、䞍芁な接続を即座にブロックするように蚭定されおいたせんでした。 XNUMX 人のナヌザヌが同じアカりントでログむンした堎合、コンテンツを衚瀺できたす。 しかし、XNUMX ぀のアカりントからの同時芖聎数はわかっおいたす。 そしお、特に悪質な違反者数名を犁止したした。

りラゞミヌル 名誉のために蚀っおおきたすが、犁止されたナヌザヌの XNUMX 人は、なぜこれが起こったのかを理解しおいたした。 圌はやっお来お謝眪し、チケットを買うず玄束した。

— これらすべおを実珟するには、すべおのナヌザヌを入口から出口たで完党に远跡し、圌らが䜕をしおいるのかを垞に把握する必芁がありたす。 このシステムはどのように機胜するのでしょうか?

りラゞミヌル 分析ず統蚈に぀いおお話したいず思いたす。分析ず統蚈は、レポヌトを成功させるために分析したり、パヌトナヌに提䟛したりできたす。 すべおのクラむアントは、WebSocket 接続を介しお特定のバック゚ンド クラスタヌに接続されたす。 そこに立っおいたす ハシバミ。 各クラむアントは、各時間垯で、䜕をしおいお、どのトラックを芋おいるかを送信したす。 次に、この情報は高速 Hazelcast ゞョブを䜿甚しお集玄され、これらのトラックを芖聎するすべおのナヌザヌに送信されたす。 隅には今䜕人の人がいるかがわかりたす。

90 日間でビデオ プラットフォヌムを開発

同じ情報が保存されおいたす モンゎ そしおデヌタレむクに移動し、そこからより興味深いグラフを構築する機䌚が埗られたす。 このレポヌトを閲芧したナニヌク ナヌザヌの数は䜕人ですか? 私たちは行く Postgres、このレポヌトの ID でアクセスしたすべおの人の ping がありたす。 ナニヌクなものを集めお集蚈しお、理解できるようになりたした。

ニコラむ しかし同時に、私たちはプロメテりスからリアルタむムのデヌタも受け取りたす。 これは、すべおの Kubernetes サヌビス、および Kubernetes 自䜓に察しお蚭定されたす。 あらゆるものを収集し、Grafana を䜿甚するずリアルタむムであらゆるグラフを構築できたす。

りラゞミヌル 䞀方では、さらなる OLAP 凊理のためにこれをダりンロヌドしたす。 OLTP の堎合、アプリケヌションはすべおを Prometheus、Grafana にダりンロヌドし、グラフも収束したす。

- グラフが収束する堎合にこれが圓おはたりたす。

動的な倉化

— 動的な倉曎がどのように展開されるのか教えおください。開始の 6 分前にレポヌトがキャンセルされた堎合、䞀連のアクションはどうなりたすか? どのパむプラむンが機胜したすか?

りラゞミヌル パむプラむンは非垞に条件付きです。 いく぀かの可胜性がありたす。 XNUMX ぀目は、スケゞュヌル生成プログラムが動䜜しおスケゞュヌルを倉曎したこずです。 倉曎されたスケゞュヌルはContentfulにアップロヌドされたす。 その埌、バック゚ンドは Contentful でこの䌚議に倉曎があるこずを認識し、それを取埗しお再構築したす。 すべおが WebSocket 経由で収集および送信されたす。

XNUMX 番目の可胜性は、すべおが猛烈なペヌスで起こった堎合です。線集者が Contentful 内の情報 (テレグラムぞのリンク、講挔者のプレれンテヌションなど) を手動で倉曎し、最初ず同じロゞックが機胜したす。

ニコラむ ペヌゞを曎新せずにすべおが行われたす。 すべおの倉曎はクラむアントに察しお完党にシヌムレスに行われたす。 レポヌトの切り替えに぀いおも同様です。 時間が来るず、レポヌトずむンタヌフェむスが倉わりたす。

りラゞミヌル たた、タむムラむンのレポヌトの開始には制限時間がありたす。 䞀番最初は䜕もありたせん。 そしお、赀いストラむプの䞊にマりスを眮くず、攟送ディレクタヌのおかげで、ある時点でカットオフが衚瀺されたす。 ディレクタヌがブロヌドキャストの正しい開始時間を蚭定し、バック゚ンドがこの倉曎を取埗し、カンファレンスのスケゞュヌルに埓っおトラック党䜓のプレれンテヌションの開始時刻ず終了時刻を蚈算し、それをクラむアントに送信し、プレヌダヌがカットオフを描画したす。 これで、ナヌザヌはレポヌトの最初ず最埌に簡単に移動できるようになりたした。 これは厳栌なビゞネス芁件であり、非垞に䟿利で圹に立ちたした。 レポヌトの実際の開始時刻を芋぀けるのに時間を無駄にする必芁はありたせん。 そしお詊写をしおみるず、本圓に玠晎らしいものになるでしょう。

展開

――展開に぀いおお聞きしたいのですが。 Kolya ずチヌムは、最初に倚くの時間を費やしお、すべおが展開されるむンフラストラクチャ党䜓をセットアップしたした。 教えおください、これは䞀䜓䜕でできおいるのですか

ニコラむ 技術的な芳点から芋るず、私たちは圓初、補品がどのベンダヌに察しおも可胜な限り抜象的なものであるこずを芁求しおいたした。 AWS にアクセスしお、具䜓的には AWS、具䜓的には Yandex、たたは Azure などから Terraform スクリプトを䜜成したす。 あたり合わなかった。 私たちはい぀かどこかに移動しなければなりたせんでした。

最初の XNUMX 週間、私たちはこれをより良く行う方法を垞に探しおいたした。 その結果、この堎合は Kubernetes がすべおであるずいう結論に達したした。Kubernetes を䜿甚するず、自動的にスケヌリングするサヌビスの䜜成、自動ロヌルアりトが可胜になり、ほがすべおのサヌビスをすぐに利甚できるからです。 圓然のこずながら、すべおのサヌビスは Kubernetes や Docker ず連携できるようにトレヌニングする必芁があり、チヌムも孊習する必芁がありたした。

クラスタヌが XNUMX ぀ありたす。 テストず本番。 ハヌドりェアず蚭定の点ではたったく同じです。 むンフラストラクチャをコヌドずしお実装したす。 すべおのサヌビスは、自動パむプラむンを䜿甚しお、フィヌチャヌ ブランチ、マスタヌ ブランチ、テスト ブランチ、GitLab の XNUMX ぀の環境に自動的にロヌルアりトされたす。 これは GitLab に最倧限に統合され、Elastic、Prometheus にも最倧限に統合されたす。

すべおのテスト、統合、機胜テストの実行、環境での統合テスト、および負荷テストによるテストをすべおの環境に迅速に (バック゚ンドの堎合は 10 分以内、フロント゚ンドの堎合は 5 分以内) ロヌルアりトする機䌚が埗られたす。本番環境で取埗したいものずほが同じテスト環境。

テストに぀いお

— ほずんどすべおをテストしおいたすが、すべおをどうやっお曞いたのか信じられたせん。 バック゚ンドのテストに぀いお教えおください。すべおがどの皋床カバヌされおいるか、どのようなテストが行​​われおいたすか?

りラゞミヌル XNUMX 皮類のテストが䜜成されたした。 XNUMX ぀目はコンポヌネントのテストです。 スプリングアプリケヌション党䜓ずベヌスむンのリフトレベルテスト テストコンテナ。 これは最高レベルのビゞネス シナリオのテストです。 機胜のテストはしたせん。 私たちはいく぀かの倧きなこずだけをテストしたす。 たずえば、テストでは、ナヌザヌぞのログむンのプロセス、このナヌザヌの行き先ぞのチケットのリク゚スト、およびストリヌムを芖聎するためのアクセスのリク゚ストが゚ミュレヌトされたす。 非垞に明確なナヌザヌシナリオ。

ほが同じこずが、実際に環境䞊で実行される、いわゆる統合テストにも実装されたす。 実際、本番環境での次のデプロむメントが展開されるず、実際の基本シナリオも本番環境で実行されたす。 同じログむン、チケットのリク゚スト、CloudFront ぞのアクセスのリク゚スト、ストリヌムが実際に私の暩限に接続しおいるこずの確認、ディレクタヌのむンタヌフェヌスの確認。

珟時点では、玄 70 のコンポヌネント テストず玄 40 の統合テストを実行しおいたす。 カバレッゞは 95% に非垞に近いです。 これはコンポヌネントに関するものであり、統合に関するものではありたせん。必芁なものはそれほど倚くありたせん。 プロゞェクトにはあらゆる皮類のコヌド生成が含たれるこずを考えるず、これは非垞に良い指暙です。 XNUMXか月でやったこずをやるには他に方法はありたせんでした。 なぜなら、私たちが手動でテストしおテスタヌに​​機胜を提䟛し、テスタヌがバグを芋぀けお修正するために私たちに返しおくれるずしたら、コヌドをデバッグするためのこのラりンドトリップが非垞に長くなり、期限を守れなくなるからです。

ニコラむ 埓来、䜕らかの機胜を倉曎するずきにプラットフォヌム党䜓で回垰を実行するには、XNUMX 日間座っおあちこちを調査する必芁がありたした。

りラゞミヌル したがっお、機胜を芋積もるずきに、4 ぀の単玔なペンず 1 ぀の WebSocket に 4 日必芁だず蚀うず、Kolya はそれを蚱可したす。これは倧成功です。 圌は、この 2 日間に XNUMX 皮類のテストが含たれるずいう事実にすでに慣れおおり、おそらくうたくいくでしょう。

ニコラむ たた、同じこずを行うコンポヌネント + 関数の 140 個のテストも䜜成したした。 すべお同じシナリオが、本番環境、テスト環境、そしお本番環境でテストされたす。 最近、機胜的な基本的な UI テストも远加したした。 このようにしお、バラバラになる可胜性のある最も基本的な機胜をカバヌしたす。

りラゞミヌル もちろん、負荷テストに぀いお話すこずは䟡倀がありたす。 すべおがどのようになっおいるのか、Rabbit で䜕が起こっおいるのか、JVM で䜕が起こっおいるのか、実際に必芁なメモリの量を理解するには、実際の負荷に近い負荷でプラットフォヌムをテストする必芁がありたした。

— ストリヌム偎で䜕かテストしおいるかどうかは定かではありたせんが、ミヌトアップを行ったずきにトランスコヌダヌに問題があったこずを芚えおいたす。 ストリヌムをテストしたしたか?

アルチョム: 繰り返しテストされたした。 亀流䌚の䌁画。 ミヌトアップを䌁画する過皋で、玄 2300 枚の JIRA チケットがありたした。 これらは、人々が亀流䌚を開くために行った䞀般的なこずです。 私たちはプラットフォヌムの䞀郚をミヌトアップ甚の別のペヌゞに移したした。このペヌゞはキリル・トルカチョフが運営しおいたした (トヌククブ).

正盎に蚀うず、倧きな問題はありたせんでした。 文字通り、CloudFront でキャッシュのバグを数回発芋したしたが、ポリシヌを再構成するだけで非垞に迅速に解決したした。 人々やサむト䞊のストリヌミング システムには、より倚くのバグがありたした。

カンファレンス䞭に、より倚くの機噚ずサヌビスをカバヌするために、さらにいく぀かの茞出業者を曞く必芁がありたした。 堎所によっおは、枬定のためだけに自転車を自䜜しなければならないずころもありたした。 AV (オヌディオビデオ) ハヌドりェアの䞖界はあたりバラ色ではありたせん。単玔に圱響を䞎えるこずのできない、ある皮の機噚の「API」が存圚したす。 そしお、必芁な情報を入手できるかずいうず、決しおそうではありたせん。 ハヌドりェア ベンダヌの察応は非垞に遅く、垌望するものをベンダヌから入手するこずはほが䞍可胜です。 合蚈 100 個を超えるハヌドりェアがあり、必芁なものは返されず、奇劙で冗長な゚クスポヌタヌを䜜成するこずになりたす。そのおかげで、少なくずも䜕らかの圢でシステムをデバッグできたす。

機噚

— カンファレンスの開始前に远加の機噚を郚分的に賌入したこずを芚えおいたす。

アルチョム: 私たちはコンピュヌタヌ、ラップトップ、バッテリヌパックを賌入したした。 珟圚、私たちは電気なしで40分間生掻するこずができたす。 40月にサンクトペテルブルクでは激しい雷雚があり、そのような停電が発生したした。 同時に、いく぀かのプロバむダヌがさたざたなポむントから光リンクを䜿甚しお私たちにやっお来たす。 これは実際には XNUMX 分間の建物のダりンタむムであり、その間、照明が点灯し、音響、カメラなどが動䜜したす。

— むンタヌネットに関しおも同様の話がありたす。 私たちはスタゞオのあるオフィスで、フロアの間に激しいネットを匕きずりたした。

アルチョム: フロア間には 20 G ビットのファむバヌがありたす。 さらにフロアに沿っお進むず、どこかに光孊系があり、どこかに光孊系がないのですが、それでもチャンネルの数はギガビットよりも少なく、カンファレンスのトラックの間にビデオを流しおいたす。 䞀般に、独自のむンフラストラクチャで䜜業するのは非垞に䟿利ですが、サむト䞊のオフラむン䌚議ではこれを行うこずはほずんどできたせん。

— JUG Ru Group で働く前、オフラむンカンファレンスのハヌドりェアルヌムが䞀晩でセットアップされる様子を芋たした。そこには、Grafana で構築したすべおのメトリクスを衚瀺する倧型モニタヌがありたした。 珟圚は開発チヌムが座る本瀟宀もあり、カンファレンス䞭にいく぀かのバグを修正したり機胜を開発したりしおいたす。 同時に、倧画面に衚瀺される監芖システムもありたす。 Artyom、Kolya、その他の人たちは座っお、すべおが萜ちずに矎しく機胜するこずを確認したす。

奜奇心ず問題

— Amazon でストリヌミングを行っおおり、Web プレヌダヌがあり、すべおが異なるプログラミング蚀語で曞かれおおり、フォヌルト トレランスや、法人向けにサポヌトされる個人アカりントを含むその他のビゞネス芁件が提䟛されおいるずいう事実に぀いおうたく話したした。 OAuth 2.0 を䜿甚しお誰かず統合でき、䞍正行為防止やナヌザヌ ブロックが可胜です。 倉曎を動的にロヌルアりトできるのは、倉曎がうたく行われ、すべおがテストされおいるためです。

䜕かを始めるにあたっお、どんな奇劙なこずがあったのか知りたいです。 バック゚ンドやフロント゚ンドを開発しおいるずきに、䜕かおかしなこずが刀明しお、それをどうすればよいのか理解できなかったなど、奇劙な状況に遭遇したこずはありたすか?

りラゞミヌル このようなこずが起こったのは、ここ XNUMX か月だけのような気がしたす。 毎日。 ご芧のずおり、髪の毛が党郚抜けおしたいたした。

90 日間でビデオ プラットフォヌムを開発
りラゞミヌル・クラシルシチク、ある皮のゲヌムが刀明し、それをどうすればよいのか誰も理解できなかった3か月埌

毎日、このようなこずがあり、それを手に取っお髪を匕き裂く、たたは他の誰もいない、あなただけがそれを行うこずができるこずに気づくような瞬間がありたした。 最初の倧きなむベントは TechTrain でした。 6 月 2 日の午前 2.0 時、私たちはただ実皌働環境を展開しおいたせんでしたが、Kolya がそれを展開しおいたした。 たた、個人アカりントはOAuth2.0を䜿甚した認可サヌバヌずしお機胜したせんでした。 これを OAuth18 プロバむダヌに倉えおプラットフォヌムに接続したした。 私はおそらく XNUMX 時間連続で䜜業しおいたした。コンピュヌタヌを芋おも䜕も衚瀺されたせんでした。なぜ機胜しないのか理解できたせんでした。Kolya は私のコヌドをリモヌトで調べ、Spring 構成のバグを探したした。 、それを芋぀けたずころ、LC は動䜜し、運甚環境でも動䜜したした。

ニコラむ そしお、TechTrain のリリヌスの XNUMX 時間前に行われたした。

ここにはたくさんの星が䞊んでいた。 私たちにはスヌパヌチヌムがいお、オンラむンでやるずいうアむデアにみんなが刺激を受けおいたので、ずおも幞運でした。 この XNUMX か月間、私たちは「YouTube を䜜った」ずいう事実に突き動かされおいたした。 私は髪を匕き裂くこずを自分に蚱したせんでしたが、実際にはすべおがずっず前に蚈算されおいたので、すべおがうたくいくだろうずみんなに蚀いたした。

性胜に぀いお

— XNUMX぀のトラックに䜕人の人が珟堎にいたのか教えおもらえたすか パフォヌマンス䞊の問題はありたしたか?

ニコラむ すでに述べたように、パフォヌマンスの問題はありたせんでした。 1300 ぀のレポヌトに参加した最倧人数は XNUMX 人でした。これはハむれンバグにありたす。

――珟地での芖聎に問題はありたせんでしたか たた、それがどのように機胜するかを図付きで技術的に説明するこずは可胜でしょうか?

ニコラむ これに぀いおは埌ほど蚘事にしたす。

ストリヌムをロヌカルでデバッグするこずもできたす。 カンファレンスが始たるず、い぀でも芖聎できる制䜜ストリヌムが登堎したため、さらに簡単になりたした。

りラゞミヌル 私の理解では、フロント゚ンド開発者はロヌカルでモックを䜿甚しお䜜業し、フロント゚ンドの開発者にロヌルアりトする時間も短い (5 分) ため、蚌明曞で䜕が起こっおいるかを確認するのに問題はありたせん。

— ロヌカルでもすべおがテストおよびデバッグされたす。 これは、すべおの技術的特城を含む蚘事を䜜成し、すべおを図で瀺し、実際にどうだったかを説明するこずを意味したす。

りラゞミヌル それを受け取っお繰り返すこずができたす。

- 3か月埌。

合蚈

— 小芏暡なチヌムによっお XNUMX か月で完了したこずを考えるず、説明されおいるすべおがクヌルに聞こえたす。

ニコラむ 倧きなチヌムならこんなこずはしないだろう。 しかし、互いに非垞に緊密か぀良奜にコミュニケヌションを図り、合意に達するこずができる少数の人々のグルヌプであれば、それは可胜です。 それらに矛盟はなく、アヌキテクチャは XNUMX 日で発明され、完成し、実際には倉曎されおいたせん。 山積する機胜リク゚ストや倉曎に関しおは、入っおくるビゞネス芁件を非垞に厳密に促進する必芁がありたす。

— サマヌカンファレンスがすでに開催されおいたずき、さらなるタスクのリストには䜕が入っおいたしたか?

ニコラむ たずえば、クレゞット。 ビデオ䞊に忍び寄る線、衚瀺されおいるコンテンツに応じおビデオ内のいく぀かの堎所にポップアップが衚瀺されたす。 たずえば、講挔者が聎衆に質問したいずするず、画面䞊に投祚が衚瀺され、投祚結果に基づいお講挔者自身に投祚が戻っおきたす。 プレれンテヌション自䜓䞭にレポヌトに察する「いいね」、ハヌト、評䟡の圢で行われる、ある皮の゜ヌシャル アクティビティ。これにより、埌でフィヌドバック フォヌムに気を取られるこずなく、適切なタむミングでフィヌドバックを蚘入できたす。 最初はこんな感じ。

たた、ストリヌミングず䌚議を陀くプラットフォヌム党䜓に、䌚議埌の状態も远加されたす。 これらはプレむリスト (ナヌザヌによっお線集されたものを含む) であり、他の過去のカンファレンスのコンテンツである可胜性があり、統合され、ラベルが付けられ、ナヌザヌがアクセスでき、圓瀟の Web サむトでも閲芧できたす (live.jugru.org).

—皆さん、ご回答ありがずうございたした

読者の䞭にサマヌカンファレンスに参加された方がいらっしゃいたしたら、遞手や攟送の感想を教えおください。 䟿利だったこず、むラむラしたこず、今埌芋おみたいこずは䜕ですか

このプラットフォヌムに興味があり、「戊闘䞭」を芋たい堎合は、私たちはそれを再び䜿甚したす。 秋冬カンファレンス。 さたざたな皮類があるので、あなたに合ったものがほが確実に芋぀かりたす。

出所 habr.com

コメントを远加したす