Hachioji.pm #9 エアLT #hachiojipm

新潟から参加してます

新潟市民がHachioji.pmに(しかもエアLTで)参加するってどういうこと?という声が聴こえてきそうですが、そんなの知ったこっちゃない。Hachioji.pmとはゼーガペインでつながっているのだ(お彼岸セール許せないですね)。

今回のテーマ

今回のLTのテーマは「フリー」だとおききしております。というわけで、ふたつほどネタを投下します。

1)来週、プレNiigata.pmやります

以前このblogにも書きましたが、プレNiigata.pmを来週やります。 http://atnd.org/events/19693

新潟生活を始めて2週間。まだどこにどんな店があるのかわかってないのですが、とにかくごはんがおいしいです。タレかつ最高。Hachioji.pmのみなさんも、機会があれば是非Niigata.pmに遊びにきてください。素敵なごはんが待ってますよ!同居人にも訊かないとですが、多分、2人くらいならうちに泊まっていただいてもOKです。

2)分散ストレージの話

今仕事で関わっているサービスが、ストレージにAmazon S3を使おうとしているのですが、Amazon S3って転送量で従量課金されてしまうんですね。で、これがバカにできないレベルのお金になってくるので、以下のような工夫を考えました。

前提となっている状況として、

  • ユーザにアップロードされたばかりの新しいファイルへのアクセスは多い
  • 一方、古いファイルへのアクセスは急激に減る
  • ただし、ほとんどアクセスのないようなファイルも全て保存しておく必要がある。

という状況です。

というわけで、ユーザがファイルをアップロードしてきた段階で、S3へ保存するのと同時に、自社で持つキャッシュサーバ的なものにキャッシュします。キャッシュが存在する間はキャッシュからコンテンツを返し、キャッシュが存在しなくなったらS3に取りにいく、というような運用を考えました。

on readでキャッシュしてしまうと、新しいファイル1つにつき最低でも一回はS3から転送しないといけない(キャッシュする為にS3に読みにいく必要がある)のに対し、on writeでキャッシュすればキャッシュが存在する間はS3からの転送をしなくて済みます。S3からの転送が必要になるのは、キャッシュに存在しないような古いデータをリクエストされた時だけ(そしてそのようなリクエストは非常に少ない)で済むので、非常にお得です、というわけですね。

で、このような処理を毎回書くのはだるいので、store()やget()を呼ぶとキャッシュとか保存とかいろいろ透過的にやってくれる以下のような構造を持つライブラリを作りました。

こうすることで、ストレージをAmazonS3じゃなくて自社で持つ分散オブジェクトストレージに変えたい!とかキャッシュサーバを変えたい!とか言うときにCacheEngineやSotreEngineをぽこぽこと入れ替えるだけで対応できて便利ですね!

ところで、バイナリデータのキャッシュにMemcachedがあまりよろしくなくて、現在むりやりDiskにキャッシュしてるのですが、なんかいいキャッシュサーバ知りませんか?

私のエアLTは以上です。それではみなさん、YAPCでお会いしましょう!!!!!!!!!1111111111