岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

なぜステートレス性が重要でないのか

いわゆる「文字エンコーディング問題」は、セキュリティ専門家の間でも意見が分かれているようなので、そちらにおまかせします。今回は、RESTについて久々に考えてみます。

日本Ruby会議2008で、山本陽平さんが「REST信者から見たRuby on Rails 2.0」と題した発表をされました。発表を(ustで)聞いていて私が驚いたのが「ステートレス性はあまり重要じゃない」と説かれた部分です(発表スライドでは28ページ)。

それ以来、なぜ重要でないのかずっと気にかかっていたのですが、私なりに答えらしきものが浮かんだので、いつものとおり当てずっぽうで書いてみます。

そもそも「ステートレス性」って、アプリケーション状態(ステート)をサーバ側で維持しない(レス)ということですよね。なぜステートレス性がスケーラビリティに寄与するといわれているかといえば、アプリケーション状態の維持に必要な分のデータ容量やデータ参照・更新頻度が減るからでしょう。

このあたりに関して、書籍『RESTful Webサービス』では「ステートレスアプリケーションは、負荷分散サーバー間で簡単に分散させることができる」と書かれています(4.5 ステートレス性)。

いやいやいや、待てよと。リソース状態にだって、量や参照・更新頻度の多いデータはあるんじゃないのと。Twitterをステートレスにすれば「簡単に分散させることができる」のかと。逆にいえば、量や参照・更新頻度の多いリソース状態データを持ちながら負荷分散できるノウハウがあるなら、アプリケーション状態データにだってそのノウハウを適用すればいいんじゃねと。

そんなわけで、ステートレス性にこだわる必要はないと思い始めました。スケーラビリティ以外に挙げられているステートレス性の利点、すなわち可視性や信頼性は、素直にありがたいとは思うけれど。

ところで「アプリケーション状態って何? リソース状態って何?」という方には、書籍『RESTful Webサービス』、書籍『RESTful Webサービス』の一読をお勧めします。

RESTful Webサービス

RESTful Webサービス