Herokuがレイテンシ問題について詳細説明「顧客との約束果たせなかった」と改善措置

顧客の新興企業からリクエスト処理と課金の仕組みをめぐって問題を指摘されたことを受け、Herokuは2月16日のブログで、問題が生じた経緯や対応について説明した。

» 2013年02月19日 18時05分 公開
[鈴木聖子,@IT]

 Herokuが顧客の新興企業からリクエスト処理と課金の仕組みをめぐって問題を指摘されたことを受け、2月16日のブログで問題が生じた経緯や対応について説明した。

 ブログの中でHerokuは、「過去数年にわたり、予期しないレイテンシについて顧客から報告を受けることはあったが、これまでそうした報告に共通点を見出すことができなかった」と説明。しかし今になって、BambooおよびCedarスタック上のルーティングと負荷分散の仕組みが、Rails顧客のレイテンシ問題を発生させていることが分かったとした。

 具体的には、Bambooスタックではルーティングの性質と、ルーティングクラスタの段階的、水平的拡張との組み合わせに根本原因があったと説明。Cedarについては、Cedarが並列リクエストルーティング用に最適化されているのに対し、Railsのようなフレームワークはデフォルトの設定が並列になっていないことに原因があるとした。

 2009年に導入したBambooスタックは、単一のプロセスで1度に1つのリクエストしか処理できない仕組みになっており、同社はこのアーキテクチャを補うために、HTTPルータでリクエストを待機させる設計を採用し、dynoへの効率的なリクエスト割り当てを行っていた。しかしプラットフォームの拡大に伴って効率性が悪化し、対応を迫られるのは時間の問題になっていたという。

 一方、新しいCedarスタックについては、スケーラビリティを実現する目的で、待ち行列ロジックを排してランダムな割り当て方式に切り替えた。この設計はCedar専用で、Cedarにアプリケーションをデプロイした顧客のみに適用されることを想定。Bambooルーティングを使っていた顧客は理論上、Cedarへの移行準備が整うまでBambooを使い続けられるはずだった。

 ところが実際には、Herokuへのトラフィック増大に伴って新しいノードを追加するうちに、ノード当たりのリクエスト処理の効率性が急激に悪化。ルーティングクラスタ拡張の「副作用」として、Bambooで実質的にランダム負荷分散が行われるに至ったという。

 Herokuはこの成り行きについて顧客向けの文書には記載せず、リポートにも変更を反映させていなかったと説明。結果的に、「デベロッパにはアプリ開発に専念してもらい、インフラはHerokuが面倒を見る」という約束が果たせなかったと認めている。

 問題の発覚を踏まえて同社は、BambooおよびCedarスタック上のサービスの仕組みを正確に反映させるよう、説明文を改善し、HerokuおよびパートナーサービスのNew Relicが報告する数値からは不正確な部分を取り除くなどの措置を講じたという。さらに、レイテンシと待ち時間を顧客に把握してもらうためのツールを追加し、Cedar上の並列リクエストRailsアプリについてはサポート強化に努めると表明した。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。