1 / 18

Tokyo Tyrant の設計と実装

Tokyo Tyrant の設計と実装. 平林 幹雄 <mikio@users.sourceforge.net >. 何が嬉しいの?. memcached の置き換え memcached 互換プロトコル データが永続化される ファイル( DBM )にデータを保存 レプリケーション機能 高パフォーマンス、高スループット 秒間 60000 クエリ以上 同時接続 10000 クライアント以上. コンポーネント構成. applications. memcached client library. Tokyo Tyrant. Tokyo Cabinet.

love
Download Presentation

Tokyo Tyrant の設計と実装

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tokyo Tyrantの設計と実装 平林 幹雄 <mikio@users.sourceforge.net>

  2. 何が嬉しいの? • memcachedの置き換え • memcached互換プロトコル • データが永続化される • ファイル(DBM)にデータを保存 • レプリケーション機能 • 高パフォーマンス、高スループット • 秒間60000クエリ以上 • 同時接続10000クライアント以上

  3. コンポーネント構成 applications memcached client library Tokyo Tyrant Tokyo Cabinet file system

  4. Tokyo Cabinet • DBMのモダンな実装 • key/value型データベース • Win32を捨ててPOSIX系に特化 • QDBMの後継 • C99、Pthread、mmap、pread/pwrite、etc... • 高パフォーマンス、高スループット • 100万レコードのinsertが0.4秒 (2,500,000 qps) • searchは0.33秒 (3,000,000 qps) • レコード単位でリードライトロック • バインディング各種 • Perl、Ruby、Java、Lua、Python、PHP、Scheme、etc...

  5. 他のDBMとの性能比較

  6. 6種類のデータベース型 • TCHDB: ファイル上のハッシュデータベース • TCBDB: ファイル上のB+木データベース • TCFDB: ファイル上の配列データベース • TCMDB: メモリ上のハッシュデータベース • TCNDB: メモリ上のツリーデータベース • TCADB: 上記5種の抽象インターフェイス

  7. TCHDB: ファイル上のハッシュデータベース • ハッシュ表と二分探索木 • 完全一致検索のみ • 高速 • O(1) • ランダムアクセスに強い • 省メモリ • バケットのみオンメモリ • mmapとpread/pwriteの併用

  8. TCBDB: ファイル上のB+木データベース • B+木(B木とページング) • 比較関数による範囲検索 • そこそこ高速 • O(log N) • シーケンシャルアクセスに強い • メモリ食い • LRU消去のページキャッシュ • TCHDB上でページ管理

  9. 圧縮B+木 On Memory (B+ tree) On File (hash table) key value key value key value page ID data key value page ID data key value page ID data key value Compression data key value page ID data key value page ID data key value key value page ID data key value page ID data key value page ID data key value page ID data key value page ID data key value key value page ID data

  10. その他 • TCMDB: メモリ上のハッシュデータベース • ハッシュ表と二分探索木 • 格納順序をリンクリストで保存 • TCNDB: メモリ上のツリーデータベース • スプレー木 • 参照したノードを根に移動 • TCFDB: ファイル上の配列データベース • キーは自然数のみで、キーの倍数でアドレッシング • TCADB: 上記5種の抽象インターフェイス • DB接続(open)時にDBの型を決定 • Tokyo Tyrantで利用

  11. Tokyo Tyrant • TCのネットワークインターフェイス • 独自バイナリプロトコル、memcached互換、HTTP互換 • epoll/kqueueによるイベント補足 • 10000クライアント以上の同時接続 • スレッドプール型並列処理 • ボス(ネットワーク監視)+8個のワーカスレッド(DB操作) • 20000qps以上のスループット • 高可用性 • ホットバックアップ、更新ログ • 非同期レプリケーション

  12. イベント処理 listen epoll mechanism first of all, the listening socket is enqueued into the epoll queue queue accept epoll_ctl(add) queue back if keep-alive accept the client connection if the event is about the listner epoll_wait task manager epoll_ctl(del) queue enqueue move the readable client socket from the epoll queue to the task queue deque worker thread worker thread do each task worker thread

  13. レプリケーション master and slaves (load balancing) dual master (fault tolerance) write query client master server client database query if the master is dead query read query with load balancing update log standby master active master replicate the difference database database replicate the difference update log update log slave server slave server database database update log update log

  14. Lua拡張 • TTにLuaインタープリタを内蔵 • Luaの関数として任意のDB操作をサーバ側で記述 • レコードロックによるアトミックな呼び出し • reqest • function name • key data • value data back end front end Tokyo Tyrant Clients Tokyo Cabinet Lua processor • response • result data database script user-defined operations

  15. 事例:mixiのタイムスタンプDB mod_perl TT (active) home.pl update show_friend.pl database view_diary.pl replication search.pl other pages TT (standby) fetch database list_friend.pl list_bookmark.pl

  16. 事例:hBaseのキャッシュ Tokyo Tyrant hBase database atomic insert clients Lua cliants cliants database cliants cliants atomic search database Lua database cache

  17. 詳しくは… • Tokyo Cabinetプロジェクトサイト • http://tokyocabinet.sourceforge.net/ • mixi engineers' blog • http://alpha.mixi.co.jp/blog/ • Tokyo TyrantによるHAハッシュDBサーバの構築 • http://alpha.mixi.co.jp/blog/?p=147 • Tokyo Tyrantによる耐高負荷DBの構築 • http://alpha.mixi.co.jp/blog/?p=166 • Lua on Tyrant: DBサーバにLLを組み込む • http://alpha.mixi.co.jp/blog/?p=236

More Related