免責事項: この投稿の著者は、Web アプリケーションのソフトウェア アーキテクチャに関する理論的な知識しかなく、実際的な知識はほとんどありません。
次のアーキテクチャ アウトラインを使用して Web アプリを構築するとします。
- ユーザーがアカウントを作成/編集/削除し、アカウント レコードを作成/更新/削除できる典型的な Web フロントエンド...
- ... すべてのユーザーのアカウントを保存するデータベース。
- Jabber ボット (おそらく別の物理マシン上の別のサービス) はユーザーに話しかけますが、同じデータベース内のユーザーに関する情報を検索して更新する必要があります (2)。
したがって、基本的に、同じ 1 つのデータベースを使用する 2 つのアプリケーションがあります。データの整合性、競合状態、およびその他の問題により、これが適切なソリューションであるかどうかはわかりません。
典型的な使用例は次のとおりです: User1 は Jabber ボット (3) と対話しており、ボットはデータベース内のデータを検索および更新する必要があり、まったく同時に User2 は (1) を介してアカウントを作成します。これには何らかの対話が必要です。データベースと (2)。
必要な機能を維持しながら、そのタイプのアーキテクチャを回避するにはどうすればよいでしょうか? または、2 つの異なるサービスから 1 つのデータベースにクエリを実行する必要がないようにアーキテクチャを設計するにはどうすればよいでしょうか?
(残念ながら、このアプリの「ビジネス モデル」では、1 つの Web サービスで「アカウント管理」(1) と「Jabber ボット」(2) ロジックを持つことはできません)。
PS問題のシステムの最も重要な要件は、高可用性です(何らかの形で回答に影響する可能性があります)。