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