問題タブ [microservices]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-applications - マイクロサービス ベースの Web アプリのアーキテクチャ
Web アプリケーションがマイクロサービスに分岐するポイントについて混乱しています。それは URL レベルですか、それともモデル レベルですか? 例として、3 つのページを提供するモノリシック アプリがあるとします。各ページが個別のユースケースを提供していて、それぞれのページを独自のマイクロサービスでサポートしたいとします。マイクロサービスベースのアーキテクチャを実装する正しい方法は次のうちどれですか。
- 3 つの異なるアプリ (マイクロサービス) を作成し、それぞれにページの 1 つの (ルート、コントローラー、モデル、テンプレート) が含まれています。そして、リクエストされたページに基づいて、リクエストをその特定のアプリにルーティングします。これは、データベースから HTML までのページ全体が別のアプリによって提供されることを意味します。基本的に、同じ Web サイトのさまざまなページは、バックエンドのさまざまなアプリによって完全に提供されています。
- 3 つのマイクロサービスは UI を処理せず、ユースケース (モデル、コントローラー、テンプレートなし) のデータのみを処理し、REST API を介して公開します。私は公開アプリを 1 つ持っています。このアプリは、3 つの異なるアプリ (マイクロサービス) に対してデータのみを照会し、ブラウザーに返される html ページを構築します。この場合の Web アプリ内のすべてのページは、内部で 3 つの異なるマイクロサービスを利用する単一のアプリによって提供されています。
esb - マイクロサービス アーキテクチャがエンタープライズ サービス バスに基づいていないのはなぜですか?
マイクロサービス アーキテクチャ ( http://martinfowler.com/articles/microservices.html )に準拠した全体的なサービスを構築する際に、Enterprise Service Bus の機能を使用しない (または使用する) 理由は何ですか? よりスマートなパイプを使用してよりシンプルなサービスを開発できるのではなく、ダム パイプとスマート エンドポイントを使用する必要があるのはなぜですか?
rabbitmq - RabbitMQ を使用してクラウド ファウンドリと通信するレガシー アプリケーション
私は Cloud Foundry を初めて使用し、レガシー Java EE アプリケーションが Cloud Foundry で実行されているアプリケーションと非同期で通信する方法を調査しています。
すでに多くの非同期作業を行っており、イベントを Active MQ に発行しています。
Cloud Foundry が Rabbit MQ とバインドする可能性があることは知っています。私の質問は、Cloud Foundry を実行しているアプリケーションが CF プラットフォームの既存の Rabbit MQ に接続 (リッスン) する可能性についてです。
これを達成するための他の選択肢について何か考えはありますか?
node.js - ストリーミング JSON を使用して 2 つの Node/Express アプリを接続する
現在、2つのアプリを実行しています...
1 つは、フロントエンドに多数のサービスを提供する REST API レイヤーです。もう 1 つは「翻訳アプリ」です。JSON オブジェクトを (http POST 呼び出しを介して) フィードし、そのオブジェクトに対してデータ変換とマッピングを実行して、REST レイヤーに返すことができます。
私の状況は、多数のオブジェクトに対してこれを行いたいということです。私が望むフローは次のとおりです。
ユーザーが特定の形式で 100,000 個のオブジェクトを要求 -> REST レイヤーがデータベースからそれを取得 -> 各 JSON データ オブジェクトを変換サービスに渡して書式設定を実行 -> それぞれを REST レイヤーに戻す -> REST レイヤーが新しいオブジェクトをユーザーに返す.
私がやりたくないのは、100,000 回の異なる呼び出しで tranlate.example.com/translate を呼び出したり、1 つの巨大な POST 要求でメガバイトのデータを渡したりすることです。
したがって、明らかな答えは、データを翻訳アプリにストリーミングしてから、データをストリーミングして戻すことです。
アプリ間でデータをストリーミングするための多くのソリューションがあるようです: websocket (socket.io) を開く、2 つの間の生の TCP 接続を開く、または Node の HTTP 要求と応答データは実際にはストリームであるため、それを利用できます次に、正常に変換されたときに JSON オブジェクトを発行します
私の質問は、2 つのアプリ間でデータをストリーミングするためのベスト プラクティスはありますか? 「REST」モデルを維持するには、http(req, res) ストリームを使用し、長寿命の接続を開いたままにしておく必要があるようです。提供できるサンプルはどれも素晴らしいでしょう。
java - 複数のサービスが依存している場合、マイクロ サービス アーキテクチャで自己作成のアーティファクトを処理するにはどうすればよいですか?
Spring Boot と RabbitMQ を使用して、マイクロ サービス アーキテクチャをテストしています。
私は今、2 つの小さなサービスを持っています: UserRegistrationService (ユーザーをデータベースに登録します) GetUserInfo (同じデータベースからユーザーを返します)
すべてのユーザー固有のサービスで同じデータベースを使用することにしました。
どちらのサービスもエンティティ「ユーザー」(JPA) を使用しています。(これは最も賢明な方法ではないかもしれません)
この依存関係を処理するスマートな方法はありますか? (2 つのサービスが同じエンティティに依存しています) エンティティ (ユーザー) を別のプロジェクトにして、アーティファクト リポジトリを使用する必要がありますか?
architecture - マイクロサービス アーキテクチャでは、プラットフォームまたはコア コードの設計はどのようになりますか?
モノリシック アーキテクチャでは、コア/プラットフォーム コードがあり、その上に一連のサービスまたはビジネス ドメインが構築されます。いくつかの例は、データベースの抽象化、外部サービスの抽象化などです。
マイクロ サービスの場合、プラットフォーム コードはモジュールとして記述され、各マイクロ サービスに依存モジュールとしてインポートされますか、それとも、モジュールと共通モジュールの間の密結合が原因で、これはアーキテクチャの構造に違反しますか? (コア/プラットフォーム) コードを使用して、複数の展開、コードのバグ、ベンダー ロックインなどに関連する問題に戻りますか?