Develop with pleasure!

福岡でCloudとかBlockchainとか。

スレッドセーフなWebアプリ

Java の理論と実践: ステートフルな Web アプリケーションはすべて壊れているのか

基本的なWebアプリケーションは、

  • ブラウザがリクエストを発行
  • サーバサイドで処理を実行し、レスポンスを生成
  • ブラウザがレスポンスを受け取る


といった基本的な流れで、処理が実行される。HttpSessionを利用していても、1つのブラウザから同時に処理を発行するといったことは(2重サブミットとかはあるけど)基本的に行わない。
ただ、Ajaxを利用したリクエストの発行については、ブラウザから同時にリクエストを発行するということがあり得る。
そういった意味では、Ajaxを採用する場合は特にHttpSession、ServletContext等で保持している共有データについてきちんとスレッドセーフな設計にしておく必要があると。まぁ、その他にもあまりAjaxを多用してサーバへのリクエスト数を増加させるとサーバ側の負荷が高まり、捌き切れなくなったリクエストが待ち行列に陥るケースとかあるので、いずれにせよ単純にAjaxで非同期できた♪ではなく、きちんと仕様検討&設計する必要がある。
現状のRailsにしろLLの流れってさくっと動くものができるという売りで、バック側のロジックや性能が置き去りにされているという気もする。

追記:
ブラウザでもDOM Strageが本格的に利用可能になると、ステートの管理をクライアント側でもできるようになるので、そうなったらまたサーバ/クライアント間のステート管理も良く考える必要がある。