2017-11-17 16 views
-1

私は、この質問が既に多く議論されていることを知っていますが、私は自分の状況を説明したいと思います。マイクロサービス共有データベース

私が知る限り、マイクロサービスアーキテクチャ(イベントソーシング、CQRS ...)で共有データベースを解決する方法とベストプラクティスがありますが、そのすべてが私の場合は複雑に思えます。

nodejsを使用して、残りのAPIを構築しました。このAPIを使用すると、GETリクエストを使用して、mysqlデータベースに格納されたデータを取得できます。 これで、同じデータベースに多数のデータをインポートする必要がありました(毎回新しいテーブルを作成する)。最初の解決策は、新しいエンドポイント(POST要求)を既存のマイクロサービスに追加して新しいテーブルを作成し、新しいデータを追加することです。

しかし、インポート機能が非常にCPU時間を要し、nodejsがシングルスレッドなので、別のnodejsマイクロサービス(インポートサービス)を作成しようと考えていました。別のユーザーが新しいデータをインポートしているため、ユーザーがデータを取得するのを待つ必要はありません。

この問題は、2つのマイクロサービス間で同じデータベースを共有する必要があるという問題です。典型的なアプローチ(イベントソーシング、CQRS)を使用することが最適なソリューションかもしれませんが、アーキテクチャが複雑すぎます(このプロジェクトではデータの一貫性の問題に対処する必要はありません)。

他の人は私が使用できる2ソリューションがあります。

  1. がDBにアクセスし、直接
  2. microservicesで「輸入microservice」の代わりに、データベースへのアクセスをlibが使用する共通のLibを作成他のサービスのAPI残りを使用して、インポートの準備ができたらすぐに新しいデータを送信することができます。

最適な解決策は何ですか?あなたはこの問題に対処する他の可能な方法を知っていますか?

は非常に

+1

これはあまりにも一般的なものでも意見の問題でもシャットダウンするかもしれませんが、イベントソーシングやCQRSがこのユースケースとどのように関係しているのかわかりません。 他のソリューションの1と2の両方が機能し、すべてがそれに依存すると言います。私はそれらの2つの選択肢の観点から質問したいと思います。 –

答えて

1

microservicesの世界でいただきありがとうございます、サービスは、あなたが提案しているとして、各サービスは、特定の技術的機能によって表していない商務ドメインに応じて分割する必要があります。これは、特定の技術的な機能を回避するためにバイパスすることを推奨しないアーキテクチャ設計です。

問題を解決する方法は、マイクロサービスを同じビジネスドメイン内にある2つのサービスに分割することではありません。

問題はパフォーマンス上の問題です。パフォーマンスの問題は、一般にスケーリングによって解決されます。複数のコンテナを展開することによって、あなたのserivicesを複製することは全く正常です。 Dockerはデフォルトでこのオプションを提供します。サービスをデプロイするときは、デプロイするレプリカの数を指定できます。

関連する問題