2012オモロキで鎌団子さんと二人で開発している写真で一言ボケるWebサービス「ボケて」。そのことについて書いておこうと思います。ボケてとは?改修作業の詳細に入る前に「ボケて」とは、を紹介します。ボケては「お題」と呼ばれる「写真」に一言「ボケ」を加えて笑いをつくりだせるWebサービスです。最新のものや評価されたお題とボケを見ていくことができます。評価の高いものはやっぱり面白くて見てると吹き出しちゃうものもたくさんあります(当社比)。僕がバックエンドやシステム周りを行っています。5月13日、爆発さて、そのボケてですが、今年の「5月13日」にアクセスが急増します。2chまとめサイトもしくはNAVERまとめに掲載されたのが主な原因だと思われます。そのPVは今までと比べておよそ10倍弱。その時点でのスペックのサーバでは捌ききれなくなってしまいます。それがPerlのフレームワークCatalystでつくられてたんですよね。「動かない」んですよ、これがまた。その量が大きくなってしまいそうな予感。Mojoliciousばかり。WAFにCatalystほど重厚なものはいらないと思いだしていました。ことで「いっちょ頑張るか」という具合でフレームワークをCatalystからMojoliciousへと変更させたボケてのアプリをつくることにしました。コーディングすること1ヶ月ほどでした。スケールアウトしやすい構成と実装その際、アクセスが増加している状態に耐えうるような設計にしました。後述するキャッシュの利用ももちろんですが、以下のような項目です。$self->model('Boke')->get_recent_entries();と直感的な記述で行えるようにしました。Validationの処理もFormの定義をしておけば、こんな感じでできます。参照されるものを種類に分けてmemcachedで一定時間キャッシュさせています。ありきたりなことですが、これによりDBサーバへの負荷を低減できます。参照系は生のDBIを使って参照させてるのですが、簡単なラッパーをつくってその生DBIを使いやすくしてます。Mapperは結果をオブジェクトを返しますが、そのラッパーはハッシュレフで返してくれます。以下の例だと「$self->dbx」がそれなんですが、「search」メソッドはこのように使います。});条件にあう、最新のボケ一覧を取得していますが、「expire」という引数を与えると自動的にクエリーからキーを生成してそのキーに結果をキャッシュするという仕組みになっています。強制的にキーを組み立てて、そのキーに当てはまるキャッシュを強制的に削除するメソッドも用意しているので、場合によってキャッシュのコントロールができるわけです。オブジェクトやオブジェクト全体のキャッシュだけではなく、右側のサイドバーのHTMLをキャッシュさせるなどの工夫もしております。デルタ版リリースってことでスケールアップしたサーバを用意してそこへデプロイ。「ボケてデルタ版」を7月19日にリリースしました。うまいこと割とサクサクに動くようになりました。漏れていたバグが多数あり、都度都度対応しました。テストが少ないのも原因なのでこの辺はしっかりさせたいところです。まとめ以上、ボケての改修作業について紹介しました。細かい解説はYAPC::Asiaというカンファレンスで紹介したいと思いますので是非お越しください。