異なるブロックチェーンアーキテクチャの分析を行い、暗号学、コンセンサスアルゴリズムなどの重要な技術について詳細に紹介しました。また、ブロックチェーンにおけるビットコインとイーサリアムのスマートコントラクトの開発ガイドも提供しました。さらに、ブロックチェーンの応用事例を紹介し、ブロックチェーンに関する一般的な問題について議論しました。
アーキテクチャに関する学びを共有し、アーキテクチャの変革が IT 時代の発展を促進し、インターネット + からブロックチェーン + へのアーキテクチャの進化について、読者と個人的な感想や見解を共有します。
典型的な IT アーキテクチャに注目する職業習慣を身につけました。ブロックチェーンに関連する技術を分解して見ると、仮想通貨、暗号学、コンセンサスアルゴリズム、P2P 通信などの技術の大部分は、ビットコインよりも前に存在していました。ブロックチェーンがこれほど重要になったのは、これらの技術を有機的に組み合わせ、分散型、自動化された取引の実行、自治管理のアーキテクチャを形成したからです。したがって、ブロックチェーンは技術の革新というよりも、アーキテクチャの革新と言えるでしょう。
多くの人は社会の進歩や時代の変革を特定の技術の発明に帰結しがちですが、実際には重要な役割を果たしているのはしばしばアーキテクチャの革新です。IT の発展の歴史を振り返ると、重大な変革は常に新しいアーキテクチャの出現によって新しい能力が生まれ、新しい応用がもたらされ、その応用が変革を促進してきました。アーキテクチャと技術の関係は、交響楽の指揮者と楽器演奏者の関係に似ています。優れた指揮者がさまざまな楽器の演奏者を指揮して壮大な交響曲を演奏するように、良いアーキテクチャは異なる技術機能を提供するコンポーネントを空間と時間の組み合わせを通じて、情報のコミュニケーションと調整を行い、特定の機能を持つ完全な計算システムを形成します。
コンピュータの発展の歴史を見ると、技術革新、機械技術、電気機械技術、真空管技術、半導体トランジスタ技術、集積回路技術、大規模集積回路技術は、コンピュータの発展に推進力をもたらしましたが、真に時代を画する意味を持ち、決定的な役割を果たしたのは計算アーキテクチャの革新です。これは有名なチューリングマシンモデルからも明らかです。
イギリスの科学者アラン・チューリングは、1937 年に有名な論文「計算可能な数について、及びその決定問題への応用」を発表しました。この中で、Entscheidungsproblem はドイツ語で「決定可能性問題」を意味します。「決定可能性」とは、ある決定問題に対して、プログラムを作成でき、任意の要素を入力としてそのプログラムを実行することで、特定の問題の答えを得ることができる場合、その決定問題は決定可能であると呼ばれます。チューリングは論文の中で、コンピュータの抽象モデルであるチューリングマシンの概念を提案しました。チューリングマシンは、コントローラー、無限に延長可能なテープ、テープ上を左右に移動する読み書きヘッドで構成されています。このアーキテクチャは非常にシンプルですが、理論的にはあらゆる直感的に計算可能な関数を計算することができます。しかし同時に、チューリングは決定問題を解決するアルゴリズムは存在しないことも証明しました。つまり、解決できない計算問題が存在するということです。そして、すべての計算可能なアルゴリズムはチューリングマシンによって実行可能です。チューリングの理論は、任意の計算を実行するプログラムを作成できる汎用コンピュータの製造が可能であることを証明しました。
チューリングマシンの意義は、シンプルなアーキテクチャを通じて、元々は生物だけが持っていた計算能力を無機物に与えたことです。これは人類の歴史において非常に大きな影響を与える画期的な出来事です。チューリングマシンはコンピュータの理論モデルとして、現代のコンピュータ科学の基礎を築きました。
1945 年、チューリングマシンモデルに基づいて、ハンガリー出身の科学者フォン・ノイマンは「ストレージプログラム」(Stored-program)の概念を提唱しました。「ストレージプログラム」とは、プログラム命令とデータを同じストレージに置くことを指し、プログラム命令のストレージアドレスとデータのストレージアドレスが同じストレージの異なる物理位置を指します。単一のアドレスおよびデータバスを使用し、命令とデータの幅は同じです。プロセッサは命令を実行する際、まずストレージから命令を取り出してデコードし、次にオペランドを取り出して計算を実行します。プログラムカウンタ(PC)は、CPU 内部で命令とデータのストレージ位置を指示するレジスタです。CPU はプログラムカウンタが提供するアドレス情報を使用してストレージをアドレス指定し、必要な命令やデータを見つけ、命令をデコードし、最後に命令に従った操作を実行し、プログラムを順次実行します。このアーキテクチャは「フォン・ノイマン」アーキテクチャと呼ばれ、また「プリンストン」アーキテクチャとも呼ばれています。
フォン・ノイマンアーキテクチャのコンピュータは、プログラム命令とデータがバスを共有するため、並列処理能力が低く、データ処理速度が遅く、いわゆる「フォン・ノイマンボトルネック」が存在します。しかし、このアーキテクチャの特徴はシンプルであり、独立したプログラムストレージとデータストレージを必要とせず、周辺機器の複雑性を大幅に低下させます。そのため、今日に至るまで、このアーキテクチャは現在のコンピュータの主流アーキテクチャであり、ほとんどのコンピュータはフォン・ノイマンアーキテクチャに属しています。典型的なチップには、Intel、ARM の ARM7、MIPS などがあり、これらはフォン・ノイマンアーキテクチャをサポートしています。
最初の計算機は固定用途のプログラムのみを含んでいました。現代の一部のコンピュータは依然としてこのような設計方式を維持しており、通常は簡素化または教育目的のためです。たとえば、計算機は固定の数学計算プログラムしか持っておらず、ワープロソフトウェアとして使用することはできず、ゲームをプレイすることもできません。この機械のプログラムを変更したい場合は、回路を変更したり、構造を変更したり、さらにはこの機械を再設計する必要があります。もちろん、最初のコンピュータはそれほどプログラム可能に設計されていませんでした。当時の「プログラムの再書き込み」とは、紙とペンでプログラムの手順を設計し、次にエンジニアリングの詳細を策定し、最後に機械の回路配線や構造を変更することを指していました。
ストレージプログラム型コンピュータの概念は、すべてを変えました。特定の命令セットアーキテクチャを作成し、いわゆる演算を一連のプログラム命令の実行詳細に変換することで、この機械はより柔軟になります。フォン・ノイマン構造とストレージプログラム型コンピュータは相互に通用する用語であり、その使用法は以下に示します。一方、ハーバード構造は、プログラムデータと通常のデータを分けて保存する設計概念ですが、フォン・ノイマンアーキテクチャを完全に突破するものではありません。
ストレージプログラム型の概念は、プログラムが実行中に自分自身のプログラムの演算内容を変更できることも可能にします。この概念の設計動機の一つは、プログラムが自ら内容を追加したり、プログラム命令のストレージ位置を変更したりできるようにすることです。なぜなら、初期の設計ではユーザーが手動で変更する必要があったからです。しかし、アドレスレジスタと間接位置アクセスがハードウェア構造の必須メカニズムになると、この機能は以前ほど重要ではなくなりました。また、プログラムの自己修正という特徴は、理解やデバッグの難しさを引き起こすため、現代のプログラム設計では放棄されています。さらに、現代の中央処理装置のパイプラインとキャッシュメカニズムは、この機能の効率を低下させます。
全体的に見て、命令をデータとして扱う概念は、アセンブリ言語、コンパイラおよび他の自動プログラミングツールの実現を可能にしました。これらの「自動プログラミングプログラム」を使用して、人間が理解しやすい方法でプログラムを記述できます[1]。局所的に見ると、I/O を強調するマシン、例えばBitbltは、画面上のパターンを変更するには、カスタマイズされたハードウェアがなければ不可能だと考えられていました。しかし、その後、これらの機能は「実行中コンパイル」技術によって効果的に達成できることが示されました。
この構造には欠陥があることは言うまでもありません。以下に述べるフォン・ノイマンボトルネックの他、プログラムの変更は非常に有害である可能性があります。意図的であれ設計ミスであれ、単純なストレージプログラム型コンピュータでは、設計が不良なプログラムが自己や他のプログラム、さらにはオペレーティングシステムを傷つけ、フリーズを引き起こす可能性があります。バッファオーバーフローはその典型的な例です。また、他のプログラムを作成または変更する能力は、マルウェアの出現を引き起こしました。バッファオーバーフローを利用して、悪意のあるプログラムは呼び出しスタックを上書きし、コードを書き換え、他のプログラムのファイルを変更して連鎖的な破壊を引き起こすことができます。メモリ保護メカニズムや他の形式のアクセス制御は、意図しないまたは悪意のあるコードの変更から保護することができます。
ハーバードアーキテクチャ#
フォン・ノイマンアーキテクチャとは異なるのがハーバードアーキテクチャです。ハーバードアーキテクチャは、プログラム命令ストレージとデータストレージを分ける計算アーキテクチャです。
中央処理装置はまずプログラム命令ストレージからプログラム命令の内容を読み取り、デコードしてデータアドレスを取得し、次に対応するデータストレージからデータを読み取り、次の操作(通常は実行)を行います。プログラム命令ストレージとデータストレージが分かれているため、命令とデータは異なるデータ幅を持つことができます。ハーバードアーキテクチャのマイクロプロセッサは通常、高い実行効率を持っています。プログラム命令とデータ命令は別々に組織され、ストレージされ、実行時に次の命令を事前に読み取ることができます。現在、ハーバード構造を使用している中央処理装置やマイクロコントローラは多数あり、信号処理チップ(DSP)、モトローラの MC68 シリーズ、Zilog の Z8 シリーズ、ATMEL の AVR シリーズ、ARM の ARM9、ARM10、ARM11 などが含まれます。ハーバードアーキテクチャの利点は効率が高いことですが、アーキテクチャが複雑で、周辺機器の接続と処理に高い要求があり、周辺機器が少ないアプリケーションシーンに適しています。
ハーバードアーキテクチャの比較#
改良されたハーバードアーキテクチャは、ハーバードアーキテクチャに似ていますが、命令とデータの厳密な分離を緩和し、CPU が 2 つ(またはそれ以上)のメモリバスに同時にアクセスできることを許可します。最も一般的な変更は、共通のアドレス空間によってサポートされる個別の命令とデータキャッシュです。純粋なハーバードマシンとして機能する場合、CPU はキャッシュを介して命令を実行します。外部ストレージにアクセスする際には、フォン・ノイマンマシンのように機能します(コードはデータのように移動でき、強力なスキルのようです)。この改良は現代のプロセッサに普遍的に存在し、ARM アーキテクチャ、Power Architecture、x86 プロセッサなどが含まれます。時には、実際には「修正」された事実を無視してハーバードアーキテクチャと呼ばれることもあります。
別の変更は、命令ストレージ(たとえば ROM またはフラッシュメモリ)と CPU の間に通路を提供し、命令ストレージからの単語を読み取り専用データとして扱うことを許可します。この技術は、Atmel の AVR などの一部のマイクロコントローラで使用されます。これにより、テキスト文字列や関数テーブルなどの定数データにアクセスできるようになり、データストレージに最初にコピーすることなく、読み取り / 書き込み変数のための貴重(かつ電力を消費する)データストレージを保持できます。特別なマシン言語命令は、命令ストレージからデータを読み取る機能を提供します。(これは、命令自体に埋め込まれた定数データとは異なりますが、単一の定数に対しては、両方のメカニズムが相互に置き換え可能です。)
影響力のあるアーキテクチャの特徴#
汎用 CPU にとって、ハーバードアーキテクチャは効率が高いものの、複雑さとコストの高さが一般的なシーンには適さないことを決定づけています。X86 が市場を迅速に占拠できたのも、シンプルで実用的なフォン・ノイマンアーキテクチャを採用したからです。このことから、業界に大きな影響を与えるアーキテクチャは一般的に以下の特徴を持っています。
(1)シンプルさ
チューリングマシンモデルでもフォン・ノイマンアーキテクチャでも、第一印象はそのシンプルさです。つまり、アーキテクチャを構成するコンポーネントが比較的少なく、コンポーネント間の協調も比較的シンプルであり、このアーキテクチャに基づいて作られた製品も比較的シンプルで使いやすいです。
(2)完全性
アーキテクチャを構成するコンポーネントは、必要な数だけ存在し、欠けているものはなく、他の要素を追加することなく、目標領域のすべての問題を完全に解決できます。
(3)汎用性
アーキテクチャは一定の適用シーンを持っており、あまりにも特化したシーンでは影響力を持つことは難しいため、汎用性は主流アーキテクチャを形成するための必要条件です。
(4)トレードオフ
流行するアーキテクチャは、効率とコストの間で最適なバランスを見つけます。技術の先進性を強調しすぎてコストを無視することは、多くの製品が市場を失う原因となります。
(5)互換性
良いアーキテクチャは必ずオープンで互換性のあるアーキテクチャです。実際、フォン・ノイマンアーキテクチャとハーバードアーキテクチャは絶対的に対立するアーキテクチャではありません。現代のフォン・ノイマンアーキテクチャのチップも多くのハーバードアーキテクチャの特徴を吸収しています。たとえば、CPU 内の命令キャッシュなどは、ハーバードアーキテクチャの影響を受けています。
(6)拡張性
アーキテクチャが流行し、持続可能な発展ができるかどうかを判断する最も重要な指標は、その拡張性です。良いアーキテクチャは、シンプルな複製、配置、組み合わせを通じて、最も基本的なシステムを線形に拡張し、機能と性能を線形に向上させます。
1950 年、チューリングは「計算機械と知能」というタイトルの論文を発表し、機械が思考するかどうかを測定する基準である「チューリングテスト」を初めて提案しました。簡単に言えば、チューリングは、ある人とコンピュータを隔離し、画面を通じてタイピングで対話させ、5 分間の対話の後、その人が 70%の確率で対話相手が人間であると考える場合、そのコンピュータはテストに合格し、人間のような思考能力を持つと見なされると考えました。1997 年 5 月 11 日に IBM のディープブルーがロシアのチェス世界チャンピオンカスパロフに 6 局の試合で 1 勝 5 分の成績で勝利したことや、2016 年 3 月に Google の AlphaGo が韓国の囲碁世界チャンピオン李世石に 4 対 1 の圧倒的な優位で勝利したことを考えると、これらの 2 つの人間と機械の戦いの結果は、厳密な意味でのチューリングテストではありませんが、コンピュータが人間に似た知能を持つことに疑問を持つ人は少ないでしょう。コンピュータは依然として人間が書いたプログラムに依存して入力を必要とし、多くの人間にとって比較的簡単なタスク、たとえばパターン認識や感情分析などは、コンピュータにとっては非常に難しいですが、その深層学習能力や意思決定能力は疑いの余地がありません。
チューリングは 60 年以上前に、人工無機物であるコンピュータがシンプルなチューリングマシンアーキテクチャの基礎の上に配置され、組み合わさることで、ある側面で人間の知能に匹敵する機械に進化することを予測していたと言えます。今日、大データ、人工知能(AI)、およびロボットの発展は、私たちを無機物の知能の時代に正式に導いています。ケビン・ケリーの『制御を失う』の中の重要な思想の一つは、人造無機物がますます生命体のように振る舞うということです。「シリコンベースの知能」という用語も登場し、生物の「炭素ベースの知能」に対して、「シリコンベースの知能」はより強力である可能性があります。進化の速度から見ると、明らかに「炭素ベースの知能」はムーアの法則の速度で進化する「シリコンベースの知能」と比較できません。したがって、多くの人は無機物の知能が人間の知能を超えることは必然的に早く起こると考えています。そのため、科学者ホーキング、企業家でテスラの会長であるマスク、ビル・ゲイツが人工知能の発展に懸念を示すのは不思議ではありません。2015 年 7 月にアルゼンチンで開催された 2015 年国際人工知能連合会議(IJCAI)では、1000 人以上の科学者が公開書簡に署名し、国連に自律兵器の開発を禁止するよう求めました。ホーキング、マスク、ウォズニアック(アップル創業者の一人)などが署名し、人工知能がもたらす脅威に対する警告を発しました。
アーキテクトの仕事から得たインスピレーションについて話したいと思います。以下は、インターネット + からブロックチェーン + への発展のトレンドに関するいくつかの観察と見解です。
チューリングマシンモデルは現代のコンピュータの理論的基盤を築き、フォン・ノイマンアーキテクチャは 60 年以上にわたりコンピュータの発展を主導してきました。この 60 年間、マクロレベルの IT アーキテクチャは数回の大きな変化を経験しました。IT システムを構成する最も底層の視点から見ると、これらの大きな変化は、新しいシーンでフォン・ノイマンボトルネックを突破するための上層アーキテクチャの調整に帰結します。これはどう理解すればよいのでしょうか?単一のコンピュータを見れば、フォン・ノイマンアーキテクチャの効率の限界は明らかであり、主に命令の直列実行、プログラムとデータの共有バス、計算とデータの分離に現れます。一方、IT レベルで直面する問題、パフォーマンスや拡張性の問題は、底層のフォン・ノイマンアーキテクチャのコンピュータを特定のプロトコルに従って一定のアーキテクチャで組み合わせることで、全体としてビジネスの機能と非機能の要求を満たす必要があります。
IT アーキテクチャの発展の歴史を振り返ると、伝統的な集中型の大中型機時代、PC を中心としたクライアント / サーバー(Client/Server)時代、インターネット時代、クラウドコンピューティング、大データ時代、そして現在はインターネット技術と伝統産業の深い融合のインターネット + 時代に至るまで、大まかに分けることができます。以下に各時代の状況を簡単に紹介します。
集中型の大中型機時代では、単一の能力、垂直拡張能力が強調されました。リソースの利用率を向上させるために、CPU の分時システム、メモリの仮想化、計算の仮想化など、各レベルの仮想化技術が大型機時代に登場しました。
1960 年代、アメリカのコンピュータ科学者であり、人工知能(Artificial Intelligence)という概念を最初に提唱したジョン・マッカーシー(John McCarthy)は、公用計算(Utility Computing)の概念を提唱し、将来的には計算も水や電気のように公共サービスとして提供されると予言しました。これが今日私たちがよく知るクラウドコンピューティングの理念です。
大型機の集中管理と大型機から生まれた仮想化技術は、クラウドコンピューティングの最初の概念を育みました。しかし、情報化の普及に伴い、大型機はコスト、オープン性、拡張性の面で多様化、普及化する情報処理の要求を満たすことができなくなりました。
オープン時代の到来#
1970 年代、UNIX オペレーティングシステムと C 言語の登場により、オープンで相互接続された理念が芽生え、IT アーキテクチャの発展に一筋の光明をもたらしました。また、大型機と端末間の通信から、大型機間の通信の需要がネットワーク技術の発展を促しました。この過程で、イーサネット技術、TCP/IP 技術が次々と誕生しました。特に 1981 年、国際標準化機構(ISO)はオープンシステム間相互接続アーキテクチャの基本参考モデル(OSI/RM)を提案しました。これが有名な OSI オープンネットワーク七層アーキテクチャであり、異なるシステムの異なるアプリケーションが相互に透明に通信する基盤を築きました。
クライアント / サーバー(CS)分散型時代#
1980 年代に入ると、個人の計算ニーズが PC 時代の到来を促しました。PC の普及に伴い、局所的なネットワークの需要も高まりました。ローカルエリアネットワークの発展は、クライアント / サーバー(Client/Server、CS)分散型アーキテクチャを生み出しました。クライアント / サーバーアーキテクチャは、集中型ホスト内の一部の作業負荷をクライアントに分配して実行し、ホストの負担を軽減し、全体のシステムの並列処理能力を向上させるものです。これは、各コンピュータのフォン・ノイマンアーキテクチャを変更することなく、複数のフォン・ノイマンアーキテクチャの小型コンピュータで並列計算を行うことで、集中型の大型機内の直列計算を置き換えることに相当します。
分散型アーキテクチャの重要な特徴は、計算とストレージがネットワーク内の複数のノードに分散され、ソフトウェアによってタスクの配布と実行スケジュールが制御されることです。これにより、タスクは複数のノードで同時に並列実行され、上層のアプリケーションに対して、リモートノードへのアクセスがローカルシステムへのアクセスと同じインターフェース環境を提供します。初期のリモートプロシージャコール(RPC)、分散計算環境(DCE)、一般オブジェクト要求ブローカー(CORBA)などはすべて分散フレームワークです。これらの分散フレームワークは、計算の分散を強調しています。分散の範囲は企業の内部ネットワークに限られています。
最初の分散ストレージは、DEC 社が 1970 年代に開発した分散ファイルシステム File Access Listener(FAL)です。SUN は 1985 年に最初の広く使用される分散ファイルシステム NFS を発表しました。その後、AFS、KFS、DFS、IBM の GPFS、SUN が開発した Lustre などが次々と登場しました。
分散型アーキテクチャは、コストを節約するだけでなく、効率を向上させ、計算を顧客に近づけることができました。従来のように、顧客が大型機に接続された端末に行かなければ計算タスクを提出できないということはなくなりました。
インターネット時代#
1990 年代に入ると、インターネットが普及し始めました。インターネットはローカルエリアネットワークの制限を突破し、計算が時空を超えて行えるようになりました。CS アーキテクチャは徐々に BS アーキテクチャ(Browser-Server、ブラウザ - サーバー)に移行しました。BS アーキテクチャは、クライアントをブラウザに統一し、アプリケーションがどのプラットフォーム環境でも実行できるようにしました。この時期、IT アーキテクチャが最も重視したのはオープン性と移植性でした。なぜなら、IT システムのリソースは非常に貴重であり、アプリケーションを一度開発すれば、すべての IT システムで実行できることを望んだからです。この理念のもと、Java という高い移植性を持つ高級プログラミング言語が生まれました。
21 世紀に入ると、アプリケーションが増えるにつれて、IT アーキテクチャはコンポーネントの専門化と分業協力を強調し始めました。有名なアーキテクチャ原則の一つに「関心の分離」(Separation of Concerns、SOC)があります。これは、異なる問題を異なるコンポーネントで分けて処理することを意味します。この期間、MVC(Model-View-Controller)という三層アーキテクチャが流行し、このアーキテクチャは SOC 原則をよく体現しています。MVC では、Model がデータエンティティの操作を担当し、View が表示を担当し、Controller が制御ロジックを担当します。この三層アーキテクチャは、シンプルなウェブアプリケーションから企業の CRM や ERP に至るまで、広く応用されています。
インターネットで最も有名な HTTP プロトコルの主要な起草者であるロイ・フィールディングは、2000 年に完成した博士論文で REST(Representational State Transfer)のアーキテクチャ理念を提案しました。このアーキテクチャ理念は、インターネットのアーキテクチャの基礎を築きました。「表現状態転送」という意味ですが、文字通りの理解は難しいです。実質的には、世界中のすべてのリソースを一意の識別子(Universal Resource Identifier、URI)で表現し、クライアントからの各リクエストに対して、サーバーはリソースの表現状態を返すというものです。
たとえば、ユーザーがウェブページでニュースを閲覧する場合、そのリクエストはニュースリソースを指す URI をサーバーに送信します。サーバーは URI に基づいてそのニュースリソースを見つけ、その「表現状態」、つまり HTML または XML 形式で書かれたニュース内容をクライアントにフィードバックします。一方、ニュースリソース自体はサーバーに残ります。
REST アーキテクチャの下では、クライアント / サーバー間の複数のリクエストには文脈の関連性がありません。上記の例では、ニュースリソースの内在的な表現状態とクライアントに返された表現状態には必然的な関連性がなく、サーバーのニュースリソースはデータベースの形式で保存されている可能性があります。次に、ユーザーがビデオを視聴するリクエストを送信する場合、このリクエストは上記のリクエストとは完全に無関係であり、文脈の関連性はありません。サーバーはリクエストを受け取った後、ビデオリソースの「表現状態」、つまりビデオストリームをクライアントに送信します。ユーザーはリソースの「表現」状態を変更したり、リソースを削除したりするために指示を送信することもできます。「文脈」関係がないということは、リクエストが無状態であることを意味し、これにより状態管理を心配する必要がなくなり、リクエスト処理能力を強化するために Web サーバーを追加するなど、インターネットを支える基盤インフラを便利に拡張できます。
REST アーキテクチャは、ハイパーメディア(Hypermedia)ブラウジングの最良の選択肢です。ハイパーメディアとは、ハイパーリンク(Hyperlink)を使用して、異なる空間のテキストやマルチメディア情報を組織するネットワークメディアのことです。インターネットのウェブページはハイパーメディアの一例です。REST アーキテクチャは、拡張性において比類のない利点を持ち、最終的にインターネットの主流アーキテクチャとなりました。REST アーキテクチャが主流となったのは、そのアーキテクチャのシンプルさ、互換性、拡張性に起因しています。当時、IBM やマイクロソフトが主導した SOAP ベースの Web サービスアーキテクチャは、あまりにも複雑であったため、REST に徐々に取って代わられました。
分散システムは集中型システムよりも複雑です。なぜなら、分散システムが解決しなければならない問題は、一貫性(Consistency)、可用性(Availability)、および分割耐障害性(Partition Tolerance)だからです。一貫性とは、同時に各ノードで最新の書き込みデータを読むことができることを指します。可用性とは、合理的な時間内に常にリクエストに応答できる稼働中のノードを指し、エラーやタイムアウトが発生しないことを意味します。分割耐障害性とは、ネットワークが分裂した場合でも、システムが引き続き機能することを指します。これらの問題は集中型システムでは大きな問題ではありません。しかし、分散システム、特に大規模なインターネット分散システムでは、最大の課題となります。
2000 年、エリック・ブリューワー教授は、一貫性、可用性、分割耐障害性の 3 つは分散システムで同時に満たすことができず、最大でも 2 つしか満たせないという仮説を提唱しました。その後、この仮説は証明され、有名な CAP 定理(CAP Theorem)に昇華しました。CAP 理論は、分散システムの設計者に対して、アプリケーションシーンの違いに応じて一貫性、可用性、分割耐障害性のトレードオフを行う必要があることを示唆しています。3 つのうち 2 つを選ぶ必要があり、すべてを求めることはできません。
従来の企業向け IT アプリケーションは、取引データ、たとえば会計や在庫データを主に処理しているため、一貫性が基本的な要求です。ほとんどの企業アプリケーションは ACID 要件を満たす必要があります。A は Atomic(原子性)を意味し、取引はすべて完了するか、まったく完了しないかのいずれかであり、中間状態にあってはならないことを示します。C は Consistency(整合性)を意味し、取引が開始される前または終了後に関連データが一貫している必要があることを示します。I は Isolation(独立性)を意味し、異なる取引は互いに独立して完全に隔離される必要があります。D は Durability(耐久性)を意味し、取引後のデータが永続的に保存されることを示します。
インターネット時代に入ると、インターネットアプリケーションは主にインタラクティブデータを処理するようになりました。たとえば、共有されたウェブページや画像などです。インタラクティブデータは取引データよりもはるかに大きなボリュームを持ち、一貫性に対する要求はそれほど高くありません。しかし、計算処理能力に対する要求は従来の計算よりもはるかに大きくなります。インターネット環境と企業内ネットワーク環境は異なり、ネットワークの問題は異常現象ではなく常態であるため、インターネットアプリケーションは可用性と分割耐障害性に対して高い要求を持っています。ほとんどのインターネットアプリケーションは BASE 要件を満たす必要があります。BA は Basic Available(基本的に可用)を意味し、特定のノードが故障したりネットワークが切断されたりしても、システムは正常に機能し、エラーを報告しないことを示します。S は Soft State(ソフトステート)を意味し、一時的な状態を指し、特定の時点での一部のノードで不一致の一時的な状態が発生することを許可します。E は Eventual consistent(最終的に一貫性がある)を意味し、システムが最終的に補償メカニズムや他のエラー修正メカニズムを通じて最終状態を一貫させることを示します。
ACID アプリケーションに比べて、BASE アプリケーションはより良い拡張性を持ち、インターネット上で実行される分散システムに適しています。インターネット上で CAP の 3 つのトレードオフをどのように行うか?BASE アプリケーションをどのようにサポートするか?増大する膨大なデータの計算能力の要求をどのように満たすか?
クラウドコンピューティング、大データ時代#
1. Google のアーキテクチャの変革
2003 年から 2004 年にかけて、Google は GFS、MapReduce、BigTable に関する 3 篇の論文を発表し、基本的に Google 内部で検索の膨大なデータを処理するためのプラットフォームアーキテクチャを公開しました。GFS は大規模な分散ファイルシステムであり、MapReduce は並列処理フレームワーク下のプログラミングモデルであり、BigTable は GFS に基づいて構築されたキー・バリュー方式で組織された非関係型データベースです。当時の技術、製品、プラットフォームは Google の急成長するビジネスの発展を満たすことができなかったため、Google は検索ビジネスの特性に基づいて大胆に革新し、従来の分散ファイルシステムの枠を打破し、大規模な拡張性をサポートするフォールトトレラントな分散ファイルシステムを開発し、その上に並列計算プラットフォームと分散データベースを構築しました。これにより、Google の検索プラットフォームは前例のない爆発的な成長を遂げる膨大なデータを処理できるようになりました。
特に MapReduce の並列処理プログラミングフレームワークは、データを自動的に切り分け、タスクを異なるノードに割り当て、タスクの自動スケジューリング、負荷の均衡を実現し、同時に自動監視、自動修復を行い、ノード間の通信を管理します。従来の並列処理アプリケーションでは、開発者は MPI プログラミングなどのスキルを習得する必要があり、一般的には高性能計算の分野に限られていました。しかし、MapReduce フレームワークは並列処理システムのプログラミングを簡素化し、開発者が並列処理システムを開発するためのハードルを大幅に下げました。言い換えれば、MapReduce フレームワークは、先天的に並列計算能力が欠けているフォン・ノイマンアーキテクチャのコンピュータが、クラスターの並列処理を通じてインターネット時代に再び活気を取り戻すことを可能にしました。
Google の 3 篇の論文は、インターネットの大規模分散システムのアーキテクチャの基礎を築き、大データ時代の幕を開けました。Google の貢献は、主に自社のビジネスニーズに基づいており、従来の分散アーキテクチャの利点と欠点を比較した上で、全く新しい分散ストレージ、分散並列計算、分散データベースのアーキテクチャを提案しました。しかし、その特徴は集中管理モデルの下での拡張可能な分散システムにあります。
2. Amazon のアーキテクチャの変革
Google はクラウドコンピューティングの概念を最初に提唱した企業であり、もう一つのクラウドコンピューティングビジネスモデルを創造した Amazon も負けじと、2007 年に Dynamo 分散データベース論文を発表しました。Google と同様に、Amazon も自社のビジネス特性に基づいて革新を行い、システムのエラーを常態として処理しました。しかし、Google とは異なり、Amazon は無中心で完全に分散型のアーキテクチャを採用しました。
Amazon の Dynamo 論文は、分散キー・バリュー・データベース Dynamo の設計と実施の詳細を公開しました。Dynamo の設計は、主に大規模な e コマースのアプリケーションシーンを対象としており、ショッピングカートなどは「Always on」(常にオンライン)を提供し、ユーザーがいつでも変更できる高可用性の顧客体験を提供する必要があります。その設計目標は、可用性を最優先にし、特定の状況で一貫性を犠牲にすることです。Dynamo 論文では「Eventual Consistency」(最終的一貫性)の概念が明確に提唱されています。その設計理念はピアツーピアアーキテクチャを参考にしており、全体の分散システムは無中心アーキテクチャを採用しています。Dynamo は、スケーラビリティと可用性を実現するためにいくつかの有名な技術を統合しています:データのパーティショニング(Data partitioned)と一貫性ハッシュを使用した複製(replicated)であり、オブジェクトバージョン(object versioning)を通じて一貫性を提供します。更新時、レプリカ間の一貫性は、仲裁(quorum)中心化されたレプリカ同期プロトコルによって維持されます。Dynamo には 3 つの重要なパラメータが含まれています。N はデータのレプリカ数、W は 1 回の書き込み操作で最小限に成功する必要があるノード数、R は 1 回の読み取り操作で最小限に成功する必要があるノード数を表します。W+R>N の場合、データを読み取る際、Coordinator 以外の R-1 ノードがデータを返すだけで成功と見なされます(この時、複数のバージョンのデータが返される可能性があります)。同様に、データを書き込む際、Coordinator 以外の W-1 ノードが成功すれば、データの書き込みが成功と見なされます。Dynamo は、gossip プロトコルに基づく分散障害検出およびメンバーシッププロトコルを採用しています。Dynamo は非常に少ない手動管理で済み、ストレージノードは追加や削除が可能で、手動でのパーティショニングや再配分は必要ありません。Dynamo は早くも Amazon の e コマースプラットフォームのコアサービスの基盤ストレージ技術となり、極端なピーク負荷に効果的に拡張でき、繁忙なホリデーショッピングシーズンでもダウンタイムはありませんでした。
Dynamo と BigTable はどちらも非関係型データベース、いわゆる NoSQL データベースに分類されます。しかし、両者の設計理念には大きな違いがあります。Dynamo は完全に無中心の設計であり、内部信頼ネットワークにデプロイされていることを前提とし、安全対策はありません。一方、BigTable は集中管理され、権限管理を利用して安全対策を提供します。Dynamo のデータモデルはキー・バリュー型モデルであり、BigTable は多次元ソートグラフです。Dynamo は一貫性ハッシュを使用して分散メタデータ管理を実現し、BigTable は集中型メタデータ管理を採用しています。両者の適用シーンも異なります。Dynamo は主に e コマースのショッピングカートアプリケーションを対象としており、高可用性を要求し、一貫性の要求は低く、CAP の観点から A(可用性)と P(分割耐障害性)の要求を強調する典型的な AP データベースです。一方、BigTable は一貫性と拡張性の要求が高く、構造化データの処理に適しており、典型的な CP データベースです。
3. クラウドコンピューティングアーキテクチャの特徴
クラウドコンピューティングの双雄である Google と Amazon は、クラウドコンピューティングと大データ時代を切り開きました。しかし、クラウドコンピューティングと大データの概念はすぐにベンダーの誇大広告の概念に陥り、多くの顧客が混乱を感じるようになりました。
アメリカの標準技術機関(NIST)は、比較的客観的で時間の試練に耐える定義を提供し、多くの誤解を解消することができます。NIST が示した定義は、「クラウドコンピューティングは、普遍的で便利で、オンデマンドで、ネットワークを通じて共有可能な構成可能な計算リソースプール(ネットワーク、サーバー、ストレージ、アプリケーション、サービスを含む)を提供するモデルであり、このモデルではリソースが迅速に作成または解放され、管理オーバーヘッドやサービスプロバイダーの人的介入がほとんど必要ありません。」です。
NIST はさらに、クラウドコンピューティングの概念をさらに説明するために「三四五」の要点をまとめました。「三」はクラウドコンピューティングの 3 つのサービスモデル(インフラストラクチャー・アズ・ア・サービス IaaS、プラットフォーム・アズ・ア・サービス PaaS、ソフトウェア・アズ・ア・サービス SaaS)を指します。「四」はクラウドコンピューティングの 4 つの展開モデル(プライベートクラウド、パブリッククラウド、ハイブリッドクラウド、コミュニティクラウド)を指します。「五」はクラウドコンピューティングの 5 つの特徴(オンデマンドセルフサービス、広帯域アクセス、リソースプール、迅速な弾力的拡張、計測サービス)を指します。
前述のアーキテクチャの特徴の中で、アーキテクチャは単なる技術の単純な組み合わせではなく、効率とコストのトレードオフが非常に重要であることを指摘しました。つまり、アーキテクチャの多くの考慮要素の中で、経済的要因は非常に重要な考慮要素です。合理的な経済モデルが欠如したアーキテクチャは、主流アーキテクチャになることは難しいです。フォン・ノイマンアーキテクチャとハーバードアーキテクチャの比較からもこのことがわかります。クラウドコンピューティングのアーキテクチャの特徴からも同様です。
NIST のクラウドコンピューティングの定義は、あまりにも正式で、理解しにくい文体です。簡単に言うと、クラウドコンピューティングは、フォールトトレラントで並列スケジューリングソフトウェアを使用して、大規模な安価な標準産業サーバーをリソースプールに組み合わせ、リソースプールの IT 能力(具体的には計算能力、ネットワーク能力、ストレージ能力、アプリケーション能力)をサービスに変換し、弾力的でオンデマンドの方法で提供するモデルです。ここで注目すべき点がいくつかあります。
1)クラウドコンピューティングは分散型アーキテクチャの基盤の上に集約管理能力を組み込んでおり、集中型アーキテクチャの特徴を持っています。クラウドコンピューティング時代には、ほとんどのビジネスロジックやデータ処理が大型データセンターで実行されるクラウドに集中し、モバイル端末は主に表示を行います。インターネット時代のブラウザ / サーバー(BS)アーキテクチャも、徐々にクライアント / クラウド(CC)アーキテクチャに移行しています。
2)クラウドコンピューティングアーキテクチャはコストと効率のトレードオフです。高価なブランドデバイスではなく、安価な標準産業サーバーを使用することでハードウェアコストを削減し、ソフトウェアのフォールトトレランスを利用して安価なハードウェアの品質問題を補い、並列化や仮想化技術を使用してリソースの使用効率を向上させます。
クラウドコンピューティングは、計算、ネットワーク、リソース、およびその上に構築された IT 能力を便利に提供するサービスモデルです。このモデルの下では、クラウドコンピューティング特有のアーキテクチャの特徴が形成されます。これらのアーキテクチャの特徴は、サービス指向アーキテクチャ(Service Oriented Architecture)、リソースプール化(Resource Pooling)、ソフトウェア定義(Software Defined)、標準化された安価なハードウェア(Commodity Hardware)、計測サービス(Measured Service)、水平拡張および弾力性(Scale-out&Elastic)です。ソフトウェア定義と標準化された安価なハードウェアは、従来の IT に対して最大の衝撃を与えます。ソフトウェア定義ネットワーク、ソフトウェア定義ストレージ、ソフトウェア定義セキュリティの重要な特徴は、制御層とデータ層を分離し、制御ソフトウェアとハードウェアをデカップリングすることで、システムのオープン性、拡張性、柔軟性を大幅に向上させ、管理をより便利にします。経済的側面から考慮すべきもう一つの要因は、コストを大幅に削減できることです。これにより、従来の IT ネットワーク、ストレージ、セキュリティベンダーは専用ハードウェアの保護壁を失います。標準化された安価なハードウェアを目指す OCP(Open Compute Platform)やスコーピオンプロジェクトは、発言権を従来のベンダーから最終ユーザーに移すことになります。Cisco、EMC などのブランド製品を主業とする従来のベンダーは、「ホワイトボックス」ベンダーからの巨大な挑戦に直面することが予想されます。
大データの根源#
BigData という概念は、マッキンゼー・アンド・カンパニーが 2011 年 5 月に発表した報告書『Big data: The next frontier for innovation, competition, and productivity』で初めて提唱されました。この報告書で示された大データの定義は、大データは通常のデータベースツールが取得、保存、管理、分析する能力を超えるサイズのデータセットを指します。
大データの概念が提唱されると、すぐにメディアの表紙を占め、各業界で大データに言及する状況が生まれました。多くの従来の BI やデータウェアハウスのソリューションも大データの名目で再包装され、さらには大データとは無関係なプロジェクトも大データとして包装されました。一時的に大データは包装ラベルとなりました。
国際データ会社(IDC)は、大データの 4 つの特徴からそれを定義しています。すなわち、膨大なデータ規模(Volume)、迅速なデータ流通と動的なデータ体系(Velocity)、多様なデータタイプ(Variety)、巨大なデータ価値(Value)です。Amazon の大データ科学者ジョン・ラウザーは、大データを「1 台のコンピュータの処理能力を超えるデータ量」と簡単に定義しました。
実際、大データの定義はそれほど重要ではないかもしれません。なぜなら、異なる視点から観察することで異なる定義が可能だからです。しかし、確かに争いのない事実として、データ量の指数関数的な爆発的増加は人類に前例のない挑戦をもたらしています。この挑戦は計算能力や計算を支えるエネルギー消費に現れます。なぜなら、計算にはエネルギーのサポートが必要だからです。理論的には、データの増加は常にますます短い時間で倍増しますが、エネルギーはそれに追随できません。最終的な結果は、生成されたデータが廃棄されることになります。シスコの予測によれば、2019 年には世界のデータセンターの年間 IP トラフィックが 10.4ZB に達し、平均で毎月 863EB、2014 年のほぼ 3 倍に達する見込みです(2014 年は 3.4ZB、平均で 287EB)。この成長速度は、IT アーキテクチャの革新と変革を直接促進します。
なぜ大データの挑戦が 21 世紀初頭に突然現れたのでしょうか?実際、氷が三尺も凍るのは一日ではありません。大データの現象は、数十年にわたる人類社会の情報化、デジタル化の結果です。30 年前を振り返ると、大部分の通信信号はアナログ信号でした。しかし、デジタル革命の後、大部分の信号はアナログ信号からデジタル信号に変換されました。IT の発展はデジタル化の進行を加速しました。初期のコンピュータはビジネスと管理を情報化、デジタル化するだけでした。インターネットとモバイルインターネットは人と人との交流をデジタル化しました。物のインターネット時代に入ると、物と物の相互作用から生じるデータ量は前者よりもさらに大きくなります。
大データの出現は、より大きな計算処理能力を要求し、それが IT アーキテクチャの発展を促進しました。Google の 3 篇の論文は、実際にはこのような背景の下で生まれたものです。
現在、多くの人々は大データがもたらす機会を見ており、大データ分析を通じて顧客のニーズをより正確に把握し、市場の変化の脈動をよりよく把握し、大データの支援を受けてビジネスの変化に迅速に対応できることを期待しています。もし大データの処理能力がクラウドコンピューティングによって支えられるとすれば、大データの分析は業界知識と結びつけて、相応の業界大データ分析モデルを構築する必要があります。そして、業界との深い結びつきは、インターネット + 時代の到来を促進しました。
インターネット + 時代#
インターネット + 時代は、実際にはクラウドコンピューティングと大データ時代の延長であり、クラウドコンピューティングと大データ技術と業界の深い融合の段階であり、その本質は企業のデジタル化転換です。
1. インターネット +—— 企業のデジタル化転換
IDC は、IT 業界がクラウドコンピューティング、モバイルインターネット、大データ、ソーシャルメディアを代表とする第三のプラットフォーム時代に入っていると考えています。IBM も CAMSS(Cloud、Analytics、Mobile、Social、Security)分野への全面的な転換を提唱しています。国内では、「インターネット +」が 2015 年の最も凝縮された合意の言葉となりました。国家の指導者から一般市民まで、「インターネット +」について熱く議論しています。「インターネット +」の重要な特徴は、伝統的な企業のデジタル化転換を実現することであり、クラウドコンピューティングは企業のデジタル化を支えるアーキテクチャとプラットフォームの基盤です。
「インターネット +」の内涵と外延については多くの議論があります。比較的一致した見解は、「インターネット +」はインターネット時代から消費者インターネットから産業インターネットへの移行の重要な段階であり、その主な特徴は、伝統的な業界が「インターネット思考」を採用してビジネスモデルを革新し、インターネットと大データ技術を利用して、オフラインとオンラインの緊密な結合を通じて、顧客により良い価値のサービスと製品を提供することです。このようにして、さまざまなインターネット技術と業界の結びつきのモデルが生まれました。たとえば、インターネット + 金融、インターネット + 製造、インターネット + 教育、インターネット + 交通、インターネット + エネルギーなどです。
2. インターネット + 金融 —— フィンテック
その中でもインターネット + 金融は最も注目される分野となっています。海外では、インターネット + 金融に対応する概念はフィンテック(Fintech)と呼ばれています。フィンテックは、もともと大規模な金融企業のバックエンドで使用される IT 技術、会計システム、取引プラットフォーム、支払い、決済、清算などの技術に由来します。インターネット時代に入ると、フィンテックの概念は金融業界のビジネス革新を支える IT 技術にまで広がりました。これには P2P 貸付、クラウドファンディング、モバイル決済、仮想通貨、顧客行動の大データ分析などが含まれます。
典型的な代表例には、P2P 貸付の Prosper や LendingClub、モバイル決済の Google Wallet、Apple Wallet、アリババの Alipay、テンセントの WeChat Pay、資金全体管理プラットフォーム Mint、スマート投資アドバイザー(Robo-advisor)LearnVest、ビットコイン Bitcoin などがあります。
3. ブロックチェーン —— フィンテックの天の恵み
前述のように、IT アーキテクチャの発展の歴史は、大型機の集中型から CS 分散型、さらにクラウドコンピューティング集中型への発展を経てきました。分久必合、合久必分、歴史は単なる繰り返しではなく、螺旋状に上昇する軌跡で発展しています。Google の 3 篇の論文は、集中型アーキテクチャで分散型計算を管理することに関するものでした。この利点は、メタデータ管理とスケジューリングを統一し、一貫性を保証することです。一方、Amazon の Dynamo アーキテクチャは、明らかに去中心化の特徴を持っています。集中型アーキテクチャの大きな問題は、管理ノードの性能ボトルネックであり、攻撃のターゲットになりやすいことです。さらに重要な問題は、大規模な分散環境で中心ノードの信頼を確立し維持するために必要なコストが非常に大きいことです。
集中型アーキテクチャにはもう一つ重要な問題があります。それは、管理中心ノードの人が主観的な誤りを犯したり、誠実性の問題があったり、第三者の影響を受けて独立性を失った場合、全体のネットワークに壊滅的な影響を与える可能性があることです。ビットコインの発明者である中本聡は、2009 年 1 月 3 日に掘り出した最初の創世ビットコインブロックに「Chancellor on brink of second bailout for banks」というメッセージを残しました。この言葉は、当日に英国のタイムズ紙に掲載された見出しニュースであり、意味は「財務大臣が第二次銀行救済の崖っぷちにいる」ということです。当時の背景は、世界的な金融危機が悪化している時期でした。プリンストン大学出版の『ビットコインと暗号技術』の著者の分析によれば、中本聡は中央集権的な銀行システムの無制限