2017-12-22 67 views
8

新しいウェブアプリケーションを開発する初期段階にあり、Amazonクラウドプラットフォームを利用したいと考えています。しかし、Java springフレームワークまたは他のプログラミング言語/フレームワークを使用してWebアプリケーションを開発する選択肢があります。マルチページアプリケーションは、ステートレスではなく、すなわち、アプリケーションは、ログインしたトランザクションのユーザセッションを追跡する必要があります。必要な情報がユーザから複数ページにわたって取得されると、トランザクションはデータベースにコミットされます。セッションとデータベースを使用したAWSラムダとWebアプリケーション

ただし、このアプリケーションではAWSラムダサービスを利用する可能性があります。 AWS Lambda(ラムダサービスがセッションレスであることを知っている)を使用して、上記の要件を備えたWebアプリケーションを開発することは正しい判断でしょうか?

答えて

1

セッションデータに外部永続ストレージを使用できる場合、Lambdaでステートフルなアプリケーションを実行している可能性があります。

たとえば、セッションデータの一時記憶域としてDynamoDBまたはElasticacheを使用し、必要なすべてのデータが準備できたら、データベースクエリに永続的に永続化することができます。

+0

ありがとうdashmug ..ステートフルなサービスとしてステートレスなサービスを行うための回避策はありませんか?既存の言語やフレームワークを使用して従来のWebアプリケーションを構築するよりも優れたソリューションですか? –

+0

あなたが何を意味しているのか分かりません。明らかに、ステートレス+ステートフルステートフルです。これは定義によるもので、回避策ではありません。 – dashmug

+0

言語はセッションのメンテナンスを行いません。フレームワークに関しては、どのようにセッションメンテナンスを実装すると思いますか?彼らはどのように状態を保つのですか? :-) – dashmug

1

サーバーレスのアーキテクチャがアプリケーションに適しているかどうかを判断するには、考慮すべき点がたくさんあります。私は、この質問には「すべてが合う」という答えはないと思う。

サーブレットコンテナの代わりにラムダを使用すると、実際にセッションの永続性に関して少しの開発オーバーヘッドが発生します。しかし、サーバーレスのアーキテクチャーがアプリケーションに適しているかどうかを尋ねるときには、これは必ずプライマリであるとは思わないと思います。セッションが動作するように起こっているかを心配する前に、私は自分自身に尋ねたい:

  • アムI喜ん及びそのアプローチが付属して、追加の運用と開発の複雑さを受け入れ、microservicesのコレクションとしてアプリケーションを書くことができますか?
  • 私はUIにクライアント側のレンダリング手法を使用しますか?そうでない場合は、私が選択したサーバー側レンダリング技術がLambdaと簡単に統合できますか?
  • 私は(安全に)クライアント側にどのくらいのビジネスロジックを埋め込むことができますか?
  • 私のトラフィックパターンは何ですか(そして拡張性の必要性によって)?私の交通は安定していますか?スパイキー?私は休眠の長い期間を持っていますか?
  • サーバレスでEC2経由でcost advantageになる可能性はありますか?
  • ラムダのコールドスタートはあなたのUXにとってどれほど有害でしょうか?
  • 最後に、セッションに関して、セッション中のデータの重要度はどれくらいですか? JWTをオプションとして使用する「ステートレス」セッションですか?

アプリケーションが本当にサーバーレスのアーキテクチャに適している場合、セッションを維持する方法を把握するオーバーヘッドは、おそらくディール・ブレーカーと同じくらい高価ではありません。

私の経験では、開発者(自分自身を含む)は、セッションの実装方法や持続方法の特徴よりも、マイクロサービスや(多くの場合)クライアント側のレンダリングへのパラダイムシフトには苦労しています。

2

質問はラムダに固有の問題ではありません。セッション管理が簡単な唯一のケース(例:メモリまたはファイルベースのストレージによって解決することができます)は単一のサーバー環境にあります。それはおそらくあなたがどこから来ているのかです。

水平方向にスケーリングを開始する瞬間(サーバーにRAM/CPUを増やすのではなく、より多くのサーバーを配置する)には、セッション(キャッシュ)用の中央記憶域が必要です。これは、docker、またはEC2、またはロードバランサの背後にあるメタルサーバーを選択した場合も同じです。

これは、同じユーザーからの次の要求が同じ環境にあるかどうかを判断できないためです。もちろんラムダにも当てはまります。 1つの回避策があります。つまり、ロードバランサを使用して「スティッキセッション」を使用する場合、同じユーザーのすべてのリクエストが同じマシンにルーティングされます。this AWS doc on session managementを参照してください。しかし、スティッキーセッションは常に最適ではありません(例えば、スケールダウンはセッションを破壊することを意味します)。ラムダの場合、スティッキーセッションは可能ではありません。

他の答えが示唆しているように、実際の解決策には、Elasticache経由の中央セッションストレージが含まれています。上記のリンクからの引用:

個々のWebサーバーからアクセスできるセッションのスケーラビリティと共有データ記憶域を提供するために、Webサーバー自体からHTTPセッションを抽象化することができます。このための一般的な解決策は、RedisやMemcachedなどのメモリ内キー/バリューストアを活用することです。

関連する問題