9

私が取り組んでいるサイトは、ユーザー ベースと機能の両方の面で成長しており、一部の管理タスクをパブリック Web サイトから分離する必要があることが明らかになりつつあります。これを行う最善の方法は何だろうと考えていました。

たとえば、このサイトには大規模なソーシャル コンポーネントと、公開販売インターフェイスがあります。しかし同時に、バック オフィス タスク、一括アップロード処理、ダッシュボード (実行時間の長いクエリを含む)、および管理セクションにある顧客関係ツールは、パブリック トラフィックのスパイクの影響を受けないようにしたい (またはパブリック トラフィックに影響を与えたくない)。直面している応答時間)。

このサイトはかなり標準的な Rails/MySQL/Linux スタックで実行されていますが、これは実装の問題というよりもアーキテクチャの問題だと思います。主に、これらの異なるアプリケーション間でデータとビジネス ロジックをどのように同期させるのでしょうか?

私が評価しているいくつかの戦略:

1)公開データベースのスレーブ データベースを別のマシンに作成します。 アプリケーション間で共有できるように、すべてのモデルとライブラリ コードを抽出します。管理インターフェイス用の新しいコントローラーとビューを作成します。

私はレプリケーションの経験が限られており、この方法で使用されることになっているのかどうかさえわかりません (ほとんどの場合、同じアプリケーションの読み取り機能をスケールアウトするためであり、複数の異なる機能を持つのではありません)。 . スレーブが同じネットワーク上にない場合、レイテンシの問題が発生する可能性についても心配しています。

2)新しいよりタスク/部門固有のアプリケーションを作成し、メッセージ指向のミドルウェアを使用してそれらを統合します。 しばらく前に Enterprise Integration Patterns を読みましたが、分散システムに対してこれを推奨しているようでした。(あるいは、基本的な Rails スタイルの RESTful API 機能で十分な場合もあります。) しかし、データ同期の問題と、これに伴う大規模な再設計について悪夢に悩まされています。

3) 2 つの混合物。 たとえば、一部のバック オフィス タスクに必要な唯一の公開情報は、読み取り専用の完了時間またはステータスです。それを完全に別のシステムに置き、データを公開することは理にかなっていますか? 一方、ユーザー/グループ管理機能は、データベースを共有する別のシステムで実行されますか? 欠点は、これは、最初の 2 つ、特に再構築に関して私が抱いている懸念の多くを維持しているように見えることです。

答えはサイトの特定のニーズに大きく依存すると確信していますが、成功 (または失敗) の話を聞きたいです。

4

2 に答える 2

3

あなたの説明からわかる限り、公開されているパフォーマンスと管理者のパフォーマンスが互いに影響を与えないようにしたい場合は、別々のサーバーで別々のデータベースを使用する必要があります。

重要なのは、どのデータがどこでどのように使用され、データがプロセスにどのように関与しているかをよく理解することです。それができる場合は、1つのデータベースを「主要な」データベースにできるかどうかを判断してください。これがライブデータになり、他のデータベースがオペレーションデータストア(ODS)になります。ODSは、常にライブデータから派生したものです。ライブデータからODSを更新するプロセスは、間隔を置いて行うことができ、データを簡素化すると同時に、ODSを使用するアプリケーションにより適したものにするために追加の処理を行うことができます。

これが現在の状況に大きく飛躍することがわかった場合は、少なくともデータベース内のデータを分離して、テーブルロックなどのパフォーマンスの問題に対処しないようにすることができます。将来、ODSのようなモデルに移行する必要がある場合に備えて、正しい方向への一歩を踏み出してください。

于 2010-05-11T08:39:12.540 に答える
0

私は必要のないものを複製するのが好きではありません。管理者のみにタグを付け、その部分を内部 IP または別のポートを持つ別の DB として構築します。次に、管理者アクセス用の公開サイトへの外部キー関係を作成します。インデックス付きテーブルのように扱うと、レプリケートするよりも管理がはるかに簡単になります。API 開発は、レガシー システムを使用していない場合は不要なタスクです。また、システムを分離しておきたい場合に複製する必要はありません。それらは私の2セントです。

于 2010-05-10T18:42:35.563 に答える