BOINCクライアント-サーバ技術

BOINCクライアント-サーバ技術とは、BOINCが機能するモデルを指す。BOINCフレームワークは、クライアントサーバアーキテクチャの下で動作する2つのレイヤーで構成されている。BOINCソフトウェアが各マシンにインストールされると、サーバはクライアントにタスクを送信する。操作はクライアント側で行われ、その結果はサーバ側にアップロードされる。

1. BOINCの設計と構造
--------------

BOINCは、分散コンピューティングのプロジェクトを始めたい人のために、自由な構造になるように設計されている。
BOINCは、サーバシステムとクライアントソフトウェアで構成され、相互に通信してワークユニットを配布、処理、返却する。

2. サーバ構造
--------

BOINCシステムの主要部分はバックエンドサーバである。このサーバは1台のマシンでも複数台のマシンでも動作するので、BOINCは任意の規模のプロジェクトにも簡単に対応することができる。BOINCサーバは、Linuxベースのコンピュータ上で動作し、ウェブシステムとデータベースシステムにApache、PHP、MySQLを使用する。

科学計算は、参加者のコンピュータ上で実行される。ユーザーのクライアントから科学研究者のデータベースにアップロードされた後、バックエンドサーバが結果を検証し、分析する。検証作業には、すべてのタスクを複数の参加者のコンピュータで実行し、結果を比較することが含まれる。

BOINCサーバは、次の機能も提供する。

同種の冗長性
ワークユニット・トリッキング
ローカリティ・スケジューリング
ホストのパラメータに基づいた作業配布サーバはC++で記述された2つのCGIプログラムと5つのデーモンで構成されている。クライアントが実行する計算をワークユニットと呼ぶ。結果はワークユニットのインスタンスを記述する。プロジェクトでは明示的に結果を作成することはなく、サーバがワークユニットからそれらを自動的に作成する。

スケジューラーCGIプログラムは、クライアントからの要求を処理し、完了した結果を受け取り、新しい作業を計算機に送信する。スケジューラーは、データベースから直接に利用可能な結果を取得するわけではない。その代わりに、フィーダーデーモンがデータベースからタスクをロードして共有メモリブロックに保持し、スケジューラーがそれを読み取る。スケジューラーがそれらの結果をクライアントに送信した後、フィーダーは、共有メモリブロックの空の「スロット」を定期的に埋める。

ワークユニットのすべての結果が完了して返されると、バリデーターはそれをチェックする。一般的な方法の一つは、結果を相互に比較することである。バリデーターは、結果どうしのファジー比較を行うカスタムプロジェクトコードを持つことも、ビット単位で比較することもできる。バリデーターは、少なくとも一部の結果が有効であると判断した場合、ワークユニットと有効な結果にマークを付け、正当な結果を返したユーザーにはクレジットが付与され、「正規の結果」が選択されるdate=March 2016}}。バリデーターがどの結果が有効なのか判断できない場合や、すべての結果を無効であると宣言した場合は、新しい結果を生成して、バリデーターがどの結果が有効なのか判断できるようになるまで、このサイクルを繰り返すことができる。

次に、アシミレーターデーモンが、プロジェクト固有のコードを使用して、正規の結果を処理する。たとえば、ファイルを解析してデータベースに情報を保存するプロジェクトもあれば、ファイルを別の場所にコピーするだけのプロジェクトもある。また、アシミレーターは、返されたデータに基づいて、より多くのワークユニットを生成することもできる。

ファイル_デリーターデーモンは、アシミレーターが処理した後の出力ファイルを削除したり、不要になった入力ファイルを削除する。

トランジショナーデーモンは、ワークユニットと結果の状態遷移を処理する。また、ワークユニットが最初に作成されたときや、さらに必要なときに、ワークユニットから結果を生成する。

3. クライアント構造
-----------

クライアント上のBOINCは、いくつかの独立したアプリケーションで構造化されている。これらはBOINCリモート・プロシージャ・コールメカニズムを使用して相互に通信する。   

これらのコンポーネントアプリケーションは次のとおり。

プログラム boinc}} はコア・クライアントである。
コア・クライアントは、次のようなプロセスである。
クライアントとサーバ間の通信を行う。
コア・クライアントは、科学アプリケーションのダウンロード、統一されたロギング・メカニズムの提供、科学アプリケーションのバイナリが最新であることの確認、科学アプリケーション間でCPUリソースをスケジューリングする。
コア・クライアントは新しい科学アプリケーションをダウンロードすることができるが、それ自体はアップデートしない。BOINCの開発者は、自動更新は許容できないセキュリティ上のリスクdate=January 2008}}が生じるだけでなく、コンピュータにおける自動更新手順が持つあらゆるリスクが発生すると考えた。
Unixでは、コア・クライアントは通常はデーモンとして実行される。
Windowsでは、BOINCは当初、Windowsサービスではなく、普通のアプリケーションであった。BOINC Client for Windowsバージョン5.2.13以降では、インストール時に「サービスのインストール」というオプションが追加される。
BOINCクライアントソフトウェアのインストール方法に応じて、デーモンのようにバックグラウンドで動作することも、個々のユーザーがログインしたときに開始することもできる。コア・クライアントが提供するソフトウェアのバージョン管理やワークユニット処理により、科学アプリケーションのコーディングが大幅に簡素化される。
1つまたは複数の科学アプリケーション。科学アプリケーションは、科学的な計算の中核を担う。BOINCフレームワークを利用した分散計算プロジェクトごとに特定の科学アプリケーションがある。科学アプリケーションは、BOINCデーモンを使用して、ワークユニットをアップロードやダウンロードし、サーバと統計情報を交換する。
boincmgr}} は、リモート・プロシージャ・コールを使用してコア・アプリケーションと通信するGUIである。デフォルトでは、コア・クライアントは同じコンピュータからの接続しか許可しないが、他のコンピュータからの接続を許可するように構成することができる。このメカニズムにより、一人のユーザーが単一のワークステーションからBOINCインストールのファームを管理できる。RPCメカニズムを使用することの欠点は、ハッカーが標的のコンピューターに侵入するための経路となる可能性があるため、しばしばセキュリティリスクがあると感じられることである。
GUIは、クロスプラットフォームのWxWidgetsツールキットを使用して記述されており、異なるプラットフォームでも同じユーザーエクスペリエンスを提供する。ユーザーは、BOINCコア・クライアントに接続し、それらのクライアントに新しい科学アプリケーションをインストールするよう指示し、進行中の計算の進行状況の監視や、BOINCシステムのメッセージログを閲覧できる。
BOINCスクリーンセーバー。これは、科学アプリケーションがユーザーのスクリーンセーバーウィンドウにグラフィックを表示するフレームワークを提供する。BOINCスクリーンセーバーは、BOINCグラフィックスAPI、OpenGL、GLUTツールキットを使用してコーディングされている。通常、BOINCスクリーンセーバーは、進行中の作業の詳細を示すアニメーションを表示し、おそらくはグラフやチャート等のデータ視覚化グラフィックを表示する。
科学アプリケーションの中には、スクリーンセーバー機能を提供していないものがある。この場合、スクリーンセーバーは画面上を跳ね回る小さなBOINCロゴを表示する。BOINCは、一般のユーザーには見えないようにする機能があり、そのため許可されていないインストールや、検知が困難なインストールが行われる危険がある。これにより、BOINCクレジットサブカルチャー中でのステータスを巡って他の人と競争しているホビイストたちによるBOINCクレジットポイントの蓄積を促進する。

4. クライアントプラットフォーム
-----------------



5. 参照項目
-------

BOINC
BOINCクレジットシステム
分散コンピューティング

6. 脚注
-----