バックエンド開発者向けの新しいチャンピオンシップ:HighLoad Cup







ITプロフェッショナル向けのコンテストが流行しています:Olympiadプログラミングの緊密なパーティーであるData Scienceのタスクを備えたKaggleは、人工知能のコンテストの人気サイトを獲得し、モバイル開発者向けのあらゆる種類のハッカソン、管理者向けのオリンピック、セキュリティフラグを獲得します。 どの分野の専門家でも、自分にふさわしい動機を見つけ、参加し、汲み上げ、何かに勝つことは難しくないと思われます。







この点については、Web開発者のみが奪われたままでした。 Mail.Ru Groupは、この迷惑な誤解を修正することを決定し、Webサービスのバックエンド開発と管理の接点である競争力のあるプラットフォームであるHighLoadCupをご紹介できることをうれしく思います。







自分自身を優れたWeb開発者と見なすと、展開と高負荷が可能になります-ようこそ!







日付、賞品



主なものである最初のパイロットチャンピオンシップは、昨日、8月10日に始まり、夏の終わりまで続きます。8月31日に賞品をまとめて贈ります。 賞金プールには、1位がApple iPad Air 2 Cellular 16 GB、2位と3位がWD MyCloud 6 TB、4〜6位を含むWD MyPassport Ultra 2 TBが含まれます。 伝統的に、TOP-20参加者には、チャンピオンシップのシンボルが入ったTシャツが贈られます。







チャンピオンシップメカニクス



参加者には、特定の構造のデータを処理し、このデータのAPIを実装する小さなWebサービスを作成するタスクが与えられます。 実装されたサービスを含むコンテナがサーバーにアップロードされ、そこでコンテナを開始してHTTPリクエストでシェルを開始します。 このような攻撃の結果に基づいて、正解と不正解の数、RPS、および応答速度を計算し、所定のメトリックに従って評価テーブルを作成します。 最速かつ最もフォールトトレラントなサービスの作成者であり、勝者です。







仕組み



ソリューションは、ローカルにインストールされたドッカークライアントを使用して特別なリポジトリに送信されます。 その後、送信されたサービスは、Mail.Ru Group Technoparkラボの従業員によって開発されたCodeHub-CodeRunnerシステムによって自動的にチェックされます。







ソリューションを設計するとき、参加者は何にも制限されず、古典的なスクリプトスキームやDBMSから、メモリに必要なデータをすべて保持するCの自作自転車まで、あらゆる言語と技術スタックを絶対に使用できます。







そのため、実際には次のことを行う必要があります。









すべてのソリューションは、Intel Xeon x86_64 2 GHz 4コア、4 GB RAM、10 GB HDDを備えた同一サーバー上のドッカーコンテナとして実行されます。







発射システム









検証システムはもともと別のチャンピオンシップ用に作成され(これはまだ開始されていません;)、Highloadコンテスト用に最終決定されました。 内部では、ファントムエンジンを備えたyandexタンクが起動します。これは、線形に成長する負荷プロファイルで複数のストリームで発火します。 以前は、シェル化の前に、ユーザーのソリューションは、コンテナに囲まれたJSONファイルからのデータを処理するために数分程度の時間を持っています。 これらのデータを正しく処理することは、勝利に必要な条件です。 検証には、高速検証と評価検証の2種類があります。 以下について。







ソリューションの確認方法



ソリューション検証の種類:迅速な砲撃と評価の検証。







エクスプレスシェルは1日に何度でも利用でき、ソリューションの評価チェックの約1/10になります。 エクスプレスチェックは構造的に評価と違いはありませんが、異なるデータセットを使用し、評価チェックのソリューションの準備ができているかどうかを確認する方法です。 迅速な砲撃は3分以内で終了すると想定されています。







評価チェックは、エクスプレスチェックと同じ方法で、より多くのデータとクエリに対して実行されます。 このようなもの:









したがって、参加者が必要な構造にデータを分解する能力が最初にチェックされます。 シェル化の最初のフェーズでは、初期負荷が小さいサービスの動作がチェックされます。 2番目-データサービスの更新の正確さとキャッシュの無効化の可能性(ソリューションで必要な場合)。 砲撃の第3段階では、強度の解決策を感じるために荷重を徐々に増やします。







レーティングチェックの結果によると、参加者は現在のチャンピオンシップのリーダーボードの特定の場所を占有します。 合計で、砲撃は約15分間続きます(キューがない場合)。 砲撃の合計リクエスト数:162090。おそらく、選手権中にこの数は増えるでしょう。







メンバーのソリューションは、docker buildコマンドを使用して取得されるdockerコンテナです。 ディスク上のコンテナの最大サイズは5 GBを超えてはなりません。 検証システムは、最初にdocker pullを実行してから、docker runを実行します。 成功すると、ソリューションの砲撃が開始されます。 参加者は、任意のサーバーテクノロジー、言語、フレームワークを自由に使用できます(C ++、Java + Tomcat、Python + Django、Ruby + RoR、JavaScript + NodeJs、Haskellなど)。 また、データストレージ:MySQL、Redis、MongoDB、Memcached-dockerに詰め込めるすべてのもの。







シェル化の結果として、ログとメトリックが取得され、決定ページにグラフ形式で参加者に表示されます。 以下のメトリックは個別に追跡されます。















ソリューションの評価は次のように考慮されます。APIがシェル処理中に提供したすべての正解に時間をかけます。 これに、誤った回答またはリクエストごとにペナルティ時間、つまり受信できなかった回答を追加します(ペナルティ時間は常に合計リクエストタイムアウトに等しくなります)。 合計時間が他の人よりも短い参加者は、リーダーボードで上位にあり、チャンピオンシップの勝者になるチャンスがあります。







挑戦する



最初のチャンピオンシップのタスクでは、参加者は旅行者サービスにWeb-APIを提供する高速サーバーを作成する必要があります。 サーバーの初期データには、ユーザー(旅行者)、場所(ランドマーク)、訪問(訪問)の3種類のエンティティがあります。 それぞれに独自のフィールドセットがあります。 次のクエリを実装する必要があります。









要求ごとの最大ペナルティ時間はタイムアウトに等しく、2秒(2kマイクロ秒)です。 起動する直前に、JSON形式のデータをサービスと共にコンテナに入れます(これらは/ tmp / dataで利用可能になります)。 このデータを差し引いて内部構造に分配する(たとえば、データベースに分解する)ために、しばらく時間がかかります。







HTTP要求は、ポート80の上げられたコンテナーに到着し、Host:travels.comヘッダーはHTTP / 1.1で、1つの要求-1つの接続です。 ネットワーク損失は完全にありません。

タスクの詳細な説明、クイックスタートのミニチュートリアル、およびその他のサポート資料は、チャンピオンシップWebサイトで参照できます。 さらに、私たちの電報に来て、彼らはいつも質問に答えて喜んでいます。







サインアップして、勝ちます! 頑張って








All Articles