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

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

BOINCの設計と構造 

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

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

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

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

 同種の冗長性（同じプラットフォームのコンピューターにのみワークユニットを送信する。例：Windows XP SP2のみ）
 ワークユニット・トリッキング（ワークユニットが完了する前にサーバに情報を送信する）
 ローカリティ・スケジューリング（必要なファイルをすでに持っているコンピュータにワークユニットを送信し、オンデマンドで作業を作成する）
 ホストのパラメータに基づいた作業配布（たとえば、512MBのRAMを必要とするワークユニットは、少なくともその量のRAMを持つホストにのみ送信される）

サーバはC++で記述された2つのCGIプログラムと（通常は）5つのデーモンで構成されている。クライアントが実行する計算をワークユニットと呼ぶ。結果はワークユニットのインスタンスを記述する（それが完了していなくても）。プロジェクトでは明示的に結果を作成することはなく、サーバがワークユニットからそれらを自動的に作成する。

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

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

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

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

トランジショナー（transitioner）デーモンは、ワークユニットと結果の状態遷移を処理する。また、ワークユニットが最初に作成されたときや、さらに必要なときに（たとえば、結果が無効であることが判明した場合）、ワークユニットから結果を生成する。

クライアント構造 

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

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

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

BOINCは、一般のユーザーには見えないようにする機能があり、そのため許可されていないインストールや、検知が困難なインストールが行われる危険がある。これにより、BOINCクレジットサブカルチャー中でのステータスを巡って他の人と競争しているホビイストたちによるBOINCクレジットポイントの蓄積を促進する。

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

参照項目 

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

脚注 

分散コンピューティングプロジェクト
分散コンピューティングアーキテクチャ