高性能なトランザクション処理にはあらゆる種類のテクニックがあり、ファウラーの記事にあるテクニックは最先端の多くのテクニックの1つにすぎません。誰の状況にも当てはまるかもしれないし、当てはまらないかもしれない多くのテクニックをリストするよりも、基本原則とLMAXがそれらの多くに対処する方法を議論する方が良いと思います。
大規模なトランザクション処理システムの場合、次のすべてを可能な限り実行する必要があります。
最も遅いストレージ層で費やされる時間を最小限にします。最新のサーバーで最速から最速まで:CPU / L1-> L2-> L3-> RAM->ディスク/ LAN-> WAN。最速の最新の磁気ディスクから最も遅いRAMへのジャンプは、シーケンシャルアクセスで1000倍以上です。ランダムアクセスはさらに悪化します。
待機に費やす時間を最小化または排除します。これは、できるだけ少ない状態を共有することを意味し、状態を共有する必要がある場合は、可能な限り明示的なロックを回避します。
ワークロードを分散します。CPUは、過去数年でかなり速くもらっていないが、彼らはしている小さい得て、そして8つのコアは、サーバー上でかなり一般的です。さらに、作業を複数のマシンに分散させることもできます。これはGoogleのアプローチです。これの素晴らしいところは、I / Oを含むすべてをスケーリングできることです。
ファウラーによると、LMAXはこれらのそれぞれに対して次のアプローチを取ります。
キープすべてのメモリの状態をすべての回。データベース全体がメモリに収まる場合、ほとんどのデータベースエンジンは実際にこれを実際に実行しますが、リアルタイムトレーディングプラットフォームで理解できるチャンスに任せたくありません。大量のリスクを追加せずにこれを実現するために、彼らは軽量のバックアップおよびフェールオーバーインフラストラクチャの束を構築する必要がありました。
入力イベントのストリームにロックフリーキュー(「ディスラプター」)を使用します。確実にロックフリーではなく、実際には通常、非常に遅い分散トランザクションを伴う従来の永続メッセージキューとは対照的です。
あまりない。LMAXは、ワークロードが相互に依存していることに基づいて、これをバスの下にスローします。1つの結果が他のパラメーターを変更します。これは重要な警告であり、ファウラーが明示的に呼び出しています。フェイルオーバー機能を提供するために並行性をある程度利用していますが、すべてのビジネスロジックは単一のスレッドで処理されます。
LMAXは、大規模OLTPへの唯一のアプローチではありません。また、それ自体は非常に優れていますが、そのレベルのパフォーマンスを引き出すために最先端の技術を使用する必要はありません。
上記のすべての原則の中で、ハードウェアは安価であるため、#3がおそらく最も重要かつ最も効果的です。半ダースのコアと数ダースのマシンにワークロードを適切に分割できれば、空は従来の並列コンピューティング技術の限界になります。大量のメッセージキューとラウンドロビンディストリビューターだけで、どれほどのスループットを達成できるか驚くでしょう。明らかにLMAXほど効率的ではありません-実際には近いものでもありませんが、スループット、レイテンシ、費用対効果は別の懸念事項です。ここでは、スループットについて具体的に説明します。
LMAXと同じ種類の特別なニーズ(特に、急いでデザインを選択するのではなくビジネスの現実に対応する共有状態)がある場合は、そのコンポーネントを試してみることをお勧めします。それ以外は、それらの要件に適しています。しかし、単に高いスケーラビリティについて話している場合は、今日ほとんどの組織(Hadoopと関連プロジェクト、ESBと関連アーキテクチャ、FQlerが使用するCQRS言及など)。
SSDは、ゲームチェンジャーにもなります。おそらく、彼らはすでにそうです。RAMへのアクセス時間が同程度の永続ストレージを使用できるようになりました。サーバーグレードのSSDは依然として非常に高価ですが、採用率が上がると最終的に価格が下がります。 徹底的に研究されており、結果はかなり気が遠く、時間の経過とともに良くなるだけなので、「すべてをメモリに保存する」という概念は、以前ほど重要ではなくなりました。繰り返しになりますが、可能な限り並行性に焦点を当てようとします。