Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[PHP Conference Japan 2022] スケールアウト可能なマネージドデータベースサービスTiDB Cloudのご紹介

PingCAP-Japan
September 23, 2022

[PHP Conference Japan 2022] スケールアウト可能なマネージドデータベースサービスTiDB Cloudのご紹介

TiDBはスケールアウト可能なMySQLプロトコル互換データベースです。負荷やデータ量に応じて、柔軟なスケールアウトが可能となっています。さらに、マネージドサービスなTiDB Cloudをご利用いただくことで、サーバーインフラの管理を行わず、データベースをご利用いただくことができます。
このスライドではTiDBの優れたアーキテクチャと、TiDB CloudとPHPでのWebアプリケーションの組み合わせについて紹介します。

PingCAP-Japan

September 23, 2022
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. スケールアウト可能な マネージドデータベースサービス TiDB Cloudのご紹介 Yasuo Honda / 本多康夫 Technical Support

    Engineer PingCAP株式会社
  2. PingCAP株式会社 Technical Support Engineer 本多 康夫 バックグラウンド • PingCAPで技術サポートや海外の開発チームと 連携し製品メンテナンスなどに対応

    • 「Orable ACE Pro」の称号を有するデータベース のスペシャリスト • 開発から運用まで幅広い業務に従事 自己紹介
  3. アジェンダ • TiDBとは • TiDBの継続的な機能改善 • TiDB CloudとPHPでのWebアプリケーションの組み合わせデモ • なぜTiDB

    Cloudを選択するのか • お知らせとお願い
  4. TiDBとは

  5. データベースのスケーラビリティ • レプリケーションを導入する ◦ アプリケーションが書き込み先と読み込み先を意識する必要がある • シャーディングを導入する ◦ アプリケーションがシャーディングキーに応じて、接続先を切り替える必要があ る

    • データベースサーバーをスケールアップする ◦ ビジネスの成長にサーバーのキャパシティが追いつかなかったら...? • 分析基盤を別に立てる必要が多い
  6. スケールアウト可能なMySQLプロトコル互換 TiDB クエリの増加 ノード追加で対応 TiDB TiDB Cluster
 TiKV Cluster
 負荷分散・領域管理

    3ノードのみ必要 PD Cluster TiDB TiKV TiKV TiKV TiKV 容量拡張 ノード追加で対応 TSO / Data Location Metadata
 PD PD PD Application via MySQL Protocol Application via MySQL Protocol Application via MySQL Protocol Application via MySQL Protocol データストアレイヤー アプリケーション (MySQL Client利用可能) - TiDB : クエリーの増加に対してTiDBサーバーのスケールアウト可能 - TiKV : データ容量/IO要件の増加に対してTiKVサーバーのスケールアウト可能 - PD: TiDBクラスタの負荷分散や領域管理を実施 SQL解析レイヤー (Parser, Optimizer)
  7. データレイアウト [A, C) [C, H) [H, X) Key Space Region

    3 Region 2 Region 3 Region 1 Region 2 Region 3 Region 1 Region 2 Region 1 TiKV TiKV TiKV TiKV - 全てのTiKVノードにデータが均等に3つ(以上)にコピーされて分散されている - Region(96MB)という単位で保存されており、 rangeパーティショニングとなっている - 少なくとも2つ(過半数以上)にデータが入った段階で書き込み成功となる - TiKVをスケールアウトすると自動でデータの移動 (リバランス)が始まる
  8. リアルタイム分析 RowData ロー型配置データ Salesテーブル RowData RowData RowData カラム型配置データ Salesテーブル TiDB

    (Optimizer) SELECT AVG(s.price) FROM prod p, sales s WHERE p.pid = s.pid AND p.batch_id = ‘B1328’; TableScan(price,pid) 短いトランザクション処理か長い分析処理かをTiDBで自動判別 リアルタイムで同期 (RaftのLearnerの仕組みを利用 ) price pid B1328 B1328 B1328 TiKV TiFlash 分析処理を高速化する列指向型ストアTiFlash
  9. OSSの活発度が分かる分析サービス OSS Insight https://ossinsight.io/ 46億を超えるGitHub上のイベント分析するデータベースとして TiDB (TiFlash)を活用 ①各イベント発生の推移 ①GitHubイベント データを1分おきに同期

    +TiFlash https://ossinsight.io/ ②Pull requests地域の表示 ②分析クエリを TiFlash(カラムストア ) で高速処理 ③ジャンル内での比較(人気言語等) etc…
  10. TiDBによってできること • 読み込み/書き込み分割が必要だった ◦ どのTiDBサーバーに接続しても最新のデータを読み書き可能 • シャーディングが必要だった ◦ TiKVが内部的にテーブルをRegionという単位で分割する ◦

    テーブルにシャーディング用のキーは不要 ◦ DDLも一度実行すれば、すべてのサーバーに自動的に伝播されます • データベースサーバーのスケールアップ ◦ クエリー数の増加に応じてTiDBをスケールアウト可能 ◦ 容量、IO要件の増加に対してTiKVをスケールアウト可能 • 分析基盤の必要性 ◦ リアルタイムで処理したい、できるものはHTAP(TiFlash)で対応可能
  11. MySQL互換は100%ではないので注意 ①MySQL互換  ストアドプロシージャ・トリガー・外部キー制約 等未サポート  ※互換性 <https://docs.pingcap.com/tidb/stable/mysql-compatibility> ②トランザクション ・分離レベル…スナップショットアイソレーションを使用 - Repeatable Read

    (デフォルト。MySQL Repeatable Readと同様ファントムリードも防ぐ) - Read Committed  ※参考リンク <https://docs.pingcap.com/tidb/stable/transaction-isolation-levels> ・モード - 悲観ロック(デフォルト) - 楽観ロック  ※参考リンク <https://docs.pingcap.com/tidb/stable/pessimistic-transaction> ③Auto_Increment  - それぞれのTiDBノードに番号をキャッシュし払いだす方式のため、完全に順番とはならない
  12. TiDBの継続的な機能改善

  13. 継続的なリリース • TiDBは、2つのリリースサイクルを持ちます(TiDB 6.0以降) • LTS (Long Term Support) ◦

    約6ヶ月おきにリリース ◦ Bug Fixを行う安定版 ▪ https://docs.pingcap.com/tidb/stable/release-6.1.1 • DMR (Development Milestone Release) ◦ 約2ヶ月おきにリリース ◦ Bug Fixは行わず新機能を高頻度で提供
  14. 継続的なリリースによる互換性の改善 • TiDB 6.1 ◦ アドバイザリーロック(GET_LOCK(), RELEASE_LOCK())対応 • TiDB 6.2

    ◦ savepoint対応 ▪ アプリケーションフレームワークがNested transactionをエミュレートする 場合に使用されることがある • 開発中 ◦ Foreign key ◦ https://github.com/pingcap/tidb/issues/36982 • ここではMySQLとの互換性を高める機能のみ紹介しております
  15. TiDB CloudとPHPでの Webアプリケーションの組み合わせデモ

  16. デモの流れ • TiDB Cloud Dev Tierへのサインアップ方法 ◦ https://tidbcloud.com/free-trial • Laravelアプリケーションの作成

    • LaravelアプリケーションからTiDBクラスタへの接続 • laravel-tidbの紹介 • lavavel-tidbを利用したマイグレーションの実施
  17. TiDB Cloud / サインアップ • https://tidbcloud.com/free-trial • Googleアカウント、GitHubアカウント、メールアドレスでサインアップ可能 • Developere

    Tierご利用の場合はクレジットカード登録不要
  18. TiDB Cloud / クラスタ作成 - 1 • クラスタ作成 ◦ Developer

    Tierを選択 • クラスタ詳細 ◦ Cluser Name ◦ AWSリージョン ◦ 無料で利用可能です
  19. TiDB Cloud / クラスタ作成 - 2 • Security Quick Start

    ◦ Rootパスワード ◦ IPアドレス制限
  20. TiDB Cloud / クラスタ作成 - 3 • TiDB Cloud上にクラスタが作成完了

  21. TiDB Cloud / クラスタへの接続 • mysqlクライアントを利用した接続が可能です ◦ Traffic FiltersによるIPアドレス制限が可能です ◦

    VPC PeeringはDedicated Tierのみで利用可能で、Dev Tierではご利用いただけません • mysql> create database laravel;
  22. Laravelプロジェクトの作成 • Laravelプロジェクトの作成 % composer create-project laravel/laravel tidb-example-app • データベース接続設定の変更

    (.envファイル) ◦ 標準のMySQLポート 3306を TiDB Cloudの 4000に変更 ◦ DB_HOSTを127.0.0.1からTiDB Cloudのエンドポイント (*.aws.tidbcloud.com )に変更 ◦ DB_PASSWORDは環境変数として指定 ◦ .envファイル DB_CONNECTION=mysql DB_HOST=tidb.*省略*.prod.aws.tidbcloud.com DB_PORT=4000 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
  23. Laravelサーバーの起動 • Laravelサーバーの起動 ◦ % php artisan serve • ブラウザで下記URLを開く

    ◦ http://localhost:8000/
  24. laravel-tidb • COLOPL,Inc がオープンソース(Apache License 2.0)として公開している TiDB用のLaravelドライバー ◦ Laravel database

    driver for PingCAP TiDB • 代表的な機能 ◦ AUTO_RANDOMへの対応 ▪ Primary Keyのhotspotへの対応 ◦ Nested transactionsへの対応 ▪ 標準のドライバーはsavepointを利用してNested trasactionに対応しているため ▪ TiDB 6.1以前のバージョンでは、TiDBはsavepointに対応していません ◦ 複数カラム追加、削除 ▪ 複数のDDLに分割して現時点でのTiDBの制限を回避 ▪ 現時点でTiDBは単一DDLで複数のカラムを追加できません
  25. laravel-tidbの利用方法 • laravel-tidbのインストール % cd tidb-example-app % composer require colopl/laravel-tidb

    • config/database.php の設定変更 ◦ 'driver' => 'mysql'から ◦ 'driver' => 'tidb' に変更します
  26. laravel-tidbを利用したマイグレーション • laravel-tidbでは、id列はデフォルトで AUTO_RANDOMを利用します (laravel-tidbをインストールしない場合は AUTO_INCREMENT) public function up() {

    Schema::create('flights', function (Blueprint $table) { $table->id(); $table->timestamps(); }); } • 複数カラムを同時に追加する public function up() { Schema::table('flights', function (Blueprint $table) { $table->string('origin'); $table->string('destination'); }); }
  27. laravel-tidbを利用したマイグレーション • マイグレーションの実施 % php artisan migrate:fresh (今回はデモの都合上、 :freshオプションで全てのテーブルを再作成しています )

    • テーブル定義の確認 mysql> show create table flights\G *************************** 1. row *************************** Table: flights Create Table: CREATE TABLE `flights` ( `id` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `origin` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `destination` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 1 row in set (0.01 sec) mysql>
  28. TiDBとMySQLの互換性に関する補足 • laravel-tidbでTiDBのMySQLとの非互換性に対応部分は、TiDB本体としても課題として改善予定です • savepointの対応 ◦ https://github.com/pingcap/tidb/pull/34466 ◦ TiDB 6.2で対応完了

    • 複数カラム追加、削除 ◦ https://github.com/pingcap/tidb/issues/14766
  29. なぜTiDB Cloudを選択するのか

  30. TiDB Cloudを選ぶ理由 • TiDBクラスタ(PD、TiKV、TiDBなど複数ノード)の管理を弊社SREが実施 ◦ お客様はスケールアウトするデータベースをサービスとして利用可能 • TiDBクラスタに接続する単一のエンドポイントを提供 ◦ mysqlクライアントを利用してサーバーの違いを意識せずに接続可能

    • TiDBの特性(LSM-Tree)を考慮したストレージの選択 ◦ Improve Performance and Data Availability with Elastic Block Store | PingCAP ◦ ベンチマーク結果、コストを総合的に考慮してEBS gp3を選択
  31. TiDB Cloud セキュリティ ネットワークアクセスの制御 IPアドレスの許可リスト VPC ピアリング CIDR設計の必要がないPrivateLink (coming soon)

    データの暗号化 通信の暗号化 (TLS/SSL) TiKV, TiFlashとバックアップデータ保管時のデー タの暗号化(AES256) Bring Your Own Key (coming soon) 認証 TLS相互認証 (mTLS) ワークロードの分離 お客様のTiDBクラスタ専用のVPCを作 成し、データの機密性と一貫性を補償し ます ログのリダクション 顧客の機密データの流出を防ぎま す オペレーションポリシー 管理されたIaaS設定、モニタリング、ス ケーリング 責任共有モデルにもとづいて、顧客 データへのアクセスを行いません
  32. TiDB Cloudワークショップ https://jpn.edu.pingcap.com/catalog/info/id:209 • TiDB Cloudを理解するためのハンズオン • クラスタ作成 • 監視

    • バックアップ • スケールアウト(Dedicated Tierのみ)
  33. お知らせとお願い

  34. アンケートご協力へのお願い アンケート回答で Amazonギフト券2000円分を 抽選で20名様にプレゼント! 回答期限は9/26(月)13:00PMまで。 ※学生、個人、アカデミック目的、同業他社様は対象となりません。 ※アンケートに回答する際、セッション参加のメールアドレスのご使用をお願 いいたします。 ※当選は、Amazonギフト券のメール案内をもって代えさせていただきます。 URL:

    https://customform.jp/form/input/119174
  35. @PingCAP_Japan Twitterのフォローをお願いします。

  36. PingCAP定期ウェビナー https://pingcap.co.jp/event/

  37. None
  38. Thank You! https://www.pingcap.com/ info@pingcap.com