pixiv insideは移転しました! ≫ https://inside.pixiv.blog/

pixivのデータストア/キャッシュ戦略 その1

Zoff PCのカラータイプ眼鏡を愛用しているインフラ兼ソフトウェアエンジニアのbokkoです。

夏休みは山登り -> 温泉で悠々自適に過ごしてましたが、休み明けから筋肉痛で体のあちこちが痛いです(><)。

今回はpixivで活用しているデータストアやその周辺ミドルウェアの話を3回くらいに分けてしようと思います。

pixivを支えるデータストア

pixivでは主に以下の2つをデータストアとして活用しています。

MySQL

pixivではユーザやイラスト、ブックマーク、あるいはそれらに関連した情報といったサービスの根幹に関わるデータはMySQLに保存しています。 これはMySQLの高い信頼性のほかに、ピクシブ社内でMySQLの運用に関するノウハウが蓄積されていたり、自作の運用ツール群が充実しているというのが大きな理由です。

KyotoTycoon

KyotoTycoonはmemcachedのようなキャッシュストアとしても活用している側面もあるので、 あまり重要度(壊れるとサービスが継続できなくなるという意味で)の高いデータは格納していません。 ただ、セッション処理やポップボード(サイト内通知/notification)、ランキングのように負荷が大きい箇所や ユーザからのリクエストに対して素早く応答しなければいけない場面では積極的に活用しています。

以前のpixivでは全アプリケーションサーバ(以下AP)上でmemcachedを稼働させるという方式を取っていたのですが、 この方式には様々な問題があったため、昨年の春にほぼすべてのmemcachedをKyotoTycoonに置き換えました。

KyotoTycoonを選択した理由

KyotoTycoonはそのバックエンドであるKyotoCabinetによるデータの永続化はもちろんのこと、 memcachedのテキストプロトコルプラグインや先代のTokyoTyrantがサポートしていなかったexpireを備えています。 このおかげでアプリケーション側の設定ファイルに記述されているmemcachedのホスト名(1行)を書き換えるだけでmemcachedから移行することができました。 まず、この移行の容易さが理由の一つとして挙げられます。

運用面でも全APのmemcached間で同期を取ろうとしてトラフィックが大幅に増大したり、 どれか一つでもmemcachedあるいはAP自体がダウンした際に発生するリカバリ作業が超大変だったりといった問題がありました。 また、当時セッションデータもAP上のmemcachedとは別のmemcachedサーバに格納されていたので セッションデータを永続化することは急務でした。

まとめるとKyotoTycoonを選択したのは、

ということになります。このあたりの移行の詳細については去年弊社で開催されたサイバーエージェントさんとの合同勉強会で 発表した際に使用した資料がこちらにありますので興味がある方はご覧ください。

次回はpixivにおける実際のデータストアの運用やキャッシングの方式について解説していきます。乞うご期待。