2016-06-23 23 views
2

スプリングブートで複数のマイクロサービスを使用する方法については混乱しています。スプリングブートでマイクロサービスを使用することは可能ですか

私は約Karafを読むと、彼らは常にSpringの代わりにBlueprintを使用し、Springブートで使用できるという印象はありません。

私はFabric8を見つけましたが、私はスプリングブートで作られたマイクロサービスの例は見つかりません。

私が必要とするのは、Karafのように実行時にホットデプロイメントと設定を行うことができ、複数のSpringブートサービスが必要なことです。

可能ですか?

誰かから私にドキュメンテーションやプロジェクトサンプルを渡すことができますか?

あなたは

+0

からの移動のバグや運用上の問題が増加し、品質低下からホットリロードからの待ち時間での利益のトレードオフを覚えています? – alexbt

+1

バッテリーを搭載したソース:https://spring.io/blog/2015/07/14/microservices-with-springからこの記事をお読みください。 –

+0

@Alex、もしこの質問が春についてあれば、いいえ。この質問がマイクロサービスに関するものであれば、多分。しかし、この質問は春についてです。 – MetaFight

答えて

8

Fabric8 Microservices Platformdemo video showing how to create a Spring Boot microserviceだと完全なContinuous Deployment pipelineは、次の操作を実行するために作成されますた:

  • パッケージコード、ドッキングウィンドウの画像と
  • マニフェストkubernetesを作成するシステム/統合テスト
  • を行いますローリングアップデートでステージング環境に展開する
  • (オプション)人間の承認を待つ
  • deploy toローリングアップデートによる生産環境

gitリポジトリ内のコードや設定の変更は、ローリングアップデートを自動的に開始します。これはホットデプロイの一形態です。例えば実稼働環境で3つのコンテナを実行している場合。新しいコンテナは、ローリングアップグレードポリシーに基づいて新しいコードおよび/またはコンフィグレーションでスピンアップされます。通常、新しいコンテナが開始されます。彼らが準備ができたら、古いものは一度に1つずつ(または一度にすべてをやりなおすことができます)好きなときに取ることができます。ローリングアップグレードは、すべてのサービスロードバランシングに含まれています。新しいコンテナは、の準備が完了したときにのみ起動されます。

OSGiを使用すると、コンテナを実行したままで、その場で突然変異させることができます。第1に、不変のインフラストラクチャ(ドッカー画像など)への移行が進むにつれて、ソフトウェアはより単純で簡単に推論できます。新しいバンドル/ code/configをオン/オフでロールオーバーするのではなく、ただ新しいイメージを作り、それをスピンアップするだけです。

オンザフライで突然変異を起こすと、マルチスレッドコードがオンザフライでサービスを停止して再起動しなければならず、サービス開始/停止の大きな複雑なオブジェクト依存グラフがあるので、あらゆる種類の複雑なバグやリソースリークが発生する可能性があります。急いで。ヒューズチームでは、の再起動でバグを修正するのに多くの人が無駄になりました。ロジックがあり、OSGiサービスを即座に再起動するには数十億のバグが残っていると確信しています。

実際には、Continuous Deployment pipelineを使用してすべての変更を公開することをお勧めします。コードか構成かどうか。あなたが変更を行った時から新しいコード/ configを使ってプロセスが新しいリクエストを処理している間にいくつかのレイテンシが追加されていますが、より多くの品質と信頼性があります。変更のローリングアップグレードも簡単に行うことができます。その変更が、ビッグバンではなく、ユーザーの小さなサブセット/トラフィックのために物事を壊す場合は、速やかなフィードバックを得ることができます。

そう言われています。簡単なロールバックがないビッグバンのアプローチで最初にテストすることなく、プロダクションJVMがコードや設定を即座にリロードすることを依然として本当に望むなら、まだいくつかのオプションがあります。それらはconfiguration microservices documentationに記載されています。

本質的には、ConfigMap in Kubernetesまたはgit repository volumeを使用するようになっています。どちらの場合も、構成はボリューム(ファイル)として公開されます。Javaコードはファイルを監視し、その場でリロードすることができます。これは、OSGi Config AdminまたはSpring Boot経由で行うことができます。どちらの開発フレームワークを選んでも問題ありません。

ちょうどこの質問はかなりprogrammers.stackexchange.comにする必要があります離れ不変インフラと連続配信

+0

完全に同意しました。特に、マイクロサービスの世界では、アーチファクトのフットプリントが小さいためにターンアラウンドタイムが速くなるはずです。よく定義された、常に再現可能な状態になるためには、(マイクロ)アプリ全体を再起動するのが手頃でなければなりません。また、アプリケーションが本番で運用される方法をより現実的なワークフローと同じように反映します。 これは、開発の往復時間を短く保つことができれば、本当にうまく動作します。これは、重要な要件です。 –

+0

私は、ホットデプロイメントが短い開発サイクルを持つ必要はないことに同意します。私はJamesがSpring Bootのために示したのと同じ方法で、個人的にOSGiを使って作業します。自動化されたパイプラインに完全にパッケージ化されたデプロイメントユニットを作成します。 主な違いは、私がマイクロサービスではなく、むしろ1つのプロセスでモジュラーアプリケーションで始めることを提案していることです。はるかに簡単です。次に、必要に応じて、個々のマイクロサービスとして異なるチームまたは開発サイクルでモジュールを分割します。 –

3

あなたは春ブーツで作業熱い展開を取得することはできませんありがとうございました。私たちは現在、OSGiのような春のブーツのような体験を提供することを目的としたカラフなブーツに取り組んでいます。

先週、バルセロナで開催された会議(JBCNCONF)で、話題になったのはLean microservices in OSGiでした。

私はOSGiのマイクロサービスはすでに実行可能だと思いますが、まだ春のブートが提供するのと同じ利便性ではありません。ここで

+0

私はOSGIについて混乱しています。モジュール(マイクロサービス)のバンドルを作成するのが仕様だと思った – Marc

+2

それは本当です。 OSGiはモジュラー・アプリケーションを作成することができ、これらはOSGiサービス(マイクロサービスとも呼ばれます)を介して通信します。 SpringはOSGiとの互換性はあまり高くなく、あまりモジュール化されていません。だから、春のブート方法は、独自の展開単位として各マイクロサービスを作成し、RESTなどを使用して通信させることです。 したがって、どちらもモジュールを実行しますが、非常に異なる方法です。 –

+0

karafでSpring-bootを使用/展開する方法。 – Sanjeev

関連する問題