Share
Embed
Transcript
89 slides
-
目次 1. New SQLを採用した背景 2. Google Cloud Spanner vs TiDB/TiDB
Cloud 3. TiDB Cloudで本番アプリケーションを運用してみて実際どうか -
目次 1. New SQLを採用した背景 2. Google Cloud Spanner vs TiDB/TiDB
Cloud 3. TiDB Cloudで本番アプリケーションを運用してみて実際どうか -
レガシーシステムのリプレイスプロジェクト インフラのクラウド化 & Goへのrewriteする必要がある。 • 認証チーム オンプレ, MySQL, Java, Cassandra,
Couchbase • 認可チーム オンプレ, MySQL, PHP, Redis -
クラウドでもMySQLを使うのか? MySQLを利用することに対する懸念 1. マスターノードが単一障害点 a. 認証認可が止まるとDMMが止まる。 2. バージョンアップ時のダウンタイム a. DMMはメンテを入れるのが面倒。
3. Writeが水平スケールしない a. 各種サービスの都合でリクエストが増える。 -
NoSQLの検討 現実的に厳しい。 • Writeが水平にスケールし、 バージョンアップ時のダウンタイムもない。 • MySQLのデータ構造をNoSQL向けに変更する必要がある。 • コードの改修もまあまあ発生する。 •
NoSQLを使いこなすための学習コストがかかる。 ◦ 例:JOINがない、トランザクションがない、などなど・・・。 -
New SQLの特徴 • RDBに比べるとレイテンシは高くなる。 ◦ ノード間の通信が発生する。 ◦ データが複数のノードに分散する。 ◦ レプリカ間の整合性を取る処理が必要になる。
• 費用が高くなる傾向にある。 ◦ 同じリソース量の場合はRDBの方が高いパフォーマンスを出せる。 • MySQL, NoSQLの上位互換ではない。 ◦ 適材適所である。 -
TiDB Cloudについて • TiDBを開発しているPingCAPが提供するDBaaSである。 • AWS, Google Cloud に対応している。 •
WebUIの管理画面がある。 クラスターのスケールアップや各種メトリクスが確認できる。 -
TiDB Cloudについて • DMMプラットフォームではTiDB Cloudを採用することになる。 ◦ DevOpsを実現するため。 ▪ オンプレのMySQLはインフラ部への作業依頼 &
待ちが発生した。 ▪ 認証チーム、認可チームでインフラ運用が完結するように。 -
目次 1. New SQLを採用した背景 2. Google Cloud Spanner vs TiDB/TiDB
Cloud 3. TiDB Cloudで本番アプリケーションを運用してみて実際どうか -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
双方のシステムアーキテクチャについて • TiDBはSpannerを参考に開発されただけあって似ている。 ◦ コンピューティングとストレージを分割している。 ◦ Placement Driverによってデータ配置を調整している。 • SpannerはGoogleのインフラレベルで設計されており、
グローバルスケールで高可用性を持つDBになっている。 ◦ Clossus(分散ストレージ) ◦ True Time API(GPS & 原子時計) • TiDBはあくまでソフトウェアである。 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
パフォーマンス(QPS & レイテンシ) • 強整合性を保証したSELECTのQPSはSpannerの方が高いと思う。 ◦ Spannerはフォロワーに負荷分散できるため。 ◦ リーダーに問い合わせる処理が発生するので、 レイテンシは高くなりそう。
◦ GPS, 原子時計を利用しているTrue Time APIによって ノード間の時刻差を限りなく小さくできる点も 貢献しているかもしれない。 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
Spanner & PGAdapterは見送った 以下の理由で見送った。 • MySQLに依存したリソースをPostgreSQLに移行する工数がかかる。 どの程度の工数がかかるか読めない。 • PGAdapterと付き合っていかなければいけない。 Spannerはフルマネージドなのにプロキシの運用が発生してしまう。
リプレイスの都合上、オンプレ環境で稼働させる必要がある。 • Spannerを利用するなら覚悟を決めてネイティブ対応した方がよさそう。 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
OLAP(オンライン分析処理) • New SQLはデータが複数のノードに散るので、 各種分析に必要な集計処理(sum, average, etc)が苦手である。 ◦ RDBも得意というわけではない。 •
TiDBは分析処理をサポートしている(HTAP)。 TiFlash(列指向のストレージコンポーネント)を 導入することによってOLAPが可能になる。 -
TiDBにおける分析処理の実現方法 • TiKVのデータをTiFlashにも保存する。 ◦ データを2重で持つことになるが、TiDBが同期してくれる。 • 集計クエリをTiFlashに投げる。 ◦ MySQL互換のクエリを利用することができる。 ▪
OLTP, OLAPを透過的に扱うことができる。 ◦ TiFlashに適したクエリは自動的にTiFlashに投げてくれるが、 明示的に指定することもできる。 -
TiFlashのコスパについて • TiFlashノードを常時稼働させる必要があるのでコスパは微妙。 ◦ 推奨環境は CPU 48コア, Memory 128GB, 2ノード
である。 • 可用性を気にしないなら1ノードでも問題ない。 ◦ 分析用途なら1ノードでもよさそう。 ◦ TiDB Cloudの最小構成だと月額980ドルくらい。 -
補足:TiFlashの分散ストレージ & コンピューティング • TiDB 7.0 以降で利用できる TiFlashのアーキテクチャである。 • 以下のコンポーネントで構成される。
◦ Write Node ◦ Compute Node ◦ S3 • コスパ良くTiFlashを使える仕組み。 -
SpannerとBigQueryの連携 • Change Streamsを利用してデータをBQに連携する。 ◦ Spannerから送られる更新情報を DataflowやストリーミングのAPIを利用してBQに連携する。 • BQのクエリ連携を利用する。 ◦
BQがSpannerのデータを直接クエリする(コピーしない)。 ◦ BQネイティブに比べるとパフォーマンスが劣る可能性がある。 ◦ BQがサポートしないデータ型は扱えない。 別の型にキャストする必要がある。 -
SpannerのData Boost • SpannerのOLTPで 利用されるノードとは 別のノードを用意し、 任意のクエリを実行できる。 • 既存のOLTPに影響を与えない。 •
クエリ実行にかかった リソースのみ課金される。 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
ローカル開発 • TiDBはtiupというCLIツールを利用すると、 ローカルPCに軽量な形でTiDBを立ちあげることができる。 ◦ 本物のTiDBが立ち上がるので各種検証にも利用できる。 ◦ OSSならではのメリットである。 • Spannerは開発/テスト用途のエミュレーターを提供している。
◦ 本番相当のAPIを提供しているがあくまでエミュレーターである。 ◦ SpannerはクライアントとgRPCで通信するので、 本物のSpannerを立ててローカルからアクセスすればいーのでは。 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
Spanner vs TiDB/TiDB Cloud 1. システムアーキテクチャ 2. パフォーマンス 3. 既存DBとの互換性
4. OLAP(オンライン分析処理) 5. ローカル開発 6. クラウド費用 7. GCPとの連携 -
GCPとの連携 • SpannerはGCのサービスなので各種GCサービスとの連携がある。 ◦ IAMによるアカウント管理 ◦ Cloud Logging, Cloud Monitoring
◦ BigQueryとの連携 ◦ Lookerとの連携 ◦ Change Streamsによる更新内容のストリーミング -
結論:Google Cloud Spanner vs TiDB • Spannerの方が完成度が高い。 • Googleの資金力や開発力に勝つのは難しい。 ◦
特にインフラも含めて最適化されている点はどうしようもない。 • クラウドサービスとしての品質もGoogle Cloudには敵わない。 ◦ 今まで積み上げてきた実績やエコシステムが存在する。 -
SpannerはTiDBの直接的な競合になるのか? 意外と棲み分けができているのでは? • TiDBはOSSなのでオンプレでのホスティングが可能である。 • MySQL互換 ◦ エコシステムをそのまま利用できる。 ◦ 既存コードに手を入れず、DBを移行することができる。
▪ レガシーシステムにとっては嬉しい。 ◦ エンジニアの学習コストを低く抑えることができる。 • AWS利用者はTiDB Cloudを利用できる。 -
DMMプラットフォームはTiDB Cloudを採用した • Spannerほどではないが十分実用に耐える品質になっている。 ◦ GAFAのようなビッグテックならまだしも、 日本国内の企業であれば十分利用できる。 • レガシーシステムをリプレイスするDMMプラットフォームでは “MySQL互換”
が決め手となってTiDB Cloudを選択した。 ◦ 試しにMySQLからTiDBに向き先を変えてE2Eテストを実行したら そのまま通った。 -
移行作業を振り返って • エンジニアを2人ほど貼り付けて大体半年くらいかかった。 ◦ カナリアリリースやデータ同期チェック期間による待ちが あったので実際にかかった工数はもっと少ない。 • 移行に必要な実装はダブルライトくらい。 ◦ ダウンタイムが許されないので無停止で移行した。
◦ レガシーアプリケーションながらも 既存の Insert, Update, Delete をコピペするだけなので サクサク進めることができた。 -
目次 1. New SQLを採用した背景 2. Google Cloud Spanner vs TiDB/TiDB
Cloud 3. TiDB Cloudで本番アプリケーションを運用してみて実際どうか -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
TiDB Cloudは安定して動くのか? • DMMプラットフォームはAWS上で半年ほどTiDB Cloudを 利用しているが今のところ安定して動いている。 • 現状のQPSはSELECT, INSERT, UPDATE,
DELETE の合計で 約 4,500 QPSくらい。 ◦ TiDB(CPU 8コア, Memory 16GB) * 3台 ◦ TiKV(CPU 8コア, Memory 32GB) * 3台 -
TiDB Cloudは安定して動くのか? • TiDBノードのCPU利用率が80%になるとレイテンシが悪化する。 ◦ 80%未満 … 数ミリ〜数十ミリ秒のレイテンシ ◦ 80%以上
… 数百ミリ秒のレイテンシ • TiDBノードのCPU使用率が80%を超えないように キャパプラしている。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
別チームではコスパが理由でTiDBの採用を見送った • AWS Auroraと同等のQPSを出そうとすると インフラ費用が2倍以上かかるので採用を見送った。 レイテンシの悪化はアプリケーション全体で60msec程度だった。 ◦ シンプルに Aurora がすごい。
• 十分なリソースを用意することができれば、 アプリケーション全体のレイテンシの悪化は 100msec以内に収まる感じがする。 • NewSQLはRDBの上位互換ではない。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
できるだけ安全にバージョンアップするために • リリースノートで下位互換性を確認する。 • tiupでバージョンアップ対象のTiDBを立ち上げて、 E2Eテストを流すことでクエリの動作を保証する。 • 最新バージョンの1つ前のマイナーバージョンを利用する。 ◦ 枯れた実装を選択することで動作を保証する。
• 開発用のクラスターで様子を見てから本番用のクラスターを バージョンアップする。 ◦ 本番相当の負荷は来ないので参考程度。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
そんなに甘くないMySQL互換 • TiDBはMySQL互換だが、裏側はTiDB & TiKVで構成されている。 モノとしてはMySQLとは別物である。 • TiDBを利用して開発・運用するための学習コストがかかる。 ◦ MySQLの知見が100%役に立つわけではない。
◦ TiDB, TiKVのキャパプラやトラブルシューティングは 試行錯誤している。 ◦ エンタープライズサポートは契約した方がいい。 ▪ 月額費用の20%がサポート費用として上乗せされる。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
監視 • TiDB CloudはDatadog, New Relicと連携することができる。 • Datadog, New Relic上のメトリクスが高く出てしまう。
◦ TiDB Cloudのインフラが原因らしい。 ◦ Datadog, New Relicの監視やダッシュボードが使い物にならない。 ▪ 特に監視は誤発火するので困る。 • TiDB Cloudの管理画面を利用するしかない。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
Redisを廃止しようかな • 認証チーム、認可チームのレガシーシステムはRedisを利用している。 ◦ SET, GETが2msec未満くらい。 • Write/Readが水平にスケールするのでTiDBに寄せることが可能。 ◦ 単純なKey-Valueデータの操作は4~15ミリ秒で済む。
◦ キャッシュのパージ戦略を考慮しなくていい。 ◦ システムアーキテクチャがシンプルになる。 ◦ SQLによる高度なデータ操作が可能になる。 • 費用が高くなりそうなので要検討。 -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
目次 1. TiDB Cloudは安定して動くのか 2. コスパはどう? 3. バージョンアップ戦略 4. MySQL互換が嬉しい
5. 意外と便利なTTL機能 6. 監視 7. Redis廃止しようかな 8. オートスケーラー 9. マルチテナント型クラスター -
マルチテナント型クラスター • TiDBはマルチテナントを想定して作られている。 ◦ 例:複数のアプリケーションのDBを1つのクラスターに載せる。 ◦ 例:各アプリケーションのテスト環境を 単一のクラスターで実現する。 ◦ 例:Webアプリケーションとバッチアプリケーションが
同じDBにアクセスする。 • マルチテナント構成ではノイジーネイバーが問題になる。 -
リソース制御機能とバックアップの相性が悪い • TiDB Cloudのバックアップ機能がクラスター単位なので、 バックアップをリストアすると全データが一緒に巻き戻ってしまう。 ◦ DB単位でバックアップできるようになって欲しい。 • いまいちマルチテナントしづらい。 ◦
DMMプラットフォームでもマルチテナント型クラスターを 検討しているが困っている。 -
まとめ • プロダクトとしての完成度はSpannerの方が高い。 ◦ Googleによってインフラレベルで最適化されている。 • TiDBも良いプロダクトであり、Spannerとの棲み分けができてる。 ◦ 国内の企業であれば十分使える。 ◦
オンプレの会社やMySQL利用者に刺さる。 • TiDB Cloudは安定して動くが、管理画面が使いづらい。 ◦ なんだかんだ実用に耐える形になっているので プロダクト設計上手いなと思った。