人気の高いクラウドアプリケーションプラットホームHerokuのパフォーマンスが、実は3年前に比べて遅くなってるかもしれない。昨日(米国時間2/13)Rap GeniusのJames Somersがポストして多くの人に読まれたブログ記事が、Herokuは、Ruby on RailsのアプリケーションをAmazon EC2のマシンに載せてユーザに提供するときのやり方を、数年前にデベロッパに何も告げず黙って変えた、と主張している。Herokuは初期には、可利用なサーバを見つけてそこへリクエストをルーティングする、というインテリジェントな方法をとっていたが、Somers曰く、今ではリクエストをランダムに分散化しており、そのためにキューイングの時間(リクエストがキューに入れられて待たされる時間)が増えている。そして今日はHerokuのゼネラルマネージャOren Teichが、そのとおりでございます、と認めた。
“弊社のプロダクトの動作に関する説明が、不十分でした”、と今夜Teichは書いている。“弊社は、顧客のアプリケーションのスケーラビリティを阻害しました。また全体的にも、コミュニティを裏切りました。ここに、個人的にお詫びするとともに、問題の解決に邁進したいと存じます”。彼によると、Herokuのユーザは実際本当に、“弊社がサービスの規模を拡大した3年前から以降、パフォーマンスの低下を経験していた”。しかし、Herokuの目標は、すべてのデベロッパにとって最良のプラットホームであることである。“今回は、その目標の達成に失敗しました。でも、必ず修正いたします”。
[Herokuのインテリジェントルーティング]
明日同社は詳細な技術的リビューをポストするとともに、デベロッパに対して、彼らのアプリケーションからのWebリクエストがHeroku上でどう扱われているかを、明快に説明する、とTeichは約束している。またドキュメンテーションも一新し、デベロッパが、自分のアプリケーションのパフォーマンスを向上させるやり方を理解するためのツールを、提供するそうだ。
Rap GeniusはHerokuのいわゆる”dyno”(タスクコンテナ)を常時大量に使用するので、パフォーマンスの低下がとくに顕著に現れた。dynoの物理的な実体は、オンデマンドで作られるAmazon EC2のインスタンスで、Herokuがそれを独自にカスタマイズしている。さらに詳しく言うと、dynoにはWeb型とワーカー型があり、今回被害が及んだのはWeb型だけだった。Herokuの今の(==旧来の)ドキュメンテーションには、Webのリクエストを次の可利用なマシンへとルーティングして”インテリジェントなスケーリング“を実現している、と書かれている。しかしSomersは、リクエストの分散がインテリジェントではなくランダムであることを発見した。だから、今現在アイドルなdynoがあっても、それが使われずに、ほかのインスタンスのキューが無意味に混み合うことがありえる。
Herokuにおけるインスタンス(==’dyno’)の利用料金単価は月額35ドルだが、Rap Geniusは現在、同社の重要なインフラのために月額2万ドルを払っている。Rap GeniusがHerokuをどのように利用しているか、そしてどうやってSomersはHerokuの問題点を見つけたのか。この際真剣に勉強したい方は、ぜひこの記事を読むべし。