分散システム (その「結果整合性」) が必要な場合は、それを構築し、維持し、運用する人が必要です。
「結果整合性」の問題がほとんどない 3 つのクラスの人々がいることがわかりました。
- 分散システムの経験が豊富な人。彼らは、結果整合性ビザンチン障害などについて学びました。Paxosが休日に関するものではないことを理解しているなら、おそらくあなたもその 1 人です。
- ネットワークプログラミング経験者。彼らは理論的な背景を見逃しているかもしれませんが、非同期性と「グローバルなクロックとカウンターがない」というパラダイムを直感的に理解しています。リチャード・スティーブンスの本を少なくとも 8 冊持っているなら、あなたはおそらくその中の 1 人です。
- RDBMS にほとんど触れていない非常に経験豊富なコーダー。カーネル関係者、科学計算およびゲーム業界の人々が思い浮かびます。
全体として、この人々は求人市場で非常に求められています。たとえば、分散システムの研究者の 75% ほどが、証券取引所などの大規模な自己設計の分散システムを運営する機関に移ります。
Hardoop、SimpleDB、CouchDB などの製品によって全体がいくらかシンプルになりましたが、分散システム テクノロジで何かを構築することは依然として大きな課題です。
一方、RDBMS は非常に優れたエンジニアリングです。それらは十分に理解されており、それらに関する専門知識は求人市場で利用できます。多くの適切なツール、教育の機会があり、多くの高度なスキルを持つ専門家が時間単位でレンタルできます。したがって、RDBMS アプローチをうまく利用できないことをよく考えてください。私は通常、学生にLifejournal アーキテクチャを紹介します。
分散データベースの場合、経験ははるかに少なくなります。これがまさに、これまでほとんどアドバイスを見つけられなかった理由です。
「結果整合性」を使用することに決めた場合、未熟なツールに加えて、主な課題は関係者全員の考え方だと思います。API ユーザー (コーダー) とアプリケーション ユーザー (従業員と顧客) は、矛盾を受け入れる意思と能力がありますか? 特定のクラスのユーザーからそれを隠すことはできますか? 私たちは、コンピューターに一貫性がないという考え方に慣れていません。在庫があるものとないものがあります。「たぶん」は、ユーザーが期待する答えではありません。
また、「最終的」は、アルゴリズム設計者にとって非常に長い時間を意味する可能性があることに注意してください。矛盾をどれくらいの期間受け入れることができますか?
ショッピング カート アプリケーションの場合、真に分散したい場合があります。クライアント ブラウザをデータ ストアとして使用します。チェックアウト時に、カートをサーバー側のバッチ処理システムに送信できます。これは、カタログの場合、読み取り専用の高可用性 (より簡単) が必要であり、カートの送信はトランザクションを必要としない非常に狭いインターフェイスであることを意味します。その後の注文の処理には (ソフト) リアルタイム要件がないため、より簡単になります。
ところで: 前回 E-Bay アーキテクチャを確認したとき、それらは RDBMS で大きなものでしたが、その後変更された可能性があります。(編集:変更されました-コメントを参照)