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

    • 「Orable ACE Pro」の称号を有するデータベース のスペシャリスト • 開発から運用まで幅広い業務に従事 自己紹介
  2. スケールアウト可能な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)
  3. データレイアウト [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をスケールアウトすると自動でデータの移動 (リバランス)が始まる
  4. リアルタイム分析 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
  5. OSSの活発度が分かる分析サービス OSS Insight https://ossinsight.io/ 46億を超えるGitHub上のイベント分析するデータベースとして TiDB (TiFlash)を活用 ①各イベント発生の推移 ①GitHubイベント データを1分おきに同期

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

    テーブルにシャーディング用のキーは不要 ◦ DDLも一度実行すれば、すべてのサーバーに自動的に伝播されます • データベースサーバーのスケールアップ ◦ クエリー数の増加に応じてTiDBをスケールアウト可能 ◦ 容量、IO要件の増加に対してTiKVをスケールアウト可能 • 分析基盤の必要性 ◦ リアルタイムで処理したい、できるものはHTAP(TiFlash)で対応可能
  7. 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ノードに番号をキャッシュし払いだす方式のため、完全に順番とはならない
  8. 継続的なリリース • 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は行わず新機能を高頻度で提供
  9. 継続的なリリースによる互換性の改善 • TiDB 6.1 ◦ アドバイザリーロック(GET_LOCK(), RELEASE_LOCK())対応 • TiDB 6.2

    ◦ savepoint対応 ▪ アプリケーションフレームワークがNested transactionをエミュレートする 場合に使用されることがある • 開発中 ◦ Foreign key ◦ https://github.com/pingcap/tidb/issues/36982 • ここではMySQLとの互換性を高める機能のみ紹介しております
  10. デモの流れ • TiDB Cloud Dev Tierへのサインアップ方法 ◦ https://tidbcloud.com/free-trial • Laravelアプリケーションの作成

    • LaravelアプリケーションからTiDBクラスタへの接続 • laravel-tidbの紹介 • lavavel-tidbを利用したマイグレーションの実施
  11. TiDB Cloud / クラスタ作成 - 1 • クラスタ作成 ◦ Developer

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

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

    VPC PeeringはDedicated Tierのみで利用可能で、Dev Tierではご利用いただけません • mysql> create database laravel;
  14. 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=
  15. 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で複数のカラムを追加できません
  16. laravel-tidbの利用方法 • laravel-tidbのインストール % cd tidb-example-app % composer require colopl/laravel-tidb

    • config/database.php の設定変更 ◦ 'driver' => 'mysql'から ◦ 'driver' => 'tidb' に変更します
  17. 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'); }); }
  18. 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>
  19. TiDB Cloud セキュリティ ネットワークアクセスの制御 IPアドレスの許可リスト VPC ピアリング CIDR設計の必要がないPrivateLink (coming soon)

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