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

BOINCクライアント-サーバ技術（ボインク・クライアントサーバぎじゅつ、）とは、BOINCが機能するモデルを指す。BOINCフレームワークは、クライアントサーバアーキテクチャの下で動作する2つのレイヤーで構成されている。BOINCソフトウェアが各マシンにインストールされると、サーバはクライアントにタスクを送信する。操作はクライアント側で行われ、その結果はサーバ側にアップロードされる。
サーバ構造.
BOINCシステムの主要部分はバックエンドサーバである。このサーバは1台のマシンでも複数台のマシンでも動作するので、BOINCは任意の規模のプロジェクトにも簡単に対応することができる。BOINCサーバは、Linuxベースのコンピュータ上で動作し、ウェブシステムとデータベースシステムにApache、PHP、MySQLを使用する。
科学計算は、参加者のコンピュータ上で実行される。ユーザーのクライアントから科学研究者のデータベースにアップロードされた後、バックエンドサーバが結果を検証し、分析する。検証作業には、すべてのタスクを複数の参加者のコンピュータで実行し、結果を比較することが含まれる。
BOINCサーバは、次の機能も提供する。
サーバはC++で記述された2つのCGIプログラムと（通常は）5つのデーモンで構成されている。クライアントが実行する計算をワークユニットと呼ぶ。結果はワークユニットのインスタンスを記述する（それが完了していなくても）。プロジェクトでは明示的に結果を作成することはなく、サーバがワークユニットからそれらを自動的に作成する。
スケジューラー（scheduler）CGIプログラムは、クライアントからの要求を処理し、完了した結果を受け取り、新しい作業を計算機に送信する。スケジューラーは、データベースから直接に利用可能な結果を取得するわけではない。その代わりに、フィーダー（feeder）デーモンがデータベースからタスクをロードして共有メモリブロックに保持し、スケジューラーがそれを読み取る。スケジューラーがそれらの結果をクライアントに送信した後、フィーダーは、共有メモリブロックの空の「スロット」を定期的に埋める。
ワークユニットのすべての結果が完了して返されると、バリデーター（validator）はそれをチェックする。一般的な方法の一つは、結果を相互に比較することである。バリデーターは、結果どうしのファジー比較を行うカスタムプロジェクトコードを持つことも、ビット単位で比較することもできる。バリデーターは、少なくとも一部の結果が有効であると判断した場合、ワークユニットと有効な結果にマークを付け、正当な結果を返したユーザーにはクレジットが付与され、「正規の結果」が選択される。バリデーターがどの結果が有効なのか判断できない場合や、すべての結果を無効であると宣言した場合は、新しい結果を生成して、バリデーターがどの結果が有効なのか判断できるようになるまで、このサイクルを繰り返すことができる。
次に、アシミレーター（assimilator）デーモンが、プロジェクト固有のコードを使用して、正規の結果を処理する。たとえば、ファイルを解析してデータベースに情報を保存するプロジェクトもあれば、ファイルを別の場所にコピーするだけのプロジェクトもある。また、アシミレーターは、返されたデータに基づいて、より多くのワークユニットを生成することもできる。
ファイル_デリーター（file_deleter）デーモンは、アシミレーターが処理した後の出力ファイルを削除したり、不要になった入力ファイルを削除する。
トランジショナー（transitioner）デーモンは、ワークユニットと結果の状態遷移を処理する。また、ワークユニットが最初に作成されたときや、さらに必要なときに（たとえば、結果が無効であることが判明した場合）、ワークユニットから結果を生成する。
クライアント構造.
クライアント上のBOINCは、いくつかの独立したアプリケーションで構造化されている。これらはBOINCリモート・プロシージャ・コール（RPC）メカニズムを使用して相互に通信する。    
これらのコンポーネントアプリケーションは次のとおり。
BOINCは、一般のユーザーには見えないようにする機能があり、そのため許可されていないインストールや、検知が困難なインストールが行われる危険がある。これにより、BOINCクレジットサブカルチャー中でのステータスを巡って他の人と競争しているホビイストたちによるBOINCクレジットポイントの蓄積を促進する。