Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

TiDBとは

Slide 5

Slide 5 text

データベースのスケーラビリティ ● レプリケーションを導入する ○ アプリケーションが書き込み先と読み込み先を意識する必要がある ● シャーディングを導入する ○ アプリケーションがシャーディングキーに応じて、接続先を切り替える必要があ る ● データベースサーバーをスケールアップする ○ ビジネスの成長にサーバーのキャパシティが追いつかなかったら...? ● 分析基盤を別に立てる必要が多い

Slide 6

Slide 6 text

スケールアウト可能な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)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

リアルタイム分析 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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

TiDBの継続的な機能改善

Slide 13

Slide 13 text

継続的なリリース ● 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は行わず新機能を高頻度で提供

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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=

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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>

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

なぜTiDB Cloudを選択するのか

Slide 30

Slide 30 text

TiDB Cloudを選ぶ理由 ● TiDBクラスタ(PD、TiKV、TiDBなど複数ノード)の管理を弊社SREが実施 ○ お客様はスケールアウトするデータベースをサービスとして利用可能 ● TiDBクラスタに接続する単一のエンドポイントを提供 ○ mysqlクライアントを利用してサーバーの違いを意識せずに接続可能 ● TiDBの特性(LSM-Tree)を考慮したストレージの選択 ○ Improve Performance and Data Availability with Elastic Block Store | PingCAP ○ ベンチマーク結果、コストを総合的に考慮してEBS gp3を選択

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

お知らせとお願い

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

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