FunctionComputeで実現するDTS(DataTransmissionService)のデータ移行のスケジューリング処理(DTS紹介編)

こんにちは!SHUです!

今回は、DTS(DataTransmissionService)をFunctionComputeで操り、 「データ移行」サービスを定期実行(バッチ処理)させるスクリプトをFunctionComputeで実現します。FunctionComputeって何?という方は前回のECSをFunctionComputeで自動停止&起動させる記事を書いているのでご参照ください。

Function Computeで実現するECSインスタンスの起動&自動のスケジューリング
https://www.sbcloud.co.jp/entry/tnoce_functioncompute

この記事では、まずDTSを詳しく紹介していきます。
2本目の記事を、FunctionComputeを利用したバッチ処理の実行編とします。

Alibaba Cloud DTS(DataTransmissionServiceとは)

image.png

  • Alibaba Cloudでデータベース間のデータ転送や同期ができるマネージドサービス。 マネージドのため、インスタンスはデフォルトで冗長化されている
  • RDBMSやNoSQLを含む、幅広いDBエンジンに対応している。
  • SLAは99.95%
  • なんと"あの"中国アリババの「独身の日」においての運用に実際使われている。
  • おそらく、何万ものアプリケーション向けにリアルタイムにデータ同期する用途で使われている様子...?
  • 中国では5年間順調に運用されている信頼できるプロダクトとのこと

DTSのポイント

  • 増分データのみを移行させることができる
  • ホットマイグレーションが可能(DBがread, writeのステータスにかかわらず影響を与えない)
    • それによってデータ移行におけるダウンタイムが発生しない
  • 高性能
    • DTSがホストされている物理サーバーは高スペックマシンが採用されているため、優れたパフォーマンスが発揮できる
    • データ移行においては、ピーク時で毎秒200,000レコードの転送が可能
    • データ同期においては、ピーク時で毎秒30,000レコードの転送が可能

DTSにおけるマイグレーションの対応種別(2020-02-20時点)

種別 機能 対応DBエンジン 対応リージョン データ移行が利用できる環境
データ移行(Data Migration) ・スキーマ移行、完全なデータ移行、増分データ移行をサポート
・ダウンタイムを最小限に抑えてデータ移行をするためには、スキーマ移行、完全データ移行、増分データ移行をすべて選択すると良き
・異なるDBエンジン間の移行の場合、DTS側でソースDBのスキーマを読み取り、宛先DBエンジンの構文に変換してくれる
・すべてのデータ構造を移行するにはある程度の時間を要する。このプロセスが走るとき、増分として書き込まれたレコードは継続的に書き込まれる(ホットマイグレーションが可能)
MySQL
Oracle
PostgreSQL
SQLServer
Redis
MongoDB
DB2
AmazonRDS
AmazonAurora
【Alibaba系】
RDS, PorlaDB, MongoDB
杭州、北京、青島、深セン、上海、シリコンバレー、バージニア、シンガポール、ドバイ、フランクフルト、クアラルンプール、香港、オーストラリア、ジャカルタ、日本、インド、フフホト、ロンドン ①Alibaba Cloud RDS
②オンプレミスデータベース
③AlibabaCloud ECSベースのデータベース
データ同期(Data Synchronization) ・ソースデータベースとターゲットデータベースをリアルタイムに常時同期させることができる
・OLTPデータベースからOLTPデータベースへがサポートされている(※OTPL=オンライントランザクションプロセッシング)
・増分データのリアルタイム同期が可能
・①初回に初期同期 → ②その後増分データの同期という流れ
【ソースDB】
MySQL
Redis
PolarDB


【ターゲットDB】
MySQL
MaxCompute
ElasticSearch
AnalyticDB for PostgreSQL
PolarDB
AnalyticDB for MySQL
【ソースDB】
杭州、北京、青島、深セン、上海、シリコンバレー、バージニア、シンガポール、ドバイ、フランクフルト、クアラルンプール、オーストラリア、インド、日本、ジャカルタ、フフホト、張家口、香港、ロンドン

【ターゲットDB】
杭州、北京、青島、深セン、上海、フフホト
①Alibaba Cloud RDS
②オンプレミスデータベース(ただしVPN必須)
③AlibabaCloud ECSベースのデータベース
データサブスクリプション(Data Subscription) ・データサブスクリプションを利用すると、リアルタイムで増分データを取得することができる。
MySQL 杭州、北京、青島、深セン、上海、シリコンバレー、シンガポール ①Alibaba Cloud RDS
②オンプレミスデータベース
③AlibabaCloud ECSベースのデータベース

FunctionComputeを利用する理由

上記表の通り、DTSには3つのサービス(機能)があります。
データ移行サービスが最も対応しているDBエンジンが多く、汎用的に利用できると思われますが、実はデータ移行はバッチ処理のようにスケジューリングできる機能がありません。
そこで、FunctionComputeのタイムトリガー機能を利用することで、バッチ処理でデータ移行サービスを実行させることが可能になります。

DTSの従量課金とサブスクリプションの違い

種別 対象サービス 説明 注意点
Pay-As-You-Go(従量課金タイプ) ①データ移行
②データ同期
③データサブスクリプション
・実際の使用量に基づいて請求される
・時間単位で課金される
・短期的な利用において活用される
・仕様後のインスンタスをリリースすることで費用節約ができる
・従量課金→サブスクインスタンスへ切り替えることができる
-
サブスクリプション(月額固定タイプ) ①データ移行
②データ同期
③データサブスクリプション
・長期利用においては従量課金よりもコストが安いのでおすすめ ・サブスクリプションインスタンスを従量課金インスタンスへ変更することはできない
・サブスクが切れるまでインスタンスリリースはできない

利用料金の対象

種別 課金対象アイテム 請求ルール 注意点 費用(/時間)※杭州リージョンの場合
データ移行(Data Migration) ①データ移行インスタンス

②インターネットのトラフィック料金
①時間課金。また、増分データの移行が進行中の場合(増分データの移行が一時停止されている期間を含む)が請求対象となる。スキーマの行こうと完全なデータ移行については課金されない

②アウトバウンドトラフィックのみ課金がされる。つまり、Alibaba Cloudから外に出るときの通信に課金が発生する。実際のチャージは実際の通信に準じる。
・増分データ移行が失敗した時間は、料金発生しない
・アウトバウンドトラフィックは1GBが最低課金単位。500MBの通信であっても1GB分の料金が課金される
small:0.158ドル
medium:0.287ドル
large:0.462ドル
xlarge:0.846ドル
2xlarge:1.502ドル
データ同期(Data Synchronization) ①データ同期インスタンス ①時間課金。設定が完了しデータ同期インスタンスが実行されると、請求が開始される。(インスタンスが一時停止されている期間も時間課金が発生)

②サブスクリプション課金
- small:0.158ドル
medium:0.287ドル
large:0.462ドル
xlarge:0.846ドル
2xlarge:1.502ドル
データサブスクリプション ①データサブスクリプションインタンス ①時間課金。設定が完了しデータサブスクリプションインスタンスが実行されると、請求が開始される。(インスタンスが一時停止されている期間も時間課金が発生)

②サブスクリプション課金
- 0.46ドル

DTSのコンソール画面

今回はAlibaba Cloudのインターナショナルサイト(国際サイト)ベースで見ていきます。
データベース系プロダクトの中にあります。

f:id:sbc_tnoce:20200305150202p:plain

DTSのトップページです。
左のペインでも、真ん中のアイコンどちらからでもそれぞれのサービスページに遷移可能です。

f:id:sbc_tnoce:20200305150213p:plain

例えばデータ移行サービスに遷移してみると、移行タスクが起動できるリージョン一覧が表示されます。
注意するべきポイントとして、Alibaba Cloud RDSなどをソース or ターゲットインスタンスとして選択したい場合は、RDSが存在するリージョンのタスクインスタンスを作成する必要があります。

f:id:sbc_tnoce:20200305150232p:plain

操作ログ画面です。
タスクを実行したログなどがここに出ます。

f:id:sbc_tnoce:20200305150239p:plain