最初のHighLoad Cupどのように生き残ったのか

みなさんこんにちは 少し前に、 HighLoad Cupは終了したした。 倚くの参加者は、内郚からチャンピオンのデバむスに぀いお倚くの質問を受けたした。 この蚘事では、Mail.Ru Groupのチャンピオンシップず教育プロゞェクトの開発チヌムが、チャンピオンのデバむス、内郚メカニズム、最初のHighLoad Cupの歎史に぀いお少し説明したす













たず、開発者を代衚しお、チャンピオンシップのすべおの参加者に感謝したす。 はい、これらはあなただけでなく、3週間の曞き蟌みでした。 DCで数泊し、オフィスで数日䌑みたした。 ファむアヌ ありがずう







チャンピオンシップのアむデアは、人生から、日垞生掻から生たれたした。 ほずんどの圓瀟のWeb補品は、公開されおいる「パブリック」プロゞェクトです。 むンタヌネットでの生掻は、開発者のコ​​ンピュヌタヌでの生掻ずは倚少異なりたす。 怜玢゚ンゞンがdr死し、矀衆が矀がる。







アプリケヌションのサヌバヌ偎を開発するずき、アプリケヌションのパフォヌマンスを蚈算する必芁がありたす。 䜕かが芋萜ずされ、プロゞェクトがサヌバヌ容量の限界たたは倖郚にあるこずが起こりたす。 䞍十分な蚘述のアプリケヌションを高䟡な機噚に投入する-健康なアプリケヌションを凊理する方法は、最善の解決策ではありたせん。 適切な決定は、アプリケヌションを正しく蚘述し、アヌキテクチャずバック゚ンドを正しく実装するこずです。







ロシアコヌドカップ、MLBootCamp、ロシアAiカップ、ロシアデザむンカップ、その他倚くの遞手暩を開催しおいたす。 それらのすべおが良いですが、本圓のバック゚ンド開発者のその珟実の生掻は十分ではありたせん。 HighLoad Cupでは、たさにこの開発の珟実を倧衆に届けようずしたした。







どのように機胜したすか



チャンピオンシップの開発における䞻な質問はこれでした゜リュヌションをどこでどのようにひねるのか いく぀かのオプションを怜蚎したした。







  1. 参加者は自分で鉄を芋぀けたす。
  2. 参加者にフルアクセスの仮想アクセスを提䟛したす。
  3. gitをコックし、゜リュヌションを起動するスクリプトの䜜成を䟝頌したす。
  4. Docker。
  5. 攟浪者。
  6. 刀断する。
  7. メンバヌはKVMたたはVirtualBoxむメヌゞを提䟛したす。
  8. バヌゞョン1〜7の誘導䜓ずその組み合わせ。


実装を怜蚎する際には、2぀のポむントが重芁でした。







  1. すべおの参加者に同じ条件。
  2. セキュリティ。


結果が鉄に䟝存するこずは䞍可胜です。 私たちの堎合、たったく同じマシンですべおの゜リュヌションをひねる必芁があるこずがわかりたした。 1぀の方が良いですが、1日あたり48の決定参加者に十分です。 そのため、同䞀の車䞡を保有する必芁がありたす。







はい、圌らはDockerを遞択したした。 安党性を確保しながら、操䜜性、シンプルさ、利䟿性の劥協案ずしお。 Dockerのないオプションは、開発者評議䌚での投祚数が少なかった。 条件を満たしおいないか、実装に倚倧な劎力が必芁であるか、過床に耇雑でした。 docker自䜓はあたり透明ではありたせんが、3぀のdocker compose configオプションはすでに䟡倀がありたす。







アヌキテクチャは次のずおりです。







  1. サむト Webアプリケヌション。 蚪問者ペヌゞを提䟛したす。
  2. 保管 docker-registry +特別なプロキシサヌバヌに基づきたす。
  3. ランナヌ。 特別な掗濯機には、タンク付きのコンテナが含たれたす。
  4. ハブ。 すべおのメカニズムを実装するアプリケヌション。 サむトはハブを芋おいたす。 ハブは、ストヌリヌずランナヌを調べたす。 必芁な堎所で必芁なものを起動し、結果をサむトに提䟛したす。


サむトに関するすべおの質問の少なくずも。 登録、承認、タスク、ラりンド。 すべおが暙準的か぀兞型的です。







Storadzh。 Dockerレゞストリはすぐに䜿甚できたすが、アクセス区分ずストレヌゞ制限は実装しおいたせん。 無制限に実行するこずは玠晎らしいこずですが、私たちはそれを買う䜙裕はありたせん。 ある参加者の決定を他の参加者が利甚できないようにする必芁がありたす。 アクセス制埡ずストレヌゞ制限のためにストレヌゞのプロキシを開発したした。







ハブ 実際、このコンポヌネントは、発生するすべおのこずを管理したす。 「シェル化」のキュヌの圢成から始たり、結果の凊理で終わりたす。 圌女はすべおのランナヌに぀いお知っおおり、テストを実行しお結果を求めたす。 圌の芁求に応じおサむトにそれらを䞎えたす。







ランナヌ。 ここでは、すべおが䞀緒に起動され、結果の収集ず凊理、それらの䞀時保管が行われたす。 自立型車は、シャヌシベンダヌたで同じですが、党䞖界から切り離され、䞀方向に機胜したす。 はい、リク゚ストはハブにのみ送信できたす。 B-セキュリティ。 単䞀コンポヌネントは、デヌタベヌスの耇補ずダりンロヌドずずもに耇補で起動されたす。 に぀いお-耐障害性。 初期構成には2人のランナヌがいたす。







より詳现に。







開発偎のランナヌは、JSONの「ハブ」およびdocker-registryず察話するサヌバヌのセットです。 ハブのコマンドに埓っお、サヌバヌのセットがdocker-composeを圢成し、必芁なタンクず゜リュヌションのペアを起動し、結果を凊理しお保存し、オンデマンドで提䟛したす。 私たちの仕事は、すべおの人に同じ条件を保蚌するこずです。 同䞀で高負荷に十分です。 これを行うには、次のこずを行いたす。









これらの察策により、シェリング結果の安定性、生産性、ゞッタヌが小さくなりたす。







この耇合䜓を展開しおテストするこずにより、これらすべおをKVMコンテナヌにラップするこずにしたした。 これにより、次の利益が埗られたす。







A.カヌネルパニックホストではなく仮想マシンのリブヌト、BIOS、機噚のフラッシュの詊行、ホスト䞊の䜕かの倉曎の詊行などを防ぐため。

B.ディスクの読み取りず曞き蟌みのkbpsを制限したす。 2぀の同䞀のディスクはありたせん。 それらは垞に異なった働きをしたす。 iotune仮想ディスクの制限を䜿甚しお、均䞀性を確保できたす。

B.コンテナをすばやく再茞送、移動、たたは傟けたす。

D.さらに、䞊蚘から、ホストマシン䞊のネットワヌクを制限したす。







このような゜リュヌションの利点はむンフラストラクチャにありたす。 参加者に远加のパンを提䟛するこずはありたせんが、操䜜のためにいく぀かの問題を簡玠化したす。 kvm仮想化のオヌバヌヘッドは、私たちの堎合の損倱ではありたせん。䞻なこずは、条件が同じであるこずです。







Dockerコンテナでは、特暩のないナヌザヌも再マップされたした。 ルヌト暩限でりェブサヌバヌを起動したせんよね







開発時間はゆっくりですが、確実に終わりたした。 チャンピオンシップぞの関心がどのようなものになるのか、それ以䞊の努力が必芁かどうかはたったくわかりたせんでした。 タスクは、この遞手暩に加えお、銬車ず小さなカヌトです。 私たちは決めたした-立ち䞊げたす。 最初のトラむアルを開始したした。 静かにやっおみたす。 MVPの準備ができたした。 動䜜したす。 詊しおみたしょう、そしお衚瀺されたす。 たぶんこれはすべお無駄で面癜くないでしょうか







行こう







簡単なタスク、いく぀かのデヌタを準備しおいたす。 デヌタゞェネレヌタヌ。 発衚し、いく぀かの投皿を行いたす。 空の評䟡を芋おください。 私たちは経隓しおいたす。 すべおを監芖するのが倧奜きです。 ゜ケットの電圧からsmartctlパラメヌタヌたで。 それが発衚の日でした。













「䜕かが壊れおいる」ずいう疑念を抱いお、私たちの決断を抌し進め、それをトップで芋お、勝぀こずを恐れおいたす。 たた心配です。 最初のメンバヌが衚瀺されたす。 喜ぶ しかし、私たちの゜リュヌションは䟝然ずしおトップです。 ただ心配です。







「離陞しない」こずを心配する必芁はありたせんでした。 技術はITチャンピオンシップでは比范的非暙準であるため、参加者は積極的にテスト実行を詊み始めたした。 評䟡は1日に1回に制限され、30分かかりたす。テストの評䟡は決しお制限されたせん。 それらを制限するのはどういうわけか䞍公平です。







テスト実行のキュヌが圢成されたした。 2人のランナヌが行方䞍明でした。 すでに翌朝、私たちはより倚くのランナヌを展開するための機噚を探しおいたした。すでに翌日の倕方にDCに座っお、それぞれの埮劙な蚭定を芋逃さないように2台の新しい車をセットアップしたした。 サヌビス䞭の4台の車。 䞊蚘の2぀を蚭定しおいるずきに、8぀以䞊でなければならないこずが明らかになりたした。







物語の堎所は終わりたした。 掚定条件の40人の参加者には200 GBで十分なはずです。 最初の5日間の参加者はさらに10倍になりたした。 しかし、ロヌンチのほが前に、状況は倉化しおいたす。゜リュヌションぞのク゚リの数ずデヌタの量が増加したした。 私たちは、数テラバむトが必芁であるこずを理解しおいたす、泚文したす。 その間、結果甚のストレヌゞスペヌスが流れたした。 少しの株を蚌明したすが、これは短期間では十分ではありたせん。













サむトを備えた控えめな仮想マシンが喫煙を開始し、プロセスをノンストップで実行したす。 その間、譊備員甚のディスクを入手したす。 たったく亀換できたせん。 提䟛されたせん。 スロットなし。 30分間のダりンタむムず過剰充填を求めお、新しい車を準備しおいたす。













参加者はさらにデヌタを芁求したす。 はい。 わずか20 MBです。 たあ、これは䜕もありたせん。 1 GBが必芁です。 簡単ですね。 実際、これは、凊理に必芁なリ゜ヌスず結果を保存する堎所の䞡方で、100倍の増加です。







8人のランナヌはすでに少数であるこずを理解しおいたす。 もっず探しおいたす。 たったく同じ構成の別のプロゞェクトから4台の車を取り倖し、コックしたす。 十二人のランナヌ。 それだけです そのような車はもうありたせん。







数回、私たちはファりルの危機にonしおいたす。 倖出先で䜕床か自分を救いたす。 そしお、より倚くの参加者がいたす。







ピヌク



これはチャンピオンシップチャットで最も頻繁に䜿甚される蚀葉のようです。 それらを重芖しないこずも可胜です。 これは、アプリケヌションの実装曲線が原因である可胜性がありたす。 たずえば、同じGC。 䞀方、RPSは10Kに達し、そのような速床では、システム内の誰でもアプリケヌションでマむクロバヌストを匕き起こす可胜性がありたす。 ほずんどの人がピヌクを迎えたした。







この段階で、私たちは実際、参加者が私たちに蚀ったようにアヌキテクチャの省略に぀いお芚えおいたした。タンクはディスクに曞き蟌みたす。 圌はたくさん曞いおいたす。 タンク自䜓によっお実行されるディスク操䜜は、システムにくしゃみを匕き起こす可胜性が非垞に高いです。 これを解決するオプションは䜕でしたか RAMディスクに入れる







aランナヌディスク党䜓。

bタンクが曞き蟌むセクション。







たず、テストマシンで、RAM内のランナヌディスク党䜓を取り出したした。 これによりディスク操䜜は保蚌されたせんでしたが、この構成のほずんどの゜リュヌションはOOMから萜ちたした。 理由を芋぀けるこずができたせんでした。 より倚くのメモリがありたした。 おそらく、゜リュヌションは䜕らかの圢でマシンで䜿甚可胜なメモリの合蚈を参照しおおり、゜リュヌションの制限が倉曎されなかったずきに4倍になりたした。 これにより、メモリ゜リュヌションによる誀った消費ず、それに続くOOM Killが発生する可胜性がありたす。







䞊行しお、RAMディスクのタンクセクションを取り倖しお実隓を実斜したした。 圌は管理し、トップ50は垞に機胜したした。 これが解決策でした。 この動きは、ピヌクに関するすべおの問題を解決したせんでした。 圌らは小さくなり、それほど重芁ではなくなりたしたが、圌らの存圚はただ研究されおいたした。







その間、期限は切れたす。 C / C ++のトップで、自転車、トップ25のPHPの目障り、1日の決勝戊、そしお私たちは3週間寝おいたせんでした。







ファむナル



圓初、フィナヌレは定期的なラりンドずしお蚈画され、各決定が順番に開始され、最良のものが特定されたした。 これは正矩を保蚌するものではありたせんでした。異なる起動での同じ゜リュヌションは、たずもな結果の実行を瀺したした。 最良の決定を正盎か぀公正に識別するために、参加者自身が提案した方法が採甚され、最終決定を䞋したした。 結果を埗るには、最善の最小の時間を費やしたす。 したがっお、私たちは皆の機䌚を平等にしたす。 曞く日、テストする倜。 始めたす。 チャンピオンシップの䞭で最長の決勝戊でした。 ファむナリストの決定は1日半テストされたした。







芁玄するず、次のこずに泚意しおください。







  1. コンピュヌティング鉄リ゜ヌスの蚈画における倚くの間違いは、私たちの生掻をより楜しくしたした。 私たちはもう少し経隓を積んでいたす。
  2. 倧きなRPSではピヌクは避けられたせん。 もちろん、それらを氎平にする必芁がありたす。
  3. 最初に発明されたタスクは単玔すぎたした。 思う。


そしお、実際には、これですべおです。 開発チヌムの目を通しお、これらは3週間の激しいハヌドコアでした。 開発者を代衚しお、参加者に感謝したいず思いたす あなたがいなければ、私たちはそれほど倚くのドラむブを埗られなかっただろう。 私たちはあなたず䞀緒に画面の反察偎のチャンピオンシップに参加したした ありがずう マキシムxammi-1 Kislenko、Boris bkolganov Kolganov 、Yegor geoolekom Komarov、Ilya liofz Lebedev、Ilya sat2707 Stytsenkoが詊したした 。














All Articles