私が取り組んでいるサイトは、ユーザー ベースと機能の両方の面で成長しており、一部の管理タスクをパブリック Web サイトから分離する必要があることが明らかになりつつあります。これを行う最善の方法は何だろうと考えていました。
たとえば、このサイトには大規模なソーシャル コンポーネントと、公開販売インターフェイスがあります。しかし同時に、バック オフィス タスク、一括アップロード処理、ダッシュボード (実行時間の長いクエリを含む)、および管理セクションにある顧客関係ツールは、パブリック トラフィックのスパイクの影響を受けないようにしたい (またはパブリック トラフィックに影響を与えたくない)。直面している応答時間)。
このサイトはかなり標準的な Rails/MySQL/Linux スタックで実行されていますが、これは実装の問題というよりもアーキテクチャの問題だと思います。主に、これらの異なるアプリケーション間でデータとビジネス ロジックをどのように同期させるのでしょうか?
私が評価しているいくつかの戦略:
1)公開データベースのスレーブ データベースを別のマシンに作成します。 アプリケーション間で共有できるように、すべてのモデルとライブラリ コードを抽出します。管理インターフェイス用の新しいコントローラーとビューを作成します。
私はレプリケーションの経験が限られており、この方法で使用されることになっているのかどうかさえわかりません (ほとんどの場合、同じアプリケーションの読み取り機能をスケールアウトするためであり、複数の異なる機能を持つのではありません)。 . スレーブが同じネットワーク上にない場合、レイテンシの問題が発生する可能性についても心配しています。
2)新しいよりタスク/部門固有のアプリケーションを作成し、メッセージ指向のミドルウェアを使用してそれらを統合します。 しばらく前に Enterprise Integration Patterns を読みましたが、分散システムに対してこれを推奨しているようでした。(あるいは、基本的な Rails スタイルの RESTful API 機能で十分な場合もあります。) しかし、データ同期の問題と、これに伴う大規模な再設計について悪夢に悩まされています。
3) 2 つの混合物。 たとえば、一部のバック オフィス タスクに必要な唯一の公開情報は、読み取り専用の完了時間またはステータスです。それを完全に別のシステムに置き、データを公開することは理にかなっていますか? 一方、ユーザー/グループ管理機能は、データベースを共有する別のシステムで実行されますか? 欠点は、これは、最初の 2 つ、特に再構築に関して私が抱いている懸念の多くを維持しているように見えることです。
答えはサイトの特定のニーズに大きく依存すると確信していますが、成功 (または失敗) の話を聞きたいです。