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.

Spider DeNA Technology Seminar #2

10,226 views

Published on

Published in: Technology

Spider DeNA Technology Seminar #2

  1. 1. Spider Storage Engineのご紹介 斯波健徳 kentokushiba@gmail.com
  2. 2. MySQLとは? MySQLは、世界で最も普及しているオープンソースの リレーショナルデータベースです。 Webサービス、モバイルコンテンツサービスと相性がよく、 Google、Yahoo、Facebookをはじめ、多くのWeb、モバイル サービス関連企業で利用されています。 もちろん、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. Spiderストレージエンジンとは? Spiderストレージエンジンとは、ストレージエンジンの 1種で、複数のデータベースサーバにあるテーブルを 束ねて、1つのテーブルとして利用することを可能に します。 これは、クラウド環境においては、増え続けるデータを、 サーバをどんどん増やしながら分割して管理する ために利用することができます。 MySQLと同じく、GPLライセンスで公開しています。
  7. 7. Spiderを利用した構成例 AP AP LB DB DB DB DB アプリケーションはSpiderの入ったMySQLに SQL(参照/更新)を実行すると、Spiderが透過的に 後ろにあるデータノードにアクセスして結果を返します。 SQLは、DB1台だったときと同じものでOKです。
  8. 8. Spiderを利用した構成例 AP AP AP AP LB DB DB DB DB DB DB DB DB トラフィックが増えたり、データが増えたりした場合は、 このようにサーバを追加して、負荷分散を行います。
  9. 9. Spiderでクラウド対応 Spiderを使うと、トラフィックやデータ量に 合わせてサーバを追加(削除)していくことが できるので、クラウド環境において、 伸縮自在のRDBを構築することができます。
  10. 10. 「Spider」の主な機能
  11. 11. 「Spider」の主な機能 1. Spiderストレージエンジンは、ローカルDBからリモート DBに対してテーブルリンクを生成 2. Spiderは、「database sharding」を実現可能 3. Spiderは、「XAトランザクション」と「テーブルパーティショ ニング」を利用可能
  12. 12. テーブルリンク 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_b Spiderは、リモートMySQLサーバのテーブルをローカルMySQL サーバのテーブルのように利用することを可能にします。
  13. 13. 「Spider」の主な機能 1. Spiderストレージエンジンは、ローカルDBからリ モートDBに対してテーブルリンクを生成 2. Spiderは、「database sharding」を実現可能 3. Spiderは、「XAトランザクション」と「テーブル パーティショニング」を利用可能
  14. 14. SpiderのXAトランザクション tbl_a tbl_b tbl_c DB1 DB2 DB3 my.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クラスタリングに利用可能です。
  15. 15. 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_a Connection ‘ 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」とは、データを複数のデータベースサーバに分散させて管理する手法のことを言います。
  16. 16. Spiderの「DB SHARDING※」 ※「DB SHARDING」とは、データを複数のデータベース サーバに分散させて管理する手法のことを言います。
  17. 17. アプリケーションによる「DB sharding」 アプリケーションによる「DB sharding」は、 データの増加や更新リクエストの増加に伴う パフォーマンスの低下の問題を解決するために 利用されます。
  18. 18. アプリケーションによる「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 AP3 1.Request 3.Response tbl_a.col_a = 1 アプリケーションによる「DB sharding」は データ増加に伴うパフォーマンスの低下問題を解決します。
  19. 19. アプリケーションによる「DB sharding」 しかし… アプリケーションによる「DB sharding」には、 以下の問題点が挙げられるます。 – 異なるDBサーバのテーブルをjoinできない – 異なるDBサーバに行われた更新の同期は、アプリ ケーションで保障しなければならない – アプリケーションエンジニアは、「database sharding」 を実現するために高いDBスキルが必要 – 「database sharding」 が実装されていないアプリケー ションに、新たに「database sharding」を追加するに は、多くの時間と工数が必要になる
  20. 20. Spiderの「DB sharding」 Spiderは これらの問題を解消します。
  21. 21. 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 DB 2.Request 4.Response AP1 from application AP2 to application AP3 1.Request 5.Response from client to client Spiderの「DB sharding」は tbl_a.col_a = 1 データ増加に伴うパフォーマンス低下問題を解決します。
  22. 22. Spiderの「DB sharding」 そして… – 異なるDBサーバのテーブルをjoinできる – アプリケーションは、異なるDBサーバに行われた更 新の同期を保障する必要がない(Spiderが保障する) – アプリケーションエンジニアは、「DB sharding」を実装 する必要がない – 「DB sharding」が実装されていないアプリケーション でも、アプリケーションを変更しないで「DB sharding」 を実現できるため、導入が容易である
  23. 23. 導入事例
  24. 24. 【導入事例1】 Sagool.tv Sagool.tvは、 www.youtube.comのような動画サイトです。 ただし、全てのコンテンツはインターネットからクロールされ、 動画は、TVのように流し見することができます。 Sagool.tvは、 【Team Lab Inc. ] が運営しています。 http://www.team-lab.com http://www.team-lab.net
  25. 25. Sagool.tv (検索ページ) Sagool.tv was created by Team Lab Inc.
  26. 26. Sagool.tv (動画再生ページ) Sagool.tv was created by Team Lab Inc.
  27. 27. 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 バッチ処理は、毎日全文インデックスを生成する必要があります。
  28. 28. 当時のSagool.tvの問題点 しかし… 動画のレコードが増加するに従い、DB参照性能が 低下していき、 3000万レコードを超えた時には、バッチ処理が24時間で 完了しなくなっていました。 このケースでは、サーバにMySQL clusterを導入するために 十分なメモリがなかったため、 MySQL clusterは 導入できませんでした。 そのため、Spiderを使いました。
  29. 29. 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を追加しました。
  30. 30. Sagool.tv: パフォーマンスの改善 結果 1. Spiderを利用したshardingで、各DBサーバのレコードを減ら すことにより、パフォーマンスが劇的に改善しました。 – DBのパフォーマンスは約10倍改善。 – バッチ処理は約5倍改善。 (バッチ処理は8時間で完了するようになりました) 2. Spiderの導入にアプリケーションの変更は不要でした。 3. Spiderは問題が発生している場所にピンポイントで導入できる ので、動作確認工数が少なく済みました。 SPIDERの「SHARDING」は簡単です。
  31. 31. 【導入事例2】 KADOKAWord.jp 角川グループはメディア、本、商品などの、多くの ウェブサイトを運営しています。(80以上) KADOKAWord.jpは、これらのウェブサイトの コンテンツを横断的に検索できるサービスです。 KADOKAWord.jpは 株式会社角川メディアマネジメント が運営しています。
  32. 32. KADOKAWord.jpで利用されるSPIDERについて KADOKAWord.jpでは、 BlackholeとSpiderを利用しています。 なぜなら・・・ グループサイトからの急激なログトラフィックが あるためです。
  33. 33. 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 現在、 急激なログトラフィックがあっても、問題は発生していません。
  34. 34. 【導入事例3】株式会社マイクロアド 株式会社マイクロアドは 行動ターゲティングというテクノロジーで、 配信する広告を最適化できる 広告配信サービスを提供している企業です。 【MicroAd, Inc.] http://www.microad.jp/
  35. 35. Spider導入前構成 …… …… AP AP AP AP LVS Slave Slave DB DB Register new statistical rules replication from batch server Master Batch DB このシステムでは、バッチ処理が毎日新しい統計結果で、 広告配信のルールを更新する必要があります。
  36. 36. 事業拡大に伴う課題 ・更新負荷の増大 これまで1日につき、2000万レコードの更新が限界 だったものを、事業拡大に伴い1億レコードを 更新できるようにする必要があった。 ・参照負荷の増大 基本的にはレプリケーションスレーブを追加することで 対応するが、1台あたりの更新が減らないと、スレーブ 追加のメリットが薄れる。 ・アプリケーション修正 データベース分割の為に、大幅なアプリケーションの 修正は避けたい。 そのために、Spiderが選択されました。
  37. 37. Spider導入後構成 …… AP AP AP AP …… with Spider with Spider with Spider with Spider Spider sharding LVS LVS LVS SlaveDB SlaveDB SlaveDB SlaveDB SlaveDB SlaveDB replication replication replication MasterDB MasterDB MasterDB Spider sharding Register new statistical rules from batch server SpiderDB (MySQL with Spider) Batch 彼らは、データベースの分割の単位で レプリケーションを構成するという手法を 採用しました。
  38. 38. 改善結果 その結果、 彼らは、毎日1億レコードの更新という目標を達成し、 参照性能の向上にも成功しました。 また、データベース分割のためのアプリケーションの 修正は、ほとんど不要でした。 彼らは現在、事業の更なる拡大のため、データベース の再拡張(re-sharding)を計画しています。
  39. 39. Spider Storage Engine まとめ
  40. 40. まとめ Spider Storage Engineは ・・・・・ 1. 他のストレージエンジンと連携することで、その機能を強化・拡張することができる。 2. リモートのMySQLサーバにあるテーブルを、ローカルのMySQLサーバにあるテーブル として利用する事ができる。 3. XAトランザクションで、複数のサーバに行われた更新を同期することができる。 4. MySQL 5.1から利用可能となったテーブルパーティションをサポートしており、テーブル の各パーティションはそれぞれ別のサーバを利用することができる。 これら4つの機能により ・・・・・ Spiderはトランザクション機能付で「DB sharding」を実現できる。 Spiderはアプリケーションの機能性を損なうことなく「Sharding」を 実現できる。 (このあたりがクラウド対応RDB構築用) Spiderの導入に、アプリケーションは変更の必要がない。 Spiderは必要なところだけにピンポイントで利用できる。
  41. 41. 「Spider」の最近の動き
  42. 42. 「Spider」の最近の動き 1. MariaDB対応 2. BKA対応 3. レプリケーションリトライパッチ 4. 可用性対応
  43. 43. MariaDB対応 MariaDBにバンドルしてもらえるお話を頂きまして、現在 鋭意対応中です。 MariaDBとは、MySQLの生みの親であるMontyとその 会社の社員が開発を行っているMySQLのフォークです。 なお、SpiderはMySQLでも、引き続き利用が可能です。
  44. 44. 「Spider」の最近の動き 1. MariaDB対応 2. BKA対応 3. レプリケーションリトライパッチ 4. 可用性対応
  45. 45. BKA対応 BKAとは、大きなテーブル同士のjoinを高速化するための 機能で、現在はMariaDB 5.3で利用可能です。 対応は奥野さんのアドバイスを頂きつつ、このほど完了 しました。(パーティション機能とBKAを組み合わせて 利用するためのパッチも完成しております) 簡単にパフォーマンスを測定した結果では、約35倍の 性能向上となっております。
  46. 46. 「Spider」の最近の動き 1. MariaDB対応 2. BKA対応 3. レプリケーションリトライパッチ 4. 可用性対応
  47. 47. レプリケーションリトライパッチ レプリケーションスレーブでSpiderを利用した際に、 リモートのサーバとの接続がネットワークの瞬断などで 途切れてしまうとレプリケーションがエラーで 停止してしまい、運用上不都合が発生します。 このため、MySQLに「slave_transaction_retry_errors」 というパラメータを追加し、 「slave_transaction_retry_errors=1158,1159,2013,12701」 のように、エラー番号をコンフィグファイルに指定することで、 指定したエラーはトランザクションを再実行するパッチを 作成しました。
  48. 48. 「Spider」の最近の動き 1. MariaDB対応 2. BKA対応 3. レプリケーションリトライパッチ 4. 可用性対応
  49. 49. 可用性対応 Spiderを利用した際の可用性の担保は、現在リモート サーバ側でDRBDなどを利用して行っていただいて いると思いますが、現在Spider側でも可用性が担保 できるよう8月末完成を目標に機能開発中です。 この機能は、 ・テーブル(パーティション)単位で冗長化の多重度を変更可能。 ・ラウンドロビンの参照負荷分散。 という特徴をもつため、よく参照される最近の情報のみ多重度を 高くして、トラフィックをさばくというような使い方も可能です。
  50. 50. おわりに これからも精力的に 開発を続けていきますので、 よろしくお願いします!!
  51. 51. Any Questions? Thank you for taking your time!! Kentoku SHIBA (kentokushiba@gmail.com) http://wild-growth-ja.blogspot.com/ http://spiderformysql.com

×