私はSOAにかなり慣れていないので、いろいろと実験しています。
現在、私にとって最大の問題を引き起こしているのは認証です。これについての私の現在の考えは次のとおりです。
クライアントはある種の認証メッセージを認証/ユーザーサービスに送信します。このサービスはデータベースにクエリを実行し、ユーザーが見つかり、パスワードが有効な場合、セッションIDで応答します。このIDは、以降のすべてのリクエストで使用されます。このクライアント。
これは私にはかなり問題ないように思えますが、他のサービスへのリクエストをどのように処理する必要があるのかわかりません。3つの異なるアプローチを考えました。
すべてのサービスは、セッションが有効かどうか、有効な場合はユーザーがどの役割を果たしているかを認証サービスに問い合わせます。認証サービスはデータベースを調べ、それに応じて応答します。
認証サービスはすべてのセッション情報をRAMに保持し、dbラウンドトリップなしで要求に応答します。
認証サービスは許可されたメッセージをesbに送信し、esbはこの許可されたメッセージをすべてのサービスに転送し、これらのサービスはそれをキャッシュします。認証サービスへのそれ以上の要求は必要ありません。ユーザーがログアウトしたり、役割が変更されたりすると、別のメッセージが送信され、すべてのサービスによって処理されます。
最初のアプローチは、認証サービス/ dbに過度のストレスを与えると思いますが、実装にかかる労力は最小限です。
2つ目はまだ実装が非常に簡単ですが、認証サービスへのストレスはほとんど同じです。
3つ目は、実装が少し複雑ですが、認証サービスへのアクセスが行われないため、応答時間が短縮されます。ただし、セッション情報が多すぎると、このアプローチは失敗し、スケーラビリティはほとんど得られません。