スポンサーリンク

日本を代表するSNSサイトミクシィ(Mixi)のアーキテクチャについて。

mixi.jpArchitecture

Mixiは、日本で成長の早いソーシャルネットワーキングサイトです。
Mixiは、次のようなサービスを提供します:
日記、コミュニティ、メッセージ、レビュー、フォトアルバム。LiveJournalと同じアプローチの多くを開発しました。彼らが簡単に彼らのシステムをどのようにスケールさせていったかについて書きます。

サイト: http://mixi.jp

情報源

オープンソースとスケール
http://mysqluc.com/presentations/mysql06/mixi_update.pdf

プラットフォーム
どうなっているか?
  • 2年で約400万ユーザに成長し、1日15000人の新規ユーザが参加しました。
  • Alexaで35位、日本で3位です。
  • 100台以上のMySQLサーバがあります。
  • 月に10台以上追加しています。
  • 非永続的なコネクションを使っています。
  • 日記のトラフィックは、リード(読み込み)が85%、ライト(書き込み)が15%です。
  • メッセージのトラフィックは、リード(読み込み)が75%、ライト(書き込み)が25%です。
  • レプリケーションのパフォーマンスの問題に直面したとき、彼らはデータベースを分割しました。
  • 彼らがデータベースを分割しなければならなかったように、レプリケーションのパフォーマンスの問題にぶつかりました。
  • ユーザにより垂直に割るか、テーブルタイプによって水平に割ることを考えました。
  • 結局、テーブルタイプとユーザによってパーティショニングしました。
  • ユーザグループのメッセージのすべては、特別のデータベースに割り当てられます。
  • パーティションキーは、データが格納されるべきデータベースを決定するのに使われます。
  • キャッシュのために、30台 x 2GBメモリをmemcachedに使います。
  • 8TB以上の画像を保存し、1日に23GBぐらい追加されます。
  • MySQLはイメージのメタデータを保存するためにだけに使われます、画像自体のためではありません。
  • たびたび、アクセスされる画像は、複数のマシンのSquidを使用してキャッシュされます。
  • めったにアクセスされない画像は、ファイルシステムから配信されます。
  • それらをキャッシュするメリットがありません。
学んだこと
  • 動的パーティショニングを使うとき、データを格納するためのキーとアルゴリズムを選ぶことは難しいです。
  • 一度データを分割すると、もはや、joinすることができません。そして、データをマージするために異なったデータベースへのたくさんのコネクションをオープンしなければなりません。
  • データベースを分割しているとき、新しいホストを加え、データを再配置することが難しいです。
  • たとえば、 パーティショニングアルゴリズムは、ユーザ 1-Nをホスト1にすべてのメッセージを格納するとしましょう。
  • すぐに、ホスト1がデータを抱えすぎるようになり、そして、あなたがは多くのホストに渡ってユーザを再配置したいと言います。
  • これをするのは、とても難しいです。
  • 分散メモリキャッシュにより、DBへのアクセスはほとんどありません。平均的なページロードの時間は、0.02秒です。
  • あなたは、たびたびコンテンツのタイプによる戦略を開発しなければなりません。例えば、画像は、短いテキストの配信とは異なって扱われるでしょう。
  • ソーシャルネットワーキングサイトは、とても時間が重視されるため、ユーザタイプと同様に時間による分割が役に立つかもしれません。

元ネタ
http://highscalability.com/mixi-jp-architecture
参照しているページ (サイト内): [2008-08-21-2]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー