問題タブ [decouple]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
architecture - データベースに関連付けられた 1 つのバックエンド サービスを 2 つの別個のサービスに分離する方法は?
大量のデータを含む大きな MySQL データベース D_Big があります。このデータベースから読み取りまたは書き込みを行う API を備えたサービス S1 もあります。たとえば、ある API がデータベースから何かを取得する場合があります。別のユーザーがデータベースに行を書き込む場合があります。等
また、S1 (および S1 のみ) が読み取りと書き込みを行っている小さなセカンダリ データベース D_Small もあります。小さなセカンダリ データベースはそのままにしておきたいのですが、大きな MySQL データベースである D_Big からデータにアクセスする方法を変更したいと考えています。
大規模な MySQL データベースにアクセスする唯一の方法は、大規模なデータベースにもアクセスできる 2 番目のサービスである S2 への API 呼び出しを介することです。S1 が D_big のデータを必要とする場合、D_Big のデータを返す S2 の API を呼び出す必要があります。したがって、S1 の D_Big への直接的な依存関係を削除したいと考えています。
それを行うための良い方法は何ですか?いくつかのヒント/アドバイスは何ですか? 最も簡単な方法は、D_Big に直接アクセスする S1 内のすべての API 呼び出しを、S1 が直接実行するのとまったく同じデータベース アクセスを実行する S2 内の対応する API に置き換えることです。たとえば、S1 に次の API があるとします。
API_1 は、D_Big の table1 から列 [foo、bar、baz] を返します
API_2 は値 foo を D_Big の table2 に書き込みます
API_3 は列を返します * D_Big の table3 から
これらを次のように置き換えます。
S1 の API_1 は、D_Big の table1 から列 [foo、bar、baz] を返す S2 の対応する API を呼び出します
S1 の API_2 は S2 の対応する API を呼び出し、API_2 は値 foo を D_Big の table2 に書き込みます
S1 の API_3 は S2 の対応する API を呼び出し、API_3 は列を返します * D_Big の table3 から
しかし、理想的なマッピングが 1 対 1 でない場合はどうでしょうか? API を組み合わせる必要がある場合 (例: S1 の 1 つの API が S2 の 2 つの異なる API を呼び出して必要なデータを取得する、または S1 の 2 つの異なる API が S2 の同じ API を異なるパラメーターで呼び出す)?
以前は共有データ ソース (D_Big) だったものから 2 つのサービスを分離する優れたインターフェイスを作成するにはどうすればよいでしょうか? S1 と S2 の両方が Java/XML/Spring ベースのシステムを使用して、API 呼び出しでデータを転送するとします。