Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducing Spider 20101206(DTT#7)

4,909 views

Published on

Introducing features for database sharding of Spider

  • Be the first to comment

Introducing Spider 20101206(DTT#7)

  1. 1. Spider Storage Engineのご紹介 斯波健徳 kentokushiba at gmail dot com
  2. 2. MySQLとは?MySQLは、オープンソース(ソースコードが公開されている)のリレーショナルデータベースです。Webサービスと相性がよく、ドワンゴ、Google、Yahoo、楽天、facebook、mixi、gree、DeNAなどで利用されています。GPLというライセンスに従って、自由に利用、変更、再配布を行うことができます。
  3. 3. ストレージエンジンとは?MySQLは、プラガブルストレージエンジンアーキテクチャというものを採用しており、ストレージエンジンというものを用途に応じて取り替えることができます。ストレージエンジンは、データベースの中でデータを格納したり取り出したりすることを司る部分です。
  4. 4. ストレージエンジンとは? クライアント クライアント クライアント コネクションプール perser/optimizer/cache ...etc... ストレージエンジンAPI MyISAM InnoDB MEMORY Blackhole q4m Spider MySQLサーバ
  5. 5. ストレージエンジンとは?このようにストレージエンジンが複数あるため、テーブルの用途に応じて最適なストレージエンジンを選択することができます。ストレージエンジンは、テーブル単位で変更可能で、例えばマスターのテーブルにはMyISAMというストレージエンジン、取引情報テーブルにはInnoDBというストレージエンジンを使うというようなことが可能です。
  6. 6. ストレージエンジンとは?ストレージエンジンとその特徴(例)・MyISAM トランザクションに対応していないが、その代わり 構造が単純で、参照性能が高い。 並列性が低いが、並列性を必要としないテンポラリ テーブルなどの用途に向いている。・InnoDB(InnoDB plugin) トランザクションに対応している。 OracleやPostgreSQLなどに使い勝手が近い。 現在は主にInnoDB pluginに拡張や改良が おこなわれている。
  7. 7. ストレージエンジンとは?ストレージエンジンとその特徴(例)・MEMORY オンメモリで動作するので非常に高速なストレージ エンジン。トランザクションはサポートしていない。・BLACKHOLE どんなにinsertしても、データがたまらないストレージ エンジン。データはたまらないがレプリケーション用の ログは残るので、非常に激しいinsertのリクエストを 非同期で反映するために利用される。
  8. 8. ストレージエンジンとは?ストレージエンジンとその特徴(例)・Archive 監査用ログなどひたすらinsertしまくって、 参照(解析)は、あとでじっくり別の場所でやれば いいような場合に利用されるストレージエンジン。 圧縮されるのでデータサイズがコンパクトで、 高速なinsertが可能。・CSV CSV形式のデータを、そのままテーブルとして 利用することを可能にするストレージエンジン。
  9. 9. ストレージエンジンとは?ストレージエンジンとその特徴(例)・q4m テーブルをキューとして利用するための ストレージエンジン。 ●サイボウズラボ㈱の奥一穂さんが作成。・Vertical Partitioning MySQLのテーブルパーティショニングがレコードごとの 分割機能であるのに対し、このストレージエンジンは カラムごとの分割機能を提供する。 ●私が作成。
  10. 10. ストレージエンジンとは?ストレージエンジンとその特徴(例)・mroonga(groongaストレージエンジン) MySQLで高速かつ並列性の高い全文検索を 可能にするストレージエンジン。 ●住商情報システム㈱の池田徹郎さんが作成。 Spiderで分散構成ができるよう、機能拡張を計画中。・BlitzDB MySQLのforkであるDrizzle用のストレージエンジン。 Drizzleでトランザクション非対応型のストレージエンジンを 選択する際の、第一の選択肢になっている。 ●前坂徹さんが作成。
  11. 11. ストレージエンジンとは?ストレージエンジンとその特徴(例)・Tritonn MySQL 5.0系のMyISAMを改造して、日本語の全文検索 を可能にしたストレージエンジン。 mroongaはその後継。 ●住商情報システム㈱の池田徹郎さんが作成。・XtraDB InnoDBのPerconaチューニング版ストレージエンジン。 バックアップツールとして、InnoDB Hot Backupを 改良したXtraBackupがある。 ●Percona Inc.の木下靖文さんががっつり関係。
  12. 12. その他のプラグイン・UDF今回プラグインの話なので、ストレージエンジン以外のプラグインのご紹介(例)・handlersocket plugin MySQLのストレージエンジンにKVS的アクセスを 提供するプラグイン。 PK参照750,000qpsを出したことで、世界に注目される こととなった。 (http://yoshinorimatsunobu.blogspot.com/2010/10/usi ng-mysql-as-nosql-story-for.html) ●㈱DeNAの樋口証さんが作成。 Spiderで分散構成ができるよう、機能拡張を計画中。
  13. 13. その他のプラグイン・UDF今回プラグインの話なので、ストレージエンジン以外のプラグインのご紹介(例)・MySQL full-text parser plugin collection MyISAMに全文検索機能のパーサ (bigram,mecab,space,suffix,snowball)を追加提供する プラグイン。 ●Kawai Hiroakiさんが作成。
  14. 14. その他のプラグイン・UDF今回プラグインの話なので、ストレージエンジン以外のプラグインのご紹介(例)・mregexp マルチバイト文字(日本語含む)に対応した正規表現を 利用することができるようになるUDF。 ●えとらぼ㈱のひろせまさあきさん作成。
  15. 15. その他のプラグイン・UDF今回プラグインの話なので、ストレージエンジン以外のプラグインのご紹介(例)・テーブルに直接アクセスするUDF 実用的に利用されている例は聞いたことはないが、 InnoDBは、直接アクセスすれば非常に高速である ということを証明するという点で、大きな役割を果たした。 ●サイボウズラボ㈱の奥一穂さん作成、 ●㈱DeNAの松信嘉範さん作成など 複数タイプが作成されている。
  16. 16. その他のプラグイン・UDF今回プラグインの話なので、ストレージエンジン以外のプラグインのご紹介(例)・spider_direct_sql Spiderストレージエンジンをインストールすると、 おまけで利用できるようになるUDF。 リモートのMySQLサーバに任意のSQLを発行できる。 複数のリモートMySQLサーバで集計した結果を、 ローカルMySQLサーバに集めて2段階で集計する 用途などで利用する。 ●私が作成。
  17. 17. Spiderストレージエンジンとは?Spiderストレージエンジンとは、これらストレージエンジンの1種で、複数のデータベースサーバにあるテーブルを束ねて、1つのテーブルとして利用することを可能にします。これは、クラウド環境においては、増え続けるデータを、サーバをどんどん増やしながら分割して管理するために利用することができます。
  18. 18. Spiderを利用した構成例 AP AP LB DB DB DB DB アプリケーションはSpiderの入ったMySQLに SQL(参照/更新)を実行すると、Spiderが透過的に後ろにあるデータノードにアクセスして結果を返します。 SQLは、DB1台だったときと同じものでOKです。
  19. 19. Spiderを利用した構成例 AP AP AP AP LB DB DB DB DB DB DB DB DBトラフィックが増えたり、データが増えたりした場合は、このようにサーバを追加して、負荷分散を行います。
  20. 20. Spiderでクラウド対応Spiderを使うと、トラフィックやデータ量に合わせてサーバを追加(削除)していくことができるので、クラウド環境において、伸縮自在のRDBを構築することができます。
  21. 21. 「Spider」の主な機能1. Spiderストレージエンジンは、ローカルDBからリモート DBに対してテーブルリンクを生成2. Spiderは、「database sharding」を実現可能3. Spiderは、「XAトランザクション」と「テーブルパーティショ ニング」を利用可能4. Spiderは、GPLライセンスで公開中 http://spiderformysql.com
  22. 22. テーブルリンク Spider Storage Create table tbl_a ( tbl_a tbl_a col_a int, Engine’s table col_b int, primary key(col_a) DB1 ) engine = Spider Other Storage Connection ‘ 2.Get data tbl_a host “DB1”, Engine’s table table “tbl_a”, user “user”, password “pass” ‘; tbl_a tbl_b Local DB 3.Join 1.Request select tbl_a.col_a, tbl_b.col_c 4.Response from tbl_a, tbl_b where tbl_a.col_a = 1 and tbl_a.col_b = tbl_b.col_bSpiderは、リモートMySQLサーバのテーブルをローカルMySQL サーバのテーブルのように利用することを可能にします。
  23. 23. 「Spider」とは1. Spiderストレージエンジンは、ローカルDBからリ モートDBに対してテーブルリンクを生成2. Spiderは、「database sharding」を実現可能3. Spiderは、「XAトランザクション」と「テーブル パーティショニング」を利用可能4. Spiderは、GPLライセンスで公開中 http://spiderformysql.com
  24. 24. SpiderのXAトランザクション tbl_a tbl_b tbl_c DB1 DB2 DB3my.cnf 2.XA prepare 2.XA prepare 2.XA prepare------------------ 3.XA commit 3.XA commit 3.XA commit…………spider_internal_xa=1………… tbl_a tbl_b tbl_c Local DB 1.Request 4.Response commit SpiderはDBクラスタリングに利用可能です。
  25. 25. SpiderのテーブルパーティショニングCreate table tbl_a ( col_a%3=0 col_a%3=1 col_a%3=2 col_a int, col_b int, primary key(col_a)) engine = Spider tbl_a tbl_a tbl_aConnection ‘ table “tbl_a”, DB1 DB2 DB3 user “user”, password “pass” 2.Get data‘partition by list( mod(col_a, 3)) ( partition pt1 values in(0) tbl_a tbl_b comment ‘host “DB1”’, partition pt2 values in(1) Local DB 3.Join comment ‘host “DB2”’, partition pt3 values in(2) comment ‘host “DB3”’); 4.Response 1.Request select tbl_a.col_a, tbl_b.col_c from tbl_a, tbl_b where tbl_a.col_a = 1 and tbl_a.col_b = tbl_b.col_b Spiderは「DB sharding※」をサポートしています。 ※「DB sharding」とは、データを複数のデータベースサーバに分散させて管理する手法のことを言います。
  26. 26. 「Spider」とは1. Spiderストレージエンジンは、ローカルDBからリモート DBに対してテーブルリンクを生成2. Spiderは、「database sharding」を実現可能3. Spiderは、「XAトランザクション」と「テーブルパーティショ ニング」を利用可能4. Spiderは、GPLライセンスで公開中 http://spiderformysql.com
  27. 27. Spiderの「DB SHARDING※」 ※「DB SHARDING」とは、データを複数のデータベース サーバに分散させて管理する手法のことを言います。
  28. 28. アプリケーションによる「DB sharding」 アプリケーションによる「DB sharding」は、 データの増加や更新リクエストの増加に伴う パフォーマンスの低下の問題を解決するために 利用されます。
  29. 29. アプリケーションによる「DB sharding」 col_a%3=0 col_a%3=1 col_a%3=2 tbl_a tbl_a tbl_a DB1 DB2 DB3 2.Choose a connection and get data AP1 AP2 AP31.Request 3.Response tbl_a.col_a = 1 アプリケーションによる「DB sharding」はデータ増加に伴うパフォーマンスの低下問題を解決します。
  30. 30. アプリケーションによる「DB sharding」しかし…アプリケーションによる「DB sharding」には、以下の問題点が挙げられるます。– 異なるDBサーバのテーブルをjoinできない– 異なるDBサーバに行われた更新の同期は、アプリ ケーションで保障しなければならない– アプリケーションエンジニアは、「database sharding」 を実現するために高いDBスキルが必要– 「database sharding」 が実装されていないアプリケー ションに、新たに「database sharding」を追加するに は、多くの時間と工数が必要になる
  31. 31. Spiderの「DB sharding」 Spiderは これらの問題を解消します。
  32. 32. Spiderの「DB sharding」 col_a%3=0 col_a%3=1 col_a%3=2 tbl_a tbl_a tbl_a DB1 DB2 DB3 3.Choose a connection and get data tbl_a tbl_a tbl_a DB DB DB2.Request 4.Response AP1 from application AP2 to application AP31.Request 5.Response from client to client Spiderの「DB sharding」はtbl_a.col_a = 1データ増加に伴うパフォーマンス低下問題を解決します。
  33. 33. Spiderの「DB sharding」 そして… – 異なるDBサーバのテーブルをjoinできる – アプリケーションは、異なるDBサーバに行われた更 新の同期を保障する必要がない(Spiderが保障する) – アプリケーションエンジニアは、「DB sharding」を実装 する必要がない – 「DB sharding」が実装されていないアプリケーション でも、アプリケーションを変更しないで「DB sharding」 を実現できるため、導入が容易である
  34. 34. 導入事例
  35. 35. 【導入事例1】 Sagool.tv Sagool.tvは、 www.youtube.comのような動画サイトです。 ただし、全てのコンテンツはインターネットからクロールされ、 動画は、TVのように流し見することができます。 Sagool.tvは、 【Team Lab Inc. ] が運営しています。 http://www.team-lab.com http://www.team-lab.net
  36. 36. Sagool.tv (検索ページ) Sagool.tv was created by Team Lab Inc.
  37. 37. Sagool.tv (動画再生ページ) Sagool.tv was created by Team Lab Inc.
  38. 38. Sagool.tvの変更前構成図 Master Master DB DB Crawler Crawler …… replication …… Slave Slave Full-text Full-text …… DB DB search search 1.Get data 2.Register again, again… …… …… AP AP Batch Batchバッチ処理は、毎日全文インデックスを生成する必要があります。
  39. 39. 当時のSagool.tvの問題点しかし… 動画のレコードが増加するに従い、DB参照性能が 低下していき、 3000万レコードを超えた時には、バッチ処理が24時間で 完了しなくなっていました。 このケースでは、サーバにMySQL clusterを導入するために 十分なメモリがなかったため、 MySQL clusterは 導入できませんでした。 そのため、Spiderを使いました。
  40. 40. SPIDER利用後のSagool.tvの構成図 … Master Master replication tbl_a Crawler Crawler DB DB DB replication col_a%4=0 col_a%4=3 Full-text Full-text … Data search search tbl_a sharding tbl_a again, again…… Slave Slave by Spider DB DB DB DB 2.Register 1.Get data tbl_a tbl_a tbl_a tbl_a DB DB… DB DB … AP AP Batch Batch col_a%4=1 col_a%4=2 1.Get data まず、Spiderを利用したスレーブDBと 4つのリモートDBを追加しました。次に、バッチサーバにSpiderを利用したMySQLを追加しました。
  41. 41. Sagool.tv: パフォーマンスの改善結果1. Spiderを利用したshardingで、各DBサーバのレコードを減ら すことにより、パフォーマンスが劇的に改善しました。 – DBのパフォーマンスは約10倍改善。 – バッチ処理は約5倍改善。 (バッチ処理は8時間で完了するようになりました)2. Spiderの導入にアプリケーションの変更は不要でした。3. Spiderは問題が発生している場所にピンポイントで導入できる ので、動作確認工数が少なく済みました。 SPIDERの「SHARDING」は簡単です。
  42. 42. 【導入事例2】 KADOKAWord.jp角川グループはメディア、本、商品などの、多くのウェブサイトを運営しています。(80以上)KADOKAWord.jpは、これらのウェブサイトのコンテンツを横断的に検索できるサービスです。KADOKAWord.jpは株式会社角川メディアマネジメントが運営しています。
  43. 43. KADOKAWord.jpで利用されるSPIDERについてKADOKAWord.jpでは、BlackholeとSpiderを利用しています。なぜなら・・・ グループサイトからの急激なログトラフィックが あるためです。
  44. 44. KADOKAWord.jp: ログサーバ構成図 … tbl_a tbl_a DB DB 3.Log data collecting 2.Replication using Spider replication tbl_a tbl_a Blackhole tbl_a DB DB Statistical … 1.Write log DB AP AP 現在、急激なログトラフィックがあっても、問題は発生していません。
  45. 45. 【導入事例3】株式会社マイクロアド 株式会社マイクロアドは 行動ターゲティングというテクノロジーで、 配信する広告を最適化できる 広告配信サービスを提供している企業です。 【MicroAd, Inc.] http://www.microad.jp/
  46. 46. Spider導入前構成 …… …… AP AP AP AP LVS Slave Slave DB DB Register new statistical rules replication from batch server Master Batch DBこのシステムでは、バッチ処理が毎日新しい統計結果で、 広告配信のルールを更新する必要があります。
  47. 47. 事業拡大に伴う課題・更新負荷の増大これまで1日につき、2000万レコードの更新が限界だったものを、事業拡大に伴い1億レコードを更新できるようにする必要があった。・参照負荷の増大基本的にはレプリケーションスレーブを追加することで対応するが、1台あたりの更新が減らないと、スレーブ追加のメリットが薄れる。・アプリケーション修正データベース分割の為に、大幅なアプリケーションの修正は避けたい。 そのために、Spiderが選択されました。
  48. 48. Spider導入後構成 …… AP AP AP AP …… with Spider with Spider with Spider with SpiderSpider sharding LVS LVS LVS SlaveDB SlaveDB SlaveDB SlaveDB SlaveDB SlaveDB replication replication replication MasterDB MasterDB MasterDBSpider sharding Register new statistical rules from batch server SpiderDB (MySQL with Spider) Batch 彼らは、データベースの分割の単位で レプリケーションを構成するという手法を 採用しました。
  49. 49. 改善結果その結果、彼らは、毎日1億レコードの更新という目標を達成し、参照性能の向上にも成功しました。また、データベース分割のためのアプリケーションの修正は、ほとんど不要でした。彼らは現在、事業の更なる拡大のため、データベースの再拡張(re-sharding)を計画しています。
  50. 50. Spider Storage Engine まとめ
  51. 51. まとめSpider Storage Engineは ・・・・・1. 他のストレージエンジンと連携することで、その機能を強化・拡張することができる。2. リモートのMySQLサーバにあるテーブルを、ローカルのMySQLサーバにあるテーブル として利用する事ができる。3. XAトランザクションで、複数のサーバに行われた更新を同期することができる。4. MySQL 5.1から利用可能となったテーブルパーティションをサポートしており、テーブル の各パーティションはそれぞれ別のサーバを利用することができる。これら4つの機能により ・・・・・ Spiderはトランザクション機能付で「DB sharding」を実現できる。 Spiderはアプリケーションの機能性を損なうことなく「Sharding」を 実現できる。 (このあたりがクラウド対応RDB構築用) Spiderの導入に、アプリケーションは変更の必要がない。 Spiderは必要なところだけにピンポイントで利用できる。
  52. 52. Any Questions?Thank you for taking your time!! Kentoku SHIBA (kentokushiba at gmail dot com) http://wild-growth.blogspot.com/ http://spiderformysql.com

×