>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン セキュリティ
PHP

独自のプログラミングアリーナの作り方 — omegaUpコードベースの探索

349 スター

何千人もの参加者がいるプログラミングオリンピックを主催する必要があるとします。問題を作成するだけではありません。ソリューションを受け取り、リアルタイムで検証し、負荷を監視し、誰かが悪意のあるコードでサーバーをダウンさせることがないようにする必要があります。見覚えがありますか?

これはまさにomegaUpが存在する理由です——ラテンアメリカの教育イニシアティブから生まれたオープンソースプラットフォームで、コンテストの運営とアルゴリズム教育のための強力なツールへと成長しました。今日、私たちはこのプロジェクトの「フードの下」を覗き込み、なぜコンピュータサイエンスの教師だけでなく、プロの開発者にも興味深いものになり得るかを探ります。

omegaUp

omegaUpとは?

短く言えば、プログラミング問題の自動ジャッジのためのフル功能的エコシステム(Online Judge)です。このプロジェクトは2つの主要な課題を解決します:

  1. 自動化:教師は数百ものコードリストを手動で確認する必要がありません。システムはコードをコンパイルし、テストを通じて実行し、自動的にスコアを割り当てます。
  2. セキュリティ:他人のコードを実行することは常にリスクが伴います。omegaUpは高度な分離メカニズムを使用して、参加者のコードが「サンドボックス」から逃げ出さないことを保証します。

このプロジェクトはGitHubで長年にわたり公開されており、印象的なコミュニティを集め、C++、Java、Pythonなどのオリンピック定番を含む複数のプログラミング言語をサポートしています。

フードの下:アーキテクチャの詳細

プロジェクトはいくつかの主要コンポーネントに分かれています。怖いモノリスではなく、モジュラーシステムです。

1. フロントエンドとAPI(メインリポジトリ)

メインリポジトリには、ユーザー、問題、コンテストを管理するロジックが含まれています。

  • バックエンド:PHPで書かれています。開発者はDAO(Data Access Objects)とVO(Value Objects)パターンを使用しており、これによりデータベースとのやり取りが予測可能で構造的になります。すべてのコントローラーはfrontend/server/src/Controllersフォルダにあります。
  • 国際化:プロジェクトはスペイン語、英語、ポルトガル語をサポートしています。大規模プロジェクトでi18nを適切に整理する方法を知りたいなら、frontend/templatesを見てみてください。

2. システムの心臓部——Grader(Quarkプロジェクト)

最も興味深いことはQuarkという別のサービスで行われます。ここでは提出されたソリューションのキューが管理されます。各問題が時間通りにジャッジされ、結果がユーザーに配信されることを保証する責任があります。

3. セキュリティ——omegajail

データベースを削除しないようにコードを伴う「ブラックボックス」を実行するにはどうすればいいですか?omegaUpはomegajailを使用します。これはLinuxコンテナとseccomp-bpfに基づいたメカニズムです。面白い事実:Chromiumプロジェクト(Google)の作品を基に構築されています。システムはシステムコール、メモリ、実行時間を厳密に制限します。

開発者がこのプロジェクトに注意を払うべき理由

独自のLeetCodeクローンを立ち上げる予定がなくても、omegaUpコードベースから学ぶべきことはたくさんあります:

  • インタラクティブ問題への対応:libinteractiveライブラリのおかげで、プラットフォームはユーザーのコードがジャッジプログラムとリアルタイムでやり取りする必要がある問題を作成できます。これは単にテキストファイルを比較するよりもはるかに複雑です。
  • テストの整備:プロジェクトは активноにyarn testを使用しています。依存関係が多い複雑なシステムをテストでカバーする方法を見ることができます。
  • スケーラビリティ:システムは主要なコンテスト中のピーク負荷を処理するように設計されています。

プロジェクトをローカルで実行するには?

開発者は優れたデプロイメントガイドを用意しています。クイックスタートには、標準的なツールセット(gityarn)とサブモジュール構築のための忍耐が少し必要です。

# Клонируем со всеми внутренними зависимостями
git clone --recurse-submodules https://github.com/omegaup/omegaup
cd omegaup

# Если забыли про субмодули при клонировании:
git submodule update --init --recursive

# Установка зависимостей
yarn install
yarn test

実用的な価値:どこで使用するか?

  1. 社内での使用:内部ハッカソンや候補者のスキル評価の運営に。独自のプラットフォームがあれば、データと問題を完全にコントロールできます。
  2. 教育目的:コースを教えていたり、大学で働いている場合、omegaUpはルーティン作業から解放されるターンキーソリューションです。
  3. オープンソースへの貢献:リポジトリには800以上の未解決イシューがあります。プロジェクトはコントリビューターを受け入れており、何万人もの人々に使われている本当に需要のある製品に取り組む絶好の機会です。

omegaUpは「単なる問題サイト」ではありません。コード実行のための安全で高負荷のシステムを構築する方法を示す成熟したエンジニアリングプロジェクトです。コンパイラ、Linuxプロセスの分離に興味がある場合、または単にPHPアーキテクチャの品質実装を見たい場合——このリポジトリは確かにGitHubスターに値します。

オリンピックシステムアーキテクトに挑戦する準備はできましたか?環境構築ドキュメントから始めましょう。

関連プロジェクト