問題タブ [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.

0 投票する
2 に答える
3516 参照

spring-data-rest - Spring Data REST / Spring HATEOAS ベースの (マイクロ) サービス間の関係を確立する方法は?

Spring Data Rest または HATEOAS に基づくハイパーメディア ベースのマイクロサービスを使用する場合に関係を処理する方法のパターンを見つけようとしています。

サービス A (インストラクター) とサービス B (コース) がある場合、それぞれがスタンドアロン アプリとして存在します。

2 つのサービス間の関係を確立するための推奨される方法は何ですか。外部サービスの ID の列を必要としない方法で。各サービスには、同じマナーで通信する必要がある他の多くのサービスが含まれる可能性があります。

考えられる解決策 (正しいパスがわからない)

各サービスには、サービス内のプライマリ エンティティを持つ OneToMany を持つ 2 番目のテーブルがあります。テーブルには次のフィールドがあります。

ID、entityID、rel、relatedID

次に、Spring Data Rest セットアップを使用する反対のサービスで、結合テーブルを照会して一致するレコードを検索する検索をセットアップします。

私が達成したい主な目標は、他のサービスの知識がなくても、任意のサービスが任意の数の他のサービスと関係を持つことができることです。

0 投票する
1 に答える
426 参照

web-services - サーバー間通信のための Oauth2 許可

私は、サービスの相互作用を可能にするために独自の oauth2 プロバイダーを持つマイクロサービス アーキテクチャで作業しています。

ユーザー アカウントで内部タスクを実行するために、ユーザーのリソースへのアクセスが許可されているサービスを開発する必要があります。ユーザー リソースにアクセスする必要があるサービスは内部サービスであるため、ユーザーに自分のリソースへのアクセスを許可するよう求めることは実行可能な解決策ではありません。

このタスクを実行するために適切な許可を選択することを懸念しています。これclient_credentialsは正しいものと思われるため、ユーザー リソースにアクセスする代わりに、サービス データの更新のみを許可するためにも使用されているようです。私が考えた別の解決策は、ユーザーが「許可」ボタンをクリックしたかのように、ユーザーのサインアップ時に認証コードを自動的に提供し、その許可でリクエストを実行することcodeです。ここでの欠点は、そのニーズを持つサービスが作成されるたびに新しい認証コードを作成する必要があることですが、それはより明確な解決策のようです (ユーザー XXX の認証コードはユーザー XXX のリソースへのアクセスのみを許可するため)。

また、標準が多くの柔軟性を提供するため、実装が異なることも理解していますが、適切なソリューションはどれだと思いますか? どのように対処しますか?「統計サービス」がすべてのユーザー リソースへのアクセスを許可されている、または「統計サービス」がすべてのユーザーによってリソースへのアクセスが許可されている、と言う方が明確でしょうか?

0 投票する
3 に答える
534 参照

ruby-on-rails - これらのプロデューサー/コンシューマー マイクロサービスを変更して並列処理を許可するにはどうすればよいですか?

私はいくつかのマイクロサービスを持っています (Ruby で実装されていますが、それが私の質問にとって重要であるとは思えません)。それらの 1 つはアイテムを提供し、もう 1 つはそれらを処理し、(DELETE 呼び出しを介して) 処理済みとしてマークします。

プロバイダーには/items、ID で識別される多数の項目を JSON 形式でリストするエンドポイントがあります。またDELETE /items/id、リストから 1 つの項目を削除するエンドポイントもあります (おそらく処理されるため)。

「プロセッサ」のコード (非常に簡略化) は次のようになります。

これにはいくつかの問題がありますが、私が解決したいのは、スレッドセーフではないため、並列で実行できないことです。2 人のワーカーがアイテムの処理を同時に開始すると、「互いのつま先に足を踏み入れる」ことになります。つまり、同じアイテムのリストを取得し、各アイテムを 2 回処理して削除しようとします。

このセットアップを変更して並列処理を可能にする最も簡単な方法は何ですか?

ルビーが利用可能であると想定できます。私は変更を最小限に抑えることを好み、可能であれば他の gem をインストールしたくありません。Sidekiqは、コンシューマのキューイング システムとして利用できます。

0 投票する
1 に答える
1687 参照

redirect - Docker コンテナ間のリダイレクトのベスト プラクティス

Docker コンテナーで複数の Web アプリケーションを実行していることを考えると、ユーザーをブラウザーのサービスから別のサービスにリダイレクトできるようにしたいと考えています。これをどのように達成するのだろうか-特に、アプリケーションをあるdockerホストから別のホストに移植できるようにしたい場合。

ユーザーを ServiceB にリダイレクトする ServiceA があるとします。だから私たちは関係を持っています

ServiceA --> ServiceB

1 つのアプローチは、ポートとホスト名を静的に割り当て、環境変数として Web サービスに設定することです。これは、どのサービスがどのポートで実行されるかを気にしたくないため、好みません。

2 番目のアプローチは、nginx のようなプロキシを使用してサービスをリンクし、プロキシのホストとポートを使用することです。ただし、これには、サービスを別のホストに移動するときにプロキシ構成を変更する必要があります。

思いつく 3 番目のアプローチは、etcd とアンバサダーを使用してサービスを登録および解決することです。そのため、ServiceA は、etcd で ServiceB を検索する ServiceB-Ambassador を使用します。これにより、サービス間を接続するためだけに多くの docker コンテナーが作成されます。

あなたはどちらの方法を好みますか?それとも、さまざまなアプローチがありますか?

編集

本当の問題は、ServiceB の uri を ServiceA に挿入することです。そのため、ServiceA を のような引数で起動して-DserviceB.uri=<serviceUri>、serviceA が正しいリダイレクト ヘッダーを作成できるようにします。

0 投票する
6 に答える
13766 参照

java - 親ポンとマイクロサービス

  • マイクロサービスであるいくつかのプロジェクトがあり、すべてのプロジェクトは独立しています (別のスプリング ブート サーバーで実行され、残りのサービスを公開し、別の DB スキーマを使用します...)
  • 依存関係の管理には maven を使用します。

各マイクロサービスをモジュールとして宣言する親 pom を持つことは良い考えですか? そして、共通の依存関係を管理するのに役立ちます (lib servlet-api witch がすべてのプロジェクトで使用され、それらすべてを削除し、親 pom でのみ宣言するように)

0 投票する
2 に答える
5442 参照

php - 私のコンセプトはマイクロサービス アーキテクチャに従っていますか?

Martin Fowler のページにあるマイクロサービスに関する記事を読んで、非常に興味深いと思いました。現在、概念実証として E コマース Web アプリケーションの構築を計画していますが、私の概念がマイクロサービス アーキテクチャと見なされるかどうか疑問に思っています。

このアーキテクチャは、次の 3 つのコンポーネントで構成されています。

  • AJAXリクエストをに送信するJavaScriptベースのシングルページアプリケーション
  • 他のサービスを呼び出して受け取った JSON データをフィードする REST API を備えたサーバー (この動作を API Gateway と呼んでいると思います)
  • 3 つのサービス: CatalogProvider、CustomersProvider、CheckoutProvider

今のところ、サービスはすべて Magento (PHP) Shopsystem の API エンドポイントです。将来的には、プロバイダーを他のシステムと交換する予定です。

だから私の質問は:

  • MS は「独立して配備可能」であると見なされます。JAVA の世界では 1 つの JAR ファイルまたは WAR ファイルについて話していることは理解していますが、PHP サービスはどのように「独立してデプロイ可能」でしょうか?

  • プロバイダーはすべて 1 つの大きな (Magento) システムの一部であるため、私のコンセプトは MS アーキテクチャの原則に従っていませんか?

読んでくれてありがとう。どんな提案でもうれしいです。

0 投票する
1 に答える
1014 参照

git - マイクロサービス向けの合理化された開発環境を構築する方法

私はマイクロ サービス アーキテクチャについて考えていて、人々が開発環境の優れたベスト プラクティスを持っているかどうか疑問に思っていました。

私の作業上の仮定は、各マイクロ サービスは、分離と展開の容易さのために独自の git リポジトリに存在するということです。また、各開発者は、作業中のレポのフォークを作成すると想定しています。

私が検討している問題は、複数のマイクロサービスを含む問題に取り組んでいる場合に発生します。たとえば、あるマイクロ サービスに影響を与える欠陥と、それが別のマイクロ サービスを適切に消費する方法があります。

n 個のプロジェクトが欠陥に関係していると仮定すると、n 個の git リポジトリをチェックアウトし、それらが連携するように構成する必要があります。それぞれに Vagratefile と Dockerfile がある場合、n 個の VM を実行することになります。理想的には、Vagrant VM は 1 つだけで、各サービスは同じ VM 内の新しい Docker インスタンスになります。

git サブモジュールを含むマスター リポジトリ/プロジェクトが機能する可能性があります。これに関する問題は、一般的なマスター リポジトリ/プロジェクトを作成すると、サブ モジュールが開発者のフォークではなくアップストリームを指すようになることです。

私は現在、いくつかの構成、vagrant、および fig を含むマスター プロジェクトがそのトリックを行う可能性があると考えています。現在、このアプローチを実装する 2 つの方法を検討しています。

  1. 構成にいくつかのデフォルトを指定します。つまり、project_1 は ../project_id に配置する必要があります。
  2. ユーザーの github アカウントに基づいてサブモジュールを作成するスクリプトを提供します。これにより、ユーザーのフォークのリモートと上流プロジェクトのリモートが作成されます。

他の誰かがこの問題を解決しましたか、または良いワークフローを持っていますか?

0 投票する
2 に答える
392 参照

configuration - Cloud Foundry サービス インスタンスをパラメータ化する方法は?

私の問題は、このケースに還元できます。メッセージを返す単一の REST エントリポイントを持つサービスが必要です。それは私にとって非常に便利なので、インスタンスをいくつか持ちたいと思いますが、それぞれが指定した異なるメッセージを返します。もちろん、これらのサービス インスタンスのそれぞれは、いくつかのアプリにバインドされます。だから私はそのようなことをどのように達成するのだろうか.

これを行う最善の方法は、ブローカーの作成呼び出し中にいくつかのパラメーターを渡すことです ( http://docs.cloudfoundry.org/devguide/services/adding-a-service.html#create )。しかし、これを行うことは不可能です。起動時に渡されるいくつかのパラメーターによって異なるいくつかのサービスの複数のインスタンスを作成する方法を知っていますか? 完全な CF インスタンス管理が必要で (クラッシュした場合は再起動する必要があります)、環境変数として渡されるさまざまなパラメーターを持つアプリとしてそれらを作成することは避けたいです ...

更新: さまざまなメッセージ (およびインスタンス) の量は非常に大きくなる可能性があり、その内容は事前に不明です。これにより、サービス ブローカー プラン (メッセージごとに 1 つのプラン) の使用が何らかの形で失格となります。

0 投票する
0 に答える
243 参照

java - フェデレーション機能を備えた組み込み Java Amqp ブローカー

amqp メッセージと通信するマイクロ サービスが必要です。RabbitMQ サーバーへの接続が確立されたときに、すべてのメッセージをローカル キューからサーバーに送信/フェデレーションするローカル キューが必要です。

Apache Qpid を調べましたが、Java Broker にはまだフェデレーション機能がありません (そのための提案があります)。

機能する別の小さな組み込み Java amqp ブローカーはありますか? または、ローカル キューからリモート サーバーに積極的にメッセージを送信する Java ツールが他にありますか?