96個の選択された検証者を生成した方法

投稿日:

(インディカ)(9月5日2019)

最後に記事を公開したのは、 5年前、タイトルは Chefでウェブサーバーを調理する。 5年は書かないのに長い時間です。私がその主題に興味を失ったわけではありません。代わりに、私は静かに最高のものから学んでいました。

しかし、議論の主題は、今では桁違いに大きくなっていることを除いて、変わっていません。当時、私は単一のWebサーバーを作成していましたが、現在は96のElected Verifier(EV)を生成しています。

なぜ96なのですか?

Unificationでは、基本的なコンセンサスアルゴリズムを変更しています。イーサリアム。分散ステークガバナンスの実装には、24台のEVからなる4つのグループが含まれ、ブロック検証の内外でローテーションします。これらのローテーションのガバナンスは、投票とステーキングのプロセスを通じて促進されます。最終結果は、より分散したコンソーシアムネットワークになります。

ホワイトペーパーやシミュレーションでこの主題を理論化することは、これまでのところしかできません。前進するための最善の方法は、それを作成し、それで遊んで、欠点を体験することです。

継続的デリバリー

私たちは自分のアイデアを迅速に評価できる立場になりたいと考えています。 。テスト駆動開発は、単体テストの作成に限定する必要はありません。

特定のGitSHAについて、単一のコマンドを実行してメインチェーンの任意のバージョンを起動し、その状態を評価してから、 DNAの改良。

生産の準備ができていると確信するまで、このプロセスを改良し続けたいと考えています。ソフトウェア開発のプロセスは、この単純な反復にすぎません。

システムが複雑になるほど、これらの各部分は難しくなります。 96個のEVのインスタンス化は重要な問題であり、この記事の焦点です。

定義

まず、展開するものを定義します。インスタンス化されたクラスターは主にEVで構成され、RPCが有効になっているものと有効になっていないものがあります。クラスターには、UND蛇口、ブロックエクスプローラー、場合によっては監視ノードを含めることもできます。

これらのクラスターはJSONファイルで指定され、プロビジョニングスタックの目的で指定できます。

クラスター内のすべてのノードには一意のハンドルが必要であり、次のアドレス指定スキーマが選択されています:

x = "{cluster\_name}-{configuration}-{instance\_type}-{index}"

例:

alpha-basic-ev-1

上記のステートメントで、「基本」という言葉は、4つのEVと1つのブロックエクスプローラーが存在する構成を指します。 「アルファ」という言葉は実験の名前です。

スタック

Kubernetesを使用することもできました。

ただし、投資もしたいと考えています。コミュニティが独自のEVを起動するために使用できるツールを作成します。 Ansibleを選択したのは、そのシンプルさと、CentOSを対象としたプレイブックがどのアーキテクチャでも機能するか、簡単に適応できるからです。

また、過去にChefとPuppetの両方を評価しましたが、私はAnsibleのシンプルさのために両方を捨てました。 ChefとPuppetはターゲットマシンにソフトウェアコンポーネントを必要としますが、AnsibleはSSH接続のみを必要とします。

ここにはスタックに関する量子物理学はありません。成功に向けて必要なステップ。スタックは次のもので構成されています:

  • AWSユーザーとAWSAPI
  • AWS起動テンプレート
  • AWSタグ
  • 最小限のbashスタートアップスクリプト
  • Githubからのbashスクリプトのカール
  • タグからのAnsibleホスト変数の設定
  • Ansibleを使用したホストのプロビジョニング

AWSAPIとAWSユーザー

AWSは、APIと許可されたユーザーを介してサービスを非常にきめ細かく制御できます。 APIは、Pythonboto3ライブラリを介して適切にアクセスできます。 APIを使用する前に、IAMインターフェースを介して関連するユーザーを作成します。ユーザーは、一般的なユーザーアクセスIDとシークレットペアです。

ユーザーは1つ以上のポリシーに関連付けることができます。ポリシーは、一連のリソースに対する一連の許可または拒否されたアクションで構成されます。

スポーンユーザーには、EC2インスタンスを作成するための最小限のアクションと、リソースセット全体を読み取るアクションが添付されたポリシーがあります。

テンプレートの起動

AWSが提供する重要な機能の1つは起動テンプレートです。

起動テンプレートを使用すると、ベースAMI(インスタンスを構築するための仮想マシンイメージの識別子)を指定して事前設定できますタグと実行スクリプトの2つの重要なコンポーネントを含む設定。さらに、マシンが属するセキュリティグループを指定できます。

起動テンプレートはバージョン管理でき、インスタンスはAWSユーザーから起動できます。

タグ

すべてのEC2インスタンスは、設定されているタグに基づいて一意です。次の情報がノードに送信されます。

  • 名前(ノードの一意の識別子)
  • クラス(インスタンスのタイプ)
  • インデックス(インスタンスの位置)
  • 構成(インスタンス化されるさまざまなクラスター)
  • SHA(Git SHA)
  • RegistrationIP(のIPアドレス登録タワー)

これらのタグはそれぞれAnsibleホスト変数に設定されます。

Bashを使用したブートストラップ

Bashブートストラップスクリプトはホストを準備しますプロビジョニング用。実行されるジョブには、基本的なPython環境のインストール、AWSタグの解析、Ansibleホスト変数ファイルへの書き込み、ノードのタイプに適したAnsibleプレイブックの選択などがあります。

Ansible

最後に、ノードはAnsibleでプロビジョニングされます。インターネット上には他にも十分なリソースがあるので、Ansibleに逸脱することはありません。ここでは特別なことは何もありませんが、通常はAnsibleを使用してリモートサーバーを構成しますが、この場合はローカルサーバーを構成しています。

登録タワー

登録タワーを使用しますネットワークをブートストラップするためのブートノードの代わりに。 EVは、インスタンス化時に登録ノードにIPアドレスを登録し、静的ノードのリストはサービスのアクティブ化の前に取得されます。

このようなタワーを使用する利点は、健康統計などの任意のデータの登録を開始できることであり、評価ループを閉じるのに役立ちます。

EVがインスタンス化されると、登録APIに、クラスター名、IPアドレス、インデックス、インスタンスタイプが書き込まれます。

評価

評価の主な焦点は、EVの方法を決定することです。実験は成功しました。成功の条件は別の記事で取り上げられます。ただし、注意を払うべき当面の指標はコストです。

t2-microインスタンスの価格は0.012 / hrです。これらのうち96個を1時間実行するコストは、わずか1ドルです。これはコストエクスプローラーで確認できます。

さらに

このスタックは美しく機能します。 1つのコマンドで、完全に接続され、ブロックを伝播するメインチェーンが一貫して完璧に起動します。このスタックで私が最も気に入っているのは、それがファイアアンドフォーゲットであるということです。クラスターをインスタンス化し、インターネットから切断して、ジャグリングを行うことができます。戻ったときにメインチェーンの準備ができています。

これは、次のステップの強力な基盤として機能します。コンセンサスDNAのさまざまな構成の評価を開始できます。次の記事「DistributedStakeGovernance」で、現在の単純なコンセンサスアルゴリズムを成熟させ、残忍な現実に照らして評価します。

EVプロビジョニングスタックのソースコードは、次の場所にあります。 https://github.com/unification-com/ev-provision

Unification Gitterに参加してください:https://gitter.im/unification-com

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です