問題タブ [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.
spring-security - Spring Security OAuth2 AuthorizationServer
spring-security-oauth2 で遊んでいます。認証バックエンドを使用していくつかのマイクロサービスを構築しようとしています。
次の依存関係を持つ単純なスプリング ブート プロジェクトをセットアップしました
および 1 つの構成クラス
Client- と UserDetailsService の私の実装は非常に単純で、常にオブジェクトを返します
しかし、経由でaccessTokenを受信しようとすると
「このリソースにアクセスするには完全な認証が必要です」というエラーが表示され、試してみると
「資格情報が正しくありません」というエラーが表示されます。私の観点からは、両方とも機能するはずですが、構成が欠落しているようです。
OAuth には他にも不明な点があります。Spring-Security とカスタム ログイン フォームを使用して spring-mvc アプリケーションを構築しようとしています。認証アプリにリダイレクトせずに、春のセキュリティによってトークン要求と更新サイクルを処理することは可能ですか?
イベント ドリブン アプリケーションの場合、トークンが有効であることを確認できますか? 失敗した場合、ユーザーがボタンをクリックするとイベントが書き込まれますが、この処理には数時間かかります。ユーザー資格情報を使用してイベントを処理するにはどうすればよいですか?
oauth - マイクロサービスと oauth アーキテクチャ
私はマイクロサービス アーキテクチャを学んでいますが、いくつか質問があります。
このようなアーキテクチャを想像してみましょう: シンプルな html ページ (example.com) があります: メインページ、開発者向けの情報、ログイン、サインアップなどグーグル+、ツイッターなど)。それらのすべてには、client_id、state (すべてのリクエストを生成し、セッションに保存する)、redirect_url があります。そのため、redirect_url は別のマイクロサービス (auth.example.com/oauth?code=...&state=...) を指しています。次に、コードをトークンに変更し、get_user_info のようなリクエストを送信して、db に保存します (別名、登録または更新ユーザー)。その後、JWT トークンを生成して API を呼び出し、トークンをユーザーに返し、dashboard.example.com にリダイレクトします。このページで、ユーザーは私の API (api.example.com) と JWT トークンを使用します。
したがって、3 つのマイクロサービスがあります: メイン サイト (情報とログインを含む) - example.com、認証サーバー (承認と認証) - auth.example.com、および API サービス - api.example.com
そして質問: 1. oauth プロバイダーが example.com (セッションに状態を保存する) から auth.example.com にリダイレクトするときの状態を確認するにはどうすればよいですか? rebbitMQ を使用すると思いますが、大丈夫ですか? 2. JWT トークンを本文に入れ、HTTP 302 リダイレクト (dash.boardexample.com にリダイレクト) で応答を送信できますか?
ご意見、アドバイスいただけると嬉しいです!
ありがとう、ディマ。
spring-boot - RESTful マイクロサービスのフェイルオーバーと負荷分散
現在、モノリシックな Web アプリケーションがいくつかあり、プロジェクトをマイクロサービス インフラストラクチャに移行しようとしています。
モノリシック アプリケーションの場合、フェイルオーバーと負荷分散を行う HAProxy とセッション レプリケーションです。
現在、Spring Boot を使用していくつかの RESTful マイクロサービスを構築していますが、運用環境を構築する最善の方法が何であるかは明確ではありません。もちろん、すべてのアプリケーションを UNIX サービスとして実行でき、負荷分散とフェイルオーバー用のリバース プロキシも引き続き使用できます。このソリューションは私にとって非常に重いようで、多くの構成とメンテナンスが必要です。リソース管理とサーバーのスケールアップまたはスケールダウンは、常に手動のプロセスになります。
2 ~ 3 台のサーバーと簡単なリソース管理を備えた運用環境をセットアップするための最良の可能性は何ですか? 継続的な展開もサポートするソリューションはありますか?
web-services - マイクロサービス アーキテクチャ: サービス間のデータ共有
オンライン ストア プロジェクトの次のマイクロ サービスを検討してください。
ユーザー サービスは、ストアのユーザーに関するアカウント データを保持します (名、姓、電子メール アドレスなどを含む)。
購入サービスは、ユーザーの購入に関する詳細を追跡します。
各サービスは、関連するエンティティを表示および管理するための UI を提供します。購入サービスのインデックス ページには、購入品が一覧表示されます。各購入アイテムには、次のフィールドが必要です:
id、購入ユーザーの氏名、購入アイテムのタイトル、および価格。
また、インデックスページの一部として、店長が購入ユーザー名で購入品を検索できる検索ボックスが欲しいです。
Purchase Service が保持していないデータ (ユーザーの氏名など) を取得する方法がわかりません。ユーザー名を購入して検索購入などのより複雑なことをしようとすると、問題はさらに悪化します。
ユーザーの作成時に何らかのイベントをブロードキャストする (そして、関連するユーザー プロパティのみを Purchase Service 側に保存する) ことにより、2 つのサービス間でユーザーを同期することで、明らかにこれを解決できると考えました。私の観点では、それは理想とはほど遠いものです。何百万人ものユーザーがいる場合、これにどのように対処しますか? ユーザーデータを消費する各サービスで何百万ものレコードを作成しますか?
もう 1 つの明らかなオプションは、指定された ID に基づいてユーザーの詳細を返すユーザー サービス エンドで API を公開することです。つまり、購入サービスでページが読み込まれるたびに、適切なユーザー名を取得するためにユーザー サービスを呼び出す必要があります。理想的ではありませんが、私はそれと一緒に暮らすことができます。
ユーザー名に基づく購入検索の実装についてはどうですか? ユーザー サービス エンドでいつでも別の API エンドポイントを公開できます。このエンドポイントはクエリ用語を受け取り、ユーザー サービスでユーザー名に対してテキスト検索を実行し、条件に一致するすべてのユーザーの詳細を返します。購入サービスで、関連する ID を正しい名前にマップし直して、ページに表示します。このアプローチも理想的ではありません。
何か不足していますか?上記を実装するための別のアプローチはありますか?私がこの問題に直面しているという事実は、コードの匂いのようなものでしょうか? 他の解決策を聞きたいです。
nginx - 単一サーバーで複数の Docker コンテナー (マイクロサービス) を管理および利用する
Web サイトを提供するポート 80 にリストされている Nginx/Apache Web サーバーで実行されている GCE (Google Compute Engine) サーバーがあります。同時に、Docker コンテナーと同じサーバーで複数のマイクロサービスを実行しています。各コンテナーは、適切なローカル IP アドレスで Web サイトを提供し、localhost:PORT にバインドしました。ポートをパブリック IP アドレスにバインドしたくありません。これにより、マイクロサービスが外部に公開されるためです。
問題は、コンテナーによって提供される Web サイトのページを、Web サーバーのポート 80 で実行されている Web サイトに埋め込む必要があることです。埋め込みコードはブラウザーによって実行されるため、python/HTML コードでローカル IP (172.17.0.x) または localhost:PORT を使用することはできません。
では、コンテナー内でローカルに実行されているマイクロサービスのページを、ユーザーにサービスを提供する Web サイトに埋め込むにはどうすればよいでしょうか?
例えば:
私のサーバーのパブリック IP: 104.145.178.114 Web サイトの提供元: 104.145.178.114:80 同じサーバー内で、172.17.0.1 や 172.17.0.2 などのローカル IP で複数のマイクロサービスが実行されています。各コンテナーは、172.17.0.1:8080/ test.htmlのページをサーバーする内部で実行されるサーバーを持ち、他のコンテナーについても同様です。ここで、このページ test.html を、104.145.178.114 の Nginx/Apache Web サーバーによって提供される別の Web ページに、内部/ローカル IP ポートを公開せずに埋め込む必要があります。
この問題に対する提案と代替ソリューションを聞きたい