読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

ロングテールな画像配信 その1

mixi operation

開発部・システム運用グループの長野です。最近は「サーバ/インフラを支える技術」を読みながら通勤しています。今回はmixiの画像配信について書かせて頂きたいと思います。1回目は画像配信の課題について説明させて頂きます。

■画像配信の種類

これまで画像の配信は大きく分けて2種類あると考え、システムを構築してきました。1つは1ファイルあたりへのアクセスが非常に多くなりますが、ファイル数が少ないもの。もう一つはファイル数が膨大になる代わりに、1つのファイルへのアクセスは少ないものになります。

profile_image1.png

前者はmixiの中で使われるロゴ画像やメニューの画像等のページ部品、また広告画像や絵文字画像になり、後者はユーザがアップロードする日記やアルバムの画像にあたります。ページの部品の画像はファイル数はそれほど多くないものの、サーバへのアクセス数が最大で秒間に数万リクエストにもなります。逆にアルバムや日記の画像は全体で数億以上のファイルがありますが、画像へのアクセスは該当する日記やアルバムを閲覧したユーザからのみになり、1つのファイルへのアクセスは少なくなります。

従来はこの2つの考え方で配信サーバを用意してきましたが、mixiへのアクセスが多くなるとこれらの配信方法だけでは対応ができない種類の画像がでてきました。それはユーザがアップロードをし、アクセスが多く、ファイル数も多いプロフィール画像やコミュニティのロゴ画像になります。

profile_image2.png

ここでは数が多くアクセスも多いプロフィール画像の配信について紹介します。

■プロフィール画像の配信

mixiのプロフィール画像は、プロフィールページで表示される180px x 180px、マイミク一覧やコミュニティのメンバー一覧で利用される76px x 76pxのサイズが従来から使われてきましたが、現在、エコーのリリースに合わせて新しく用意された40px x 40pxを加えて3種類の画像があります。このプロフィール画像を設定しているユーザ数は1,500万ユーザの約70%になり、約1,000万ユーザの方が設定されています。ここで単純にファイル数だけを計算すると1,000万人のユーザが大中小3つの画像を持つ事になるので、延べファイル数は3,000万にもなります。

profile_image3.png

このプロフィール画像へのうち76x76のサイズ(1000万ファイル)へのリクエストについて調査したところ、次回に紹介する配信システムのproxyサーバ4台のうち1台へのアクセスは1日で5,000万回以上記録されていました。この5,000万回のリクエストの中でアクセスされるユニークな画像は、800万ファイルあり、全体の70%以上のファイルへ1日でアクセスされていることが分かりました。 さらに詳しく画像毎のアクセス数を調査した結果が以下になります
リクエスト回数 画像数 画像数×リクエスト数 割合
1 2,020,000 2,020,000 4%
2〜10 5,242,000 23,930,000 43%
11〜30 1,130,000 18,300,000 33%
31〜100 157,000 7,320,000 13%
100〜 18,000 3,830,000 7%
このproxyサーバに対して、1日を通して1回のみアクセスされた画像は200万件になり、全体のリクエストに占める割合は4%、2回から10回アクセスされる画像は500万件でリクエスト数では2,000万以上になります。 合計のリクエスト数では、1件あたりのリクエスト回数が30回以下の画像でアクセス数の8割を占め、ファイル数の割合では97%にもなります。所謂、2割のオブジェクトの通信が8割を占めるというような、2:8の法則には全くなっておらず、偏りが少なく多くのファイルにリクエストが分散されることが分かります。縦軸にリクエスト数をとり、リクエスト数を多い順に画像をグラフ上においていくと以下の様になります。

profile_image4.png

非常に尾の長いロングテールなグラフになります。リクエストが30回以下、97%の画像が尾の部分になり、全体の80%以上のアクセスを占めています。

■まとめ

プロフィール画像の配信では非常に長いロングテールの尾の部分である、大量の画像を配信できるシステムが必要になります。実際のシステムについての解説は次回にさせていただきたいと思います。