Tokyo tyrant

3,144 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,144
On SlideShare
0
From Embeds
0
Number of Embeds
72
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Tokyo tyrant

  1. 1. Tokyo Tyrant<br />1<br />
  2. 2. Tokyo Tyrantとは<br />mixi平林氏が作成したTokyo Cabinet DBMのネットワークインターフェイス<br />DBM≒KVS<br />プロトコル<br />独自のプロトコル<br />memcachedとの互換プロトコル<br />HTTP<br />Tokyo Cabinetは非常に高速に動作<br />データをディスクに書き出すことができる実装ですが,非常に高速<br />Pythonのmemcachedクライ<br />アントを使って、1万回set<br />http://gihyo.jp/dev/feature/01/memcached/0005?page=3<br />http://d.hatena.ne.jp/tohae/20100626/1277538040<br />2<br />
  3. 3. 開発元、対応言語、ライセンス<br />FAL Labs<br />FAL Labsは平林初生と平林幹雄による個人事業です。私達はオープンソースソフトウェア製品群の開発とライセンシングを行っています。<br />http://fallabs.com/<br />Tokyo Tyrant is written in the C language, and provided as API of C, Perl, and Ruby.<br />Tokyo Tyrant is a free software licensed under the GNU Lesser General Public License.<br />3<br />
  4. 4. ちなみにDBMって?<br />データベースの一種。Berkeley DBも参照。<br />dbm (Database Manager)はデータベースの分類の一つであり、データベース管理システム(リレーショナルデータベースなど)よりはるかに単純な構造をしている。<br />ファイル上にキーと値のペアをハッシュを使って高速にアクセスできるように配置したもの、またはそれを管理するシステムである。ほとんどのものはトランザクション機能がない。<br />http://ja.wikipedia.org/wiki/DBM<br />4<br />
  5. 5. memcachedって?<br />高性能な分散メモリキャッシュサーバ<br />LRU<br />シンプルなプロトコル<br />memcached同士での通信は行わない分散方式<br />クライアントの実装に依存<br />$ telnet localhost 11211<br />Trying 127.0.0.1...<br />Connected to localhost.localdomain (127.0.0.1).<br />Escape character is '^]'.<br />set foo 0 0 3  (保存コマンド)<br />bar    (データ)<br />STORED  (結果)<br />get foo   (取得コマンド)<br />VALUE foo 0 3 (データ)<br />bar    (データ)<br />http://gihyo.jp/dev/feature/01/memcached/0001<br />5<br />
  6. 6. memcachedのクライアント<br />memcachedに接続をするクライアントラブイラリには,PerlやPHPをはじめ,さまざまな言語の実装があります。memcachedのサイトに載っている言語だけでも,<br />Perl<br />PHP<br />Python<br />Ruby<br />C#<br />C/C++<br />Lua<br />http://gihyo.jp/dev/feature/01/memcached/0001?page=2<br />6<br />
  7. 7. memcached互換<br />repcached<br />http://repcached.lab.klab.org<br />memcachedにレプリケーションの機能をつけるパッチとして提供<br />Flared<br />http://labs.gree.jp/Top/OpenSource/Flared.html<br />QDBMに保存する実装。非同期レプリケーションやフェイルオーバーなども実装されている<br />memcachedb<br />http://memcachedb.org<br />BerkeleyDBにデータを保存する実装。メッセージキューの実装プロジェクトも進められている<br />7<br />※WEB+DB PRESS Vol.47mixi,ニコニコ動画,livedoor[実例から学ぶ]memcachedベストプラクティス<br />
  8. 8. javaの例<br />8<br />
  9. 9. perlの例<br />#!/usr/bin/perl<br />use strict;<br />use warnings;<br />use Cache::Memcached;<br />my $key = "foo";<br />my $value = "bar";<br />my $expires = 3600; # 1 hourmy $memcached = Cache::Memcached->new({<br /> servers => ["127.0.0.1:11211"],<br />compress_threshold => 10_000<br />});$memcached->add($key, $value, $expires);<br />my $ret =$memcached->get($key);<br />print "$retn";<br />9<br />http://gihyo.jp/dev/feature/01/memcached/0001?page=3<br />
  10. 10. mixiの事例(つかいどころ)<br />mixiではTokyo Tyrantをキャッシュサーバとしてではなく,key-valueの組み合わせを保存するDBMSとして利用しています。<br />導入した箇所はユーザの最終アクセス時間を保存するDBで,mixiのサービスのほぼすべてに関連し,ユーザがページにアクセスするたびにデータをアップデートするので負荷も非常に高くなります。<br />MySQLには非常に重たい処理になり,memcachedのみにデータを保存する形ではデータが失われる可能性があるためTokyo Tyrantが導入されています。<br />クライアントとして新規に開発を行わずに,Cache::Memcached::Fast(Perl)がそのまま利用できるのも大きな利点です。<br />10<br />
  11. 11. 平林幹雄氏によると<br />http://fallabs.com/mikio/mydata/tech-upload/1259647541-tokyofaq.pdf<br />11<br />
  12. 12. mixiで起きた障害について<br />『mixi』のデータベースへの負荷軽減のために導入しているデータキャッシュシステムが複数同時に異常終了したことに伴い、データベースへの負荷が急増したため『mixi』を閲覧しづらい状態となりました。<br />高負荷かつ特殊な状態でのみデータキャッシュシステムの異常終了が発生していたため、根本的な原因の究明に時間がかかることとなりました。<br />http://news.livedoor.com/article/detail/4941874/<br />12<br />
  13. 13. Tokyo Tyrantがどういう仕組みで動いているのか<br />ハッシュデータベース<br />B+木データベース<br />テーブルデータベース<br />13<br />http://alpha.mixi.co.jp/blog/?p=290<br />
  14. 14. テーブルデータベースへのアクセス<br />14<br />http://alpha.mixi.co.jp/blog/?p=318<br />
  15. 15. 参考文献<br />TokyoシリーズのFAQ<br />http://fallabs.com/mikio/mydata/tech-upload/1259647541-tokyofaq.pdf<br />memcached互換のNoSQLデータベース「Membase」がオープンソースで登場<br />http://www.publickey1.jp/blog/10/memcashednosqlmembase.html<br />15<br />

×