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株式会社

    View Slide

  2. PingCAP株式会社
    Technical Support Engineer
    本多 康夫
    バックグラウンド
    ● PingCAPで技術サポートや海外の開発チームと
    連携し製品メンテナンスなどに対応
    ● 「Orable ACE Pro」の称号を有するデータベース
    のスペシャリスト
    ● 開発から運用まで幅広い業務に従事
    自己紹介

    View Slide

  3. アジェンダ
    ● TiDBとは
    ● TiDBの継続的な機能改善
    ● TiDB CloudとPHPでのWebアプリケーションの組み合わせデモ
    ● なぜTiDB Cloudを選択するのか
    ● お知らせとお願い

    View Slide

  4. TiDBとは

    View Slide

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

    ● データベースサーバーをスケールアップする
    ○ ビジネスの成長にサーバーのキャパシティが追いつかなかったら...?
    ● 分析基盤を別に立てる必要が多い

    View Slide

  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)

    View Slide

  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をスケールアウトすると自動でデータの移動
    (リバランス)が始まる

    View Slide

  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

    View Slide

  9. OSSの活発度が分かる分析サービス OSS Insight
    https://ossinsight.io/
    46億を超えるGitHub上のイベント分析するデータベースとして
    TiDB (TiFlash)を活用
    ①各イベント発生の推移
    ①GitHubイベント
    データを1分おきに同期 +TiFlash
    https://ossinsight.io/ ②Pull requests地域の表示
    ②分析クエリを
    TiFlash(カラムストア )
    で高速処理
    ③ジャンル内での比較(人気言語等)
    etc…

    View Slide

  10. TiDBによってできること
    ● 読み込み/書き込み分割が必要だった
    ○ どのTiDBサーバーに接続しても最新のデータを読み書き可能
    ● シャーディングが必要だった
    ○ TiKVが内部的にテーブルをRegionという単位で分割する
    ○ テーブルにシャーディング用のキーは不要
    ○ DDLも一度実行すれば、すべてのサーバーに自動的に伝播されます
    ● データベースサーバーのスケールアップ
    ○ クエリー数の増加に応じてTiDBをスケールアウト可能
    ○ 容量、IO要件の増加に対してTiKVをスケールアウト可能
    ● 分析基盤の必要性
    ○ リアルタイムで処理したい、できるものはHTAP(TiFlash)で対応可能

    View Slide

  11. MySQL互換は100%ではないので注意
    ①MySQL互換
     ストアドプロシージャ・トリガー・外部キー制約 等未サポート
     ※互換性
    ②トランザクション
    ・分離レベル…スナップショットアイソレーションを使用
    - Repeatable Read (デフォルト。MySQL Repeatable Readと同様ファントムリードも防ぐ)
    - Read Committed
     ※参考リンク
    ・モード
    - 悲観ロック(デフォルト)
    - 楽観ロック
     ※参考リンク
    ③Auto_Increment
     - それぞれのTiDBノードに番号をキャッシュし払いだす方式のため、完全に順番とはならない

    View Slide

  12. TiDBの継続的な機能改善

    View Slide

  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は行わず新機能を高頻度で提供

    View Slide

  14. 継続的なリリースによる互換性の改善
    ● TiDB 6.1
    ○ アドバイザリーロック(GET_LOCK(), RELEASE_LOCK())対応
    ● TiDB 6.2
    ○ savepoint対応
    ■ アプリケーションフレームワークがNested transactionをエミュレートする
    場合に使用されることがある
    ● 開発中
    ○ Foreign key
    ○ https://github.com/pingcap/tidb/issues/36982
    ● ここではMySQLとの互換性を高める機能のみ紹介しております

    View Slide

  15. TiDB CloudとPHPでの
    Webアプリケーションの組み合わせデモ

    View Slide

  16. デモの流れ
    ● TiDB Cloud Dev Tierへのサインアップ方法
    ○ https://tidbcloud.com/free-trial
    ● Laravelアプリケーションの作成
    ● LaravelアプリケーションからTiDBクラスタへの接続
    ● laravel-tidbの紹介
    ● lavavel-tidbを利用したマイグレーションの実施

    View Slide

  17. TiDB Cloud / サインアップ
    ● https://tidbcloud.com/free-trial
    ● Googleアカウント、GitHubアカウント、メールアドレスでサインアップ可能
    ● Developere Tierご利用の場合はクレジットカード登録不要

    View Slide

  18. TiDB Cloud / クラスタ作成 - 1
    ● クラスタ作成
    ○ Developer Tierを選択
    ● クラスタ詳細
    ○ Cluser Name
    ○ AWSリージョン
    ○ 無料で利用可能です

    View Slide

  19. TiDB Cloud / クラスタ作成 - 2
    ● Security Quick Start
    ○ Rootパスワード
    ○ IPアドレス制限

    View Slide

  20. TiDB Cloud / クラスタ作成 - 3
    ● TiDB Cloud上にクラスタが作成完了

    View Slide

  21. TiDB Cloud / クラスタへの接続
    ● mysqlクライアントを利用した接続が可能です
    ○ Traffic FiltersによるIPアドレス制限が可能です
    ○ VPC PeeringはDedicated Tierのみで利用可能で、Dev Tierではご利用いただけません
    ● mysql> create database laravel;

    View Slide

  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=

    View Slide

  23. Laravelサーバーの起動
    ● Laravelサーバーの起動
    ○ % php artisan serve
    ● ブラウザで下記URLを開く
    ○ http://localhost:8000/

    View Slide

  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で複数のカラムを追加できません

    View Slide

  25. laravel-tidbの利用方法
    ● laravel-tidbのインストール
    % cd tidb-example-app
    % composer require colopl/laravel-tidb
    ● config/database.php の設定変更
    ○ 'driver' => 'mysql'から
    ○ 'driver' => 'tidb' に変更します

    View Slide

  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');
    });
    }

    View Slide

  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>

    View Slide

  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

    View Slide

  29. なぜTiDB Cloudを選択するのか

    View Slide

  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を選択

    View Slide

  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設定、モニタリング、ス
    ケーリング
    責任共有モデルにもとづいて、顧客
    データへのアクセスを行いません

    View Slide

  32. TiDB Cloudワークショップ
    https://jpn.edu.pingcap.com/catalog/info/id:209
    ● TiDB Cloudを理解するためのハンズオン
    ● クラスタ作成
    ● 監視
    ● バックアップ
    ● スケールアウト(Dedicated Tierのみ)

    View Slide

  33. お知らせとお願い

    View Slide

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

    View Slide

  35. @PingCAP_Japan
    Twitterのフォローをお願いします。

    View Slide

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

    View Slide

  37. View Slide

  38. Thank You!
    https://www.pingcap.com/
    [email protected]

    View Slide