web-dev-qa-db-ja.com

Herokuにマイクロサービスをデプロイする方法

マイクロサービスについてたくさん読んだので、そのアプローチでアプリを構築したいと思います。これまでに知っていることは、次のようなサービスが必要であることです。

  • ロードバランサー-すべてのリクエストを処理し、それを別のサービスにプッシュします
  • 承認サービス-ユーザーを承認する
  • データベース-私のマイクロサービス用。サービスごとに異なるスキーマを持つDBの1つのインスタンスを使用したいと思います。
  • サービスA-機能Aの場合
  • サービスB-機能Bの場合

  • などなど.

私は、Herokuがアプリケーションをデプロイする興味深い場所であることを知りました。私の問題は、彼らのイデオロギーを完全に理解していないことです。これまでに行ったことは、いくつかの「アプリ」の作成/登録です。

  • my-app-auth
  • my-app-load-balancer
  • などなど.

Herokuがすべてのアプリにパブリックホスト名を提供しているのがわかります。ここからが私の懸念の始まりです。内部サービスをパブリックホスト名でデプロイする必要がありますか?私はそうは思いません。そしてここに私の質問が来ます:

誰かが私にいくつかのガイドライン、Herokuでのマイクロサービスの扱い方を教えてもらえますか?それらをどのように展開すればよいですか?ロードバランサーをどのように定義し、それに内部サービスをフックする必要がありますか? JHipsterとは何ですか?必要ですか?どうすれば使用できますか? Herokuツール(CLIなど)を使用する必要がありますか、それともgitlabリポジトリをそのまま使用できますか?それについて、私はインターネット上で把握するポイントを見つけることができません。

17
Maciej Treder

Herokuは、非常にシンプルなサービスとしてのプラットフォーム企業です。 Herokuの動作は非常に簡単です。

  • Gitリポジトリに複数のプロジェクト(サービス)があります。
  • プロジェクトごとにHerokuアプリを作成します(各Gitリポジトリ)。
  • 次に、各GitリポジトリからそれぞれのHerokuアプリにコードをプッシュします。
  • Herokuは、使用している各アプリにパブリックURLを割り当てます。
  • 各サービスがHerokuで実行されている場合、パブリックHTTPを介してAPIリクエストを互いに送信できます。

さて、Herokuのサービス指向アーキテクチャに関する質問についてです。

HerokuでSOA=を実行している場合、HTTPSを介して各サービスが互いにパブリックに通信する必要があります。これは典型的な「パターン」です。

Herokuは各アプリケーションに無料のSSLを提供し、各アプリケーションは同じAmazonリージョン上にあるため、HTTPを介してサービス間を往復するのは非常に高速で安全です。

各Herokuアプリには自動ロードバランシングがあるため、ロードバランサーについて心配する必要はありません。

ここでの次のオプション(一般的なパターンに従わない場合)は、RabbitMQやAmazon SQS(キューサービス)などを使用して、異なるサービス間で「メッセージ」を共有することです。

このパターンでは、サービスごとにHerokuアプリが1つありますが、HTTPを介して互いに通信する代わりに、RabbitやSQSなどのキューイングプロトコルを介して他のサービスと通信します。これには速度の利点があります。

認証サービスに関しては、この機能を提供するために使用できるプロバイダーがいくつかあります。私が知っている最も人気のあるものは Stormpath です。 Herokuアドオンマーケットプレイス を見れば、他の人も見つけることができます。

最後に、データベース関連:必要な任意のデータベースプロバイダーを使用できます。最も人気のあるものはおそらく Heroku Postgres です。これは、非常に信頼性が高く、使いやすいPostgreSQLのホストバージョンです。

すべてのサービス間で1つのデータベースを共有するか、サービスごとに1つのデータベースを持つことができます。どちらの戦略もうまくいきます。

32
rdegges