15
Tokyo Tyrant 1

Tokyo tyrant

Embed Size (px)

Citation preview

Page 1: Tokyo tyrant

1

Tokyo Tyrant

Page 2: 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

Page 3: Tokyo tyrant

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.

Page 4: Tokyo tyrant

4

ちなみに DBM って?

データベースの一種。 Berkeley DBも参照。 dbm (Database Manager) はデータベースの分類の一つであり、データベース管理システム(リレーショナルデータベースなど)よりはるかに単純な構造をしている。ファイル上にキーと値のペアをハッシュを使って高速にアクセスできるように配置したもの、またはそれを管理するシステムである。ほとんどのものはトランザクション機能がない。

http://ja.wikipedia.org/wiki/DBM

Page 5: Tokyo tyrant

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

Page 6: Tokyo tyrant

6

memcached のクライアント

memcached に接続をするクライアントラブイラリには, Perl やPHP をはじめ,さまざまな言語の実装があります。 memcached のサイトに載っている言語だけでも,PerlPHPPythonRubyC#C/C++Lua

http://gihyo.jp/dev/feature/01/memcached/0001?page=2

Page 7: Tokyo tyrant

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 ベストプラクティス

Page 8: Tokyo tyrant

8

java の例

Page 9: Tokyo tyrant

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

Page 10: Tokyo tyrant

10

mixi の事例 ( つかいどころ )mixi では Tokyo Tyrant をキャッシュサーバとしてではなく, key-value の組み合わせを保存するDBMS として利用しています。導入した箇所はユーザの最終アクセス時間を保存する DB で, mixi のサービスのほぼすべてに関連し,ユーザがページにアクセスするたびにデータをアップデートするので負荷も非常に高くなります。MySQL には非常に重たい処理になり, memcached のみにデータを保存する形ではデータが失われる可能性があるため Tokyo Tyrantが導入されています。クライアントとして新規に開発を行わずに, Cache::Memcached::Fast(Perl) がそのまま利用できるのも大きな利点です。

Page 11: Tokyo tyrant

11

平林幹雄氏によると

http://fallabs.com/mikio/mydata/tech-upload/1259647541-tokyofaq.pdf

Page 12: Tokyo tyrant

12

mixi で起きた障害について

『 mixi 』のデータベースへの負荷軽減のために導入しているデータキャッシュシステムが複数同時に異常終了したことに伴い、データベースへの負荷が急増したため『 mixi 』を閲覧しづらい状態となりました。高負荷かつ特殊な状態でのみデータキャッシュシステムの異常終了が発生していたため、根本的な原因の究明に時間がかかることとなりました。

http://news.livedoor.com/article/detail/4941874/

Page 13: Tokyo tyrant

13

Tokyo Tyrant がどういう仕組みで動いているのか

ハッシュデータベースB+ 木データベーステーブルデータベース

http://alpha.mixi.co.jp/blog/?p=290

Page 14: Tokyo tyrant

14

テーブルデータベースへのアクセス

http://alpha.mixi.co.jp/blog/?p=318

Page 15: Tokyo tyrant

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