2016-06-20 5 views
7

イム。これまでは、各マイクロサービスには独自のデータベースが必要であることは理解できていません。どのように同期してDBを維持するには?どのようmicroservicesアーキテクチャの仕事を学ぶことを約

顧客を作成して顧客リストを返す顧客マイクロサービスがあるとしましょう。サービスはそれ自身の顧客DBを持っています。

は、私たちがこのerviceに非常に高い負荷を持っていると言うことができますので、我々は20倍をスケールアウトするchooce。

私は20個のマイクロサービスを持ち、それぞれに独自のDBがあり、すべてのサービスはロードバランサの背後にあります。

クライアントが顧客を作成したい場合、ロードバランサはクライアントの要求をサービス9/20に送信し、顧客が作成されます。

次のリクエストで、同じクライアントが顧客が作成されており、顧客のリストを表示することを望んでいる場合、リクエストLBによってサービス11/20に送信されます。

は今、どのように私は、サービス9/20がサービス11/20のDBに新たに作成された顧客を同期していることを確認していますか?

MSSQLには、最初のコミットを行う前に、他のすべてのデータベースにデータを保存するようにDBを同期させる機能がありますが、このアプローチは長期的には問題を引き起こします。コミットするのに時間がかかりますか?

答えて

6

各microserviceはmicroservice当たり別DBは(実際にも要件)前提条件ではない

独自のデータベースを必要とします。

同じデータベースの上で作業するマイクロサービスをいくつでも持つことができますが、たとえば異なるスキーマを使用できます。

microserviceの有界コンテキストが境界でなければなりません。

私たちはこのサービスに非常に負荷が高いと言いますから、20倍に拡大することを選択します。

同じマイクロサービスの(X)インスタンスへのスケーリングは、必ずしも同じサービスのインスタンスごとに別個のデータベースを持つことを意味しません。

ほとんどのデータベースは心の同時接続、ユーザー、取引に設計されています。 1つのデータベースインスタンス(いくつかの楽観的同時実行性を備えています)は、数千(数千ではないにせよ)の同時接続を正常に処理できます。

同じサービスのインスタンスごとに別個のDBを明示的に選択した場合、それらのデータベースを同期させる必要があります。おそらくデータの一貫性が損なわれる可能性があります。ここで

は、いくつかの提案です:

  • は関係なく、それを使用しているどのように多くのインスタンスmicroserviceあたり(いないインスタンスごとに)単一のデータベースを使用していません。また、単一のDBが負荷を処理できないことが確かな場合は、インスタンスごとのDBのみを考慮してください。

  • は、高負荷/データベースの可用性に対処するためにDBの上の共有キャッシュ層(多分Redisのキャッシュ)

  • 使用データベースクラスタを使用してください。

関連する問題