ScalarDL 設計ドキュメント
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
この設計ドキュメントでは、ScalarDL の設計と実装について簡単に説明します。ScalarDL の背景と目的については、ScalarDL の概要 を参照してください。
設計目標
ScalarDL の主な設計目標は、データの改ざん検知性と高性能のスケーラビリティの両方を実現することです。ScalarDL は、ACID 準拠、正確なファイナリティ、線形化可能な一貫性、および高可用性を提供します。ScalarDL のパフォーマンスは、基盤となるデータベースのパフォーマンスに大きく依存しますが、疎結合アーキテクチャのため、基盤となるデータベースを要件に適したものに置き換えることが可能です。使いやすさとシンプルさも、ScalarDL をスケーラブルにするための鍵となるため、主な設計目標の一部です。
故障モ デル
ScalarDL は、ビザンチン故障を扱う以前の研究の標準的な仮定に則っています。1 そのため、ScalarDL は、ビザンチン故障ノード (たとえば、Ledger コンポーネント) が任意に動作すると想定しています。つまり、故障の動作に関する仮定はありません。
データモデル
ScalarDL は、データをアセットの集合として抽象化します。アセットは任意のデータですが、データの履歴として考える方が適しています。たとえば、アセットは有形 (不動産やハードウェア) から無形 (契約や知的財産) まで多岐にわたります。
アセットは1つ以上のアセットレコードで構成され、各アセットレコードはアセット ID と世代で識別されます。世代が M
のアセットレコードには、世代が M-1
の以前のアセットレコードの暗号化ハッシュがあり、ハッシュチェーンを形成します。そのため、チェーンをトラバースすることで、中間のアセットレコードの削除または更新を検出できます。
さらに、複数のアセット間にはチェーン構造が存在します。このチェーンは、ScalarDL では「コントラクト」と呼ばれるビジネスロジックまたはアプリケーションロジックによって構築される関係です。たとえば、銀行アプリケーションでは 、あるアカウントから別のアカウントに送金されると、両方のアカウントが更新され、アセット間にこのような関係が作成されます。
コントラクト
ScalarDL は、コントラクト (スマートコントラクトとも呼ばれます) をデジタル署名されたビジネスロジックとして管理します。コントラクトとその引数は、コントラクト所有者の秘密鍵でデジタル署名され、ScalarDL に渡されます。このメカニズムにより、コントラクトは所有者のみが実行でき、システムはデータの改ざんなどの悪意のあるアクティビティを検出できます。
ユーザーは、アセットの読み取りやアセットの書き込みなどのインターフェイスを使用して、コントラクトに任意のビジネスロジックを定義できます。たとえば、銀行アプリケーションでは、口座の作成、預金、引き出し、支払いをコントラクトとして記述できます。詳細については、シンプルな銀行口座アプリケーションのサンプル を参照してください。
いつどのように ScalarDL はビザンチン故障を検知するか
ScalarDL のビザ ンチン故障検出プロトコルの鍵は、Ledger (プライマリサーバー) と Auditor (セカンダリサーバー) が、分散的かつ並行的にトランザクションの部分的な順序付けについて合意することです。プロトコルは、順序付けフェーズ、コミットフェーズ、検証フェーズの3つのフェーズで構成されます。
- はじめに、順序付けフェーズでは、Auditor がクライアントから与えられたトランザクションを、競合に基づいて部分的に事前順序付けします。
- 次に、コミットフェーズでは、Ledger は Auditor によって順序付けされたトランザクションを実行してコミットします。
- そして、検証フェーズでは、Auditor は Ledger によって与えられた順序付け結果を検証してトランザクションを実行します。
この3フェーズプロトコルでは、Ledger と Auditor の両方が正常である限り、両方のデータベースが同じ正しい (厳密に直列化可能な) 状態と結果を導き出します。どちらかがビザンチン故障を起こした場合 (たとえば、レコードを改ざんした場合)、その状態または結果は乖離します。データベースシステムの外部でこの乖離が観察できる場合、正しい ScalarDL クライアントはそれを検出できます。言い換えると、ScalarDL は、クライアントがデータベースシステムからの応答で乖離を観察した場合にのみ、ビザンチン故障を検出します。そのため、ScalarDLは故障を即座に検出することはできませんが、検証オーバーヘッドを削減しつつ、乖離した状態や結果を使用しようとした際に故障が検出されることを保証します。