なぜステートレス性が重要でないのか
いわゆる「文字エンコーディング問題」は、セキュリティ専門家の間でも意見が分かれているようなので、そちらにおまかせします。今回は、RESTについて久々に考えてみます。
日本Ruby会議2008で、山本陽平さんが「REST信者から見たRuby on Rails 2.0」と題した発表をされました。発表を(ustで)聞いていて私が驚いたのが「ステートレス性はあまり重要じゃない」と説かれた部分です(発表スライドでは28ページ)。
それ以来、なぜ重要でないのかずっと気にかかっていたのですが、私なりに答えらしきものが浮かんだので、いつものとおり当てずっぽうで書いてみます。
そもそも「ステートレス性」って、アプリケーション状態(ステート)をサーバ側で維持しない(レス)ということですよね。なぜステートレス性がスケーラビリティに寄与するといわれているかといえば、アプリケーション状態の維持に必要な分のデータ容量やデータ参照・更新頻度が減るからでしょう。
このあたりに関して、書籍『RESTful Webサービス』では「ステートレスアプリケーションは、負荷分散サーバー間で簡単に分散させることができる」と書かれています(4.5 ステートレス性)。
いやいやいや、待てよと。リソース状態にだって、量や参照・更新頻度の多いデータはあるんじゃないのと。Twitterをステートレスにすれば「簡単に分散させることができる」のかと。逆にいえば、量や参照・更新頻度の多いリソース状態データを持ちながら負荷分散できるノウハウがあるなら、アプリケーション状態データにだってそのノウハウを適用すればいいんじゃねと。
そんなわけで、ステートレス性にこだわる必要はないと思い始めました。スケーラビリティ以外に挙げられているステートレス性の利点、すなわち可視性や信頼性は、素直にありがたいとは思うけれど。
ところで「アプリケーション状態って何? リソース状態って何?」という方には、書籍『RESTful Webサービス』、書籍『RESTful Webサービス』の一読をお勧めします。
- 作者: Leonard Richardson,Sam Ruby,山本陽平,株式会社クイープ
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/12/21
- メディア: 単行本
- 購入: 25人 クリック: 842回
- この商品を含むブログ (168件) を見る