クラウドのコスト削減!RedisをMemcachedに乗り換えたら、月50万円以上の節約に!?
こんにちは、ジョンです!今回は、ちょっと面白い記事を見つけたので、皆さんにもシェアしたいと思います。クラウドの世界って、性能とかセキュリティとか、色々考えることが多くて大変ですよね。でも、それだけじゃなくて、コストもちゃんと見ないと、思わぬ出費に繋がることがあるんです。
あるチームが、Azure(Microsoftが提供するクラウドサービス)でシステムを構築していたときのこと。すごくシンプルな「キーと値」を保存するだけのキャッシュ(一時的にデータを保存する場所)に、なんと月50万円以上も払っていたらしいんです!一体何が起きたんでしょうか?
Redis Premiumって何?なんでそんなに高いの?
原因は、「Azure Cache for Redis(Premium)」というサービスを使ってたこと。Redis(レディスと読みます)っていうのは、データベースの一種で、データを高速に読み書きできるのが特徴です。特にPremiumプランは、セキュリティ機能が充実していて、VNet(Virtual Network:仮想的なネットワーク)という仕組みを使って、他のシステムから隔離することができるんです。今回のケースでは、セキュリティの都合上、このVNetを使う必要があったんですね。
でも、問題はここから。彼らのシステムでは、キャッシュに保存するデータはほんのわずか(200MB以下)で、しかも1時間に1回しか更新しないんです。つまり、Redis Premiumの高機能な部分をほとんど使ってなかったんですね。まるで、軽自動車しか乗らないのに、F1カーを買っちゃったようなものです。
Redis Standardじゃダメだったの?
実は、最初はもっと安いRedis Standardを使ってたんです。でも、VNetで隔離する必要が出てきて、泣く泣くPremiumに乗り換えたんだとか。料金が大幅に上がってしまったのは言うまでもありません。
さらに、システムを複数の地域や環境(開発環境、テスト環境、本番環境など)に分けていたため、Redisをそれぞれの場所に用意する必要がありました。これもコストを押し上げる要因になりました。
Memcachedって何?
そこで、彼らは別の方法を検討しました。それが「Memcached(メンキャッシュド)」です。Memcachedは、Redisと同じようにデータを一時的に保存するキャッシュサーバーの一種ですが、もっとシンプルで軽量なんです。例えるなら、Redisが多機能なスイスアーミーナイフだとすると、Memcachedはシンプルで使いやすいカッターナイフのようなもの。
ただ、Memcachedには弱点があります。それは、データがメモリにしか保存されないこと。つまり、サーバーが再起動したり、スケール(規模を拡大すること)したりすると、データが消えてしまうんです。
Azure App Serviceの壁
さらに、彼らが使っていたAzure App Service(Webアプリケーションを動かすためのサービス)の仕組みも問題でした。Azure App Serviceは、複数のサーバー(インスタンス)を使ってWebアプリケーションを動かしているんですが、それぞれのインスタンスが独立していて、外部から個別にアクセスできないんです。そのため、Memcachedにデータを再読み込みするタイミングをコントロールするのが難しいという問題がありました。
もしMemcachedに乗り換えて、データの再読み込みがうまくいかなければ、Webサイトの表示が遅くなったり、データが古くなったりする可能性があります。
解決策:タイマーを使った自己修復機能!
そこで、彼らは独自の解決策を考え出しました。それは、アプリケーションの中に、タイマーを使った自己修復機能を組み込むという方法です。
- まず、Webアプリケーションが起動するときに、タイマーをセットします。
- タイマーは、60分ごとにキャッシュが空っぽかどうか、または古いかどうかをチェックします。
- もしキャッシュが空っぽだったり、古かったりしたら、Webアプリケーション自身がデータを再読み込みします。
この仕組みによって、Webアプリケーションは、自分自身でキャッシュの状態をチェックし、必要に応じてデータを再読み込みすることができるようになりました。まるで、自分でご飯を炊いてくれる炊飯器みたいですね。
さらに、データの二重読み込みを防ぐためのロック機能や、キャッシュの状態を監視するためのNew Relic(アプリケーションのパフォーマンスを監視するツール)との連携機能も追加しました。
驚きの結果!コストを95%削減!
この方法でMemcachedに乗り換えた結果、なんと月50万円以上かかっていたRedis Premiumの費用が、ほぼゼロになったんです!これはすごいですよね。しかも、Webサイトの性能も維持できたそうです。
どんな時にこの方法が使えるの?
この方法は、以下のような場合に有効です。
- キャッシュに保存するデータがシンプルで、一時的なものである場合。
- Azure App Serviceを使っていて、Redisのコストを削減したい場合。
- VNetによる隔離が必要だけど、Redis Premiumまでは必要ない場合。
逆に、以下のような場合には向いていません。
- 複数のインスタンスでキャッシュを共有する必要がある場合。
- データの永続化やクラスタリング(複数のサーバーで処理を分担すること)、高度なデータ型が必要な場合。
- キャッシュがシステムの重要な役割を担っている場合。
まとめ:本当に必要なものを見極めよう!
今回の事例から学べるのは、高機能なツールが必ずしも最適とは限らないということです。特にクラウドの世界では、使わない機能にお金を払っていることも少なくありません。本当に必要なものを見極めて、賢くコストを削減することが大切ですね。
私も、ついつい高機能なツールに飛びつきがちですが、今回の記事を読んで、もう一度自分の使い方を見直してみようと思いました。
この記事は、以下の元記事をもとに筆者の視点でまとめたものです:
How we replaced Azure Redis with Memcached