私はmicroserviceの複数のインスタンス持ってA
データベースに何もなく、ダンプデータを行いランニングをし、他のサービスにそこからそれを提供しています。
私は春の使用していますCrudRepository
自動的にSQLのような方法をいくつ持っている豆を取得するためのインタフェースをsave()
実装します。
microserviceはそうB
ロードバランサを経由して送信しますシリアライズされたオブジェクトは、インスタンスのいずれかに保存しA
、その後、それを(サービスのすべてのインスタンスで共有Oracleデータベースを保存しますA
)。私は、の2つのインスタンス際に注意する必要がありますA
同時にアクセスしようとするオラクルDB?
私は唯一の1インスタンス持っている場合にも、何が起こるだろうA
との2つのインスタンスB
にシリアライズオブジェクトを送信しようとしたA
と同時にか?それらのでしょうの一つが自動的に待つか、私は何とかそれを制御するために持っている必要がありますか?
助けてくれてありがとう
詳細を掘り下げる前に、私はちょうどそれが非常にOracleなどのデータベースを同時に物事の数百を行うように設計されています...一度あなたのアプリからただ一つのことをやってすることは絶対に必要ではないので、その企業をクリアしたいです。同様に、マイクロサービスは要求の数千多くの場所で並列に第二の処理に使用されます。
試してみるの2つのインスタンスが同時にオラクルのDBにアクセスするとき、私は注意する必要がありますか?
これは完全にあなたがデータベースに対して実行される操作とどのようにあなたがそれらを実行しているに依存します。あなたは、データベースのトランザクションを使用する場合は、複雑な複数文のワークフローを単離することができる/安全な(実際にはその非常にノーマル)並行して行われたとき。
私はあなたのマイクロサービス(複数可)に対する二つの平行なリクエストを送信し、それが同じテーブルで同じオブジェクトを作成しようとしている二つのスレッド(関係なく、どのアプリの)が生じた場合でも...、その後、それらの一つは、他の1を打つだろうもう一方は(データベースが適切な制約を持っていると仮定して)失敗します。
あなたはそれが(あなたがライブラリを使用している場合はそうである)複数のデータベース接続を持たせる場合、これもあなたのサービスAの1つのインスタンスで発生する可能性があります。
あなたがDBに話したマイクロサービスの複数のインスタンスを持っている場合あなたがコーディング守備の持っている必要がありますので、彼らは、同時に同じことをしようとしていないので...、あなたはおそらく簡単に確認することを制御することはできません重複したデータをDBに送信されたとき等も、検出したハンドル、あなたが定期的に何かをキャッシュする場合は、DB状態は、この1とリロードデータのアプリケーションの外部に起因する変更される可能性があることを認識する必要があります。
私はAの1つのインスタンスと同時にAにシリアライズされたオブジェクトを送信しようとBの2つのインスタンスを持っている場合にも、何が起こるのでしょうか?
一般に、これは通常/予想されます。アイデアは、彼らは、負荷のために必要とされるあなたはマイクロサービスの複数のコピーを生み出すです。通常はマイクロサービスは、REST、ソケットなどであるかどうかを一度に複数の要求を処理します
だから、要求が待機しないだろう...あなたが意図的に単一のデータベース接続を持っているAのあなたの1インスタンスをコード化し、キューにあるハンドルを要求しない限り。しかし、再び、それはあなたの個人的な実装の詳細までです。