フォーム読み込み中
Alibaba Cloud のオブジェクトストレージサービス(以下 OSS)にクロスリージョンレプリケーション機能(以下 CRR)を提供していますが、複製時間はデータサイズにより、何時間かかかる場合もあります。詳細は CRR のドキュメントをご参考ください。
この度、CRR における新機能 Replication Time Control(以下RTC)がリリースされました。RTC を有効化した場合、99.99%の CRR データは 10 分以内に完了することが SLA で保証されます。また RTC は CRR の状況を監視するメトリクスも多数用意してあります。詳細は RTC のドキュメントをご参考ください。
今回は RTC 機能の利用効果を検証してみたいと思います。
今回の検証で RTC (Replication Time Control)の利用効果を確認するため、RTC 無効と有効状態時の CRR (Cross Region Replication)の処理時間を比較します。
現在、東京リージョンでは RTC 機能がサポートされていないため、今回のクロスレプリケーション検証は、中国・杭州と中国・上海リージョンを使用します。RTC の提供リージョンは中国本土の6つのリージョンと、中国本土以外の地域では、米国 (シリコン バレー) および米国 (バージニア) のリージョンで利用できます。
今回の検証は、複数の小容量ファイルと大容量ファイルの複製、2つパターンを行いたいと思います。
1-1.中国・杭州リージョンにソースバケットを作成します。
・「Create Bucket」ボタンをクリックすると、作成画面が表示されます。
・バケット名やリージョンなど、必要な設定を行います。
・「OK」ボタンをクリックすると、バケットが作成されます。
1-2.手順 2-1 と同様に上海リージョンにターゲットバケット A と B、2つを作成します。
1-3.バケットが作成されたことを確認します。
1-4.ソースバケットとターゲットバケット A の間に、RTC 機能無効のクロスリージョンレプリケーションジョブを作成します。
・ソースバケットの「Cross-Region Replication」ボタンをクリックし、作成画面を表示します。
・レプリケーション先のターゲットバケット A を選択します。
・レプリケーションジョブの設定を行います。
Objects to Replicate:All Files in Source Bucket
Replication Policy:Add/Delete/Change
Replicate Historical Data:No
Replicate Objects Encrypted based on KMS:No
RTC:Disable
・「OK」ボタンをクリックします。
・ポップアップウィンドウの 「Enable」ボタンをクリックして操作を実行します。
1-5.作成したレプリケーションジョブのステータスが「Enabled」になるまで待ちます。
1-6.ソースバケットとターゲットバケット B の間に、RTC 機能有効のクロスリージョンレプリケーションジョブを作成します。
・ソースバケットの「Cross-Region Replication」ボタンをクリックし、作成画面を表示します。
・レプリケーション先のターゲットバケット B を選択します。
・レプリケーションジョブの設定を行います。
Objects to Replicate:All Files in Source Bucket
Replication Policy:Add/Delete/Change
Replicate Historical Data:No
Replicate Objects Encrypted based on KMS:No
RTC:Enable
・「OK」ボタンをクリックします。
・ポップアップウィンドウの 「Enable」ボタンをクリックして操作を実行します。
1-7.作成したレプリケーションジョブと RTC のステータスとも「Enabled」になるまで待ちます。
2-1.クロスリージョンレプリケーションの所要時間を測るために、ターゲットパケット A、B のファイル数を出力する Python スクリプトを用意します。
import oss2 import datetime auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') bucket_src = oss2.Bucket(auth, 'yourEndpoint', 'bucket name') bucket_dst = oss2.Bucket(auth, 'yourEndpoint', 'bucket name') print('Test start on {0}'.format(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) while True: a_counts = 0 b_counts = 0 for obj in oss2.ObjectIterator(bucket_src, prefix=''): a_counts += 1 print('Get {0} files in noRTC bucket on {1}'.format(a_counts, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) for obj in oss2.ObjectIterator(bucket_dst, prefix=''): b_counts += 1 print('Get {0} files in RTC bucket on {1}'.format(b_counts, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) |
出力イメージ
Test start on 2023-05-08 19:30:56 Get 0 files in noRTC bucket on 2023-05-08 19:30:57 Get 0 files in RTC bucket on 2023-05-08 19:30:57 Get 0 files in noRTC bucket on 2023-05-08 19:30:57 Get 0 files in RTC bucket on 2023-05-08 19:30:57 …… |
2-2.2000 件の小容量ファイルを生成し、ソースパケットにアップロードする Python スクリプトを用意します。
from faker import Faker import random import oss2 import datetime def send_testing_data_file_to_oss(oss_bucket, file_counts, name_pattern): fake = Faker(locale='ja_jp') for i in range(file_counts): data = [] counts = random.randint(1, 30) print('Generate {0} lines as data.'.format(counts)) for c in range(counts): data.append('{0},"{1}","{2}"'.format(fake.name(), fake.address(), fake.text())) tmp_file_name = name_pattern.format(i) oss_bucket.put_object(tmp_file_name, "\r\n".join(data)) print('Upload testing data file: {0} successfully!'.format(tmp_file_name)) auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret') bucket = oss2.Bucket(auth, 'yourEndpoint', 'bucket name') send_testing_data_file_to_oss(bucket, 2000, 'data_file_{0}_historical_update.csv') |
2-3.手順 2-1 の Python スクリプトを実行すると同時に、手順 2-2 の Python スクリプトを実行し、2000 件小容量ファイルをソースパケットにアップロードします。
2-4.アップロードが完了すると、Python スクリプトの出力ログを確認します。
Test start on 2023-05-08 20:00:06 Get 0 files in noRTC bucket on 2023-05-08 20:00:06 Get 0 files in RTC bucket on 2023-05-08 20:00:07 …… Get 1923 files in noRTC bucket on 2023-05-08 20:03:00 Get 1996 files in RTC bucket on 2023-05-08 20:03:10 Get 2000 files in noRTC bucket on 2023-05-08 20:03:18 Get 2000 files in RTC bucket on 2023-05-08 20:03:26 |
2-5.小容量ファイルの複製時間を計算します。
・RTC 無効レプリケーション時間(小容量ファイル)= ターゲットパケット A が最初 2000 件に到達した時刻 ー 実行開始時刻
・RTC 有効レプリケーション時間(小容量ファイル)= ターゲットパケット B が最初 2000 件に到達した時刻 ー 実行開始時刻
検証内容 | RTC 無効(秒) | RTC 有効(秒) |
2000 件小容量ファイルの複製 | 192 | 200 |
2-6.上記の検証方法で RTC 機能について効果を確認することができませんでした。複数小容量ファイルの場合、アップロードと複製はほぼ同時刻に完了していますので、アップロード速度がボトルネックになったためと考えられます。
2-7.次の検証を行うため、ソースバケットから全てのファイルを削除します。手順 1-4、1-6 で作成したレプリケーションジョブの Replication Policy に Delete も含まれますので、削除操作もターゲットバケット A、B に複製され、全ファイルが削除されます。
3-1.大容量ファイルのアップロード速度を得るため、ソースバケットと同リージョンでネットワーク性能が高い ECS を作成します。
リージョン:杭州
型番:ecs.c7.3xlarge
ディスクサイズ:240GB
OS:Centos7.9
3-2.ECS 起動後に、下記コマンドで 200GB のダミーファイルを作成します。
# fallocate -l 214748364800 testfile
3-3.大容量ファイルのアップロードに、Alibaba Cloud 社が提供する公式ツール ossutil を利用します。下記URLからダウンロードし、解凍します。
https://gosspublic.alicdn.com/ossutil/1.7.15/ossutil-v1.7.15-linux-amd64.zip
3-4.手順 3-2 の Python スクリプトを実行すると同時に、下記コマンドを実行してイントラネット経由で 200GB ファイルをソースパケットにアップロードします。
# ./ossutil64 cp testfile oss://[bucketname]/ -r -f -e oss-cn-hangzhou-internal.aliyuncs.com -i [accessid] -k [accesskey]
3-5.ターゲットバケット A、B のコンソールとも、アップロード途中のファイルのパートを確認できますので、RTC と関係なく単一ファイルでもソースバケットへのアップロードが完了する前に、複製が開始したことが分かります。
3-6.アップロードが完了すると、処理時間(約345秒)と平均速度(約600MB/s)が表示されます。
3-7.Python スクリプトの出力ログを確認します。
Test start on 2023-05-08 20:31:39 Get 0 files in noRTC bucket on 2023-05-08 20:31:40 Get 0 files in RTC bucket on 2023-05-08 20:31:40 …… Get 0 files in RTC bucket on 2023-05-08 20:37:50 Get 0 files in noRTC bucket on 2023-05-08 20:37:50 Get 1 files in RTC bucket on 2023-05-08 20:37:50 Get 0 files in noRTC bucket on 2023-05-08 20:37:50 ….. Get 0 files in noRTC bucket on 2023-05-08 20:39:35 Get 1 files in RTC bucket on 2023-05-08 20:39:35 Get 1 files in noRTC bucket on 2023-05-08 20:39:35 Get 1 files in RTC bucket on 2023-05-08 20:39:35 |
3-8.大容量ファイルの複製時間を計算します。
・RTC 無効レプリケーション時間(大容量ファイル)= ターゲットパケット A が最初 1 件に到達した時刻 ー 実行開始時刻
・RTC 有効レプリケーション時間(大容量ファイル)= ターゲットパケット B が最初 1 件に到達した時刻 ー 実行開始時刻
検証内容 | RTC 無効(秒) | RTC 有効(秒) |
200GB 大容量ファイルの複製 | 476 | 371 |
3-9.大容量ファイルの場合、アップロードと複製完了の間にタイムラグがあるため、アップロード速度がボトルネックになってなく、上記の検証方法で RTC 機能について効果を確認できたと考えられます。
2023年5月12日記事執筆時点で、Alibaba Cloud 社に確認した結果、RTC 機能の利用は無料ですが、近い時期に課金開始する予定とのことですので、利用する前に OSS 公式定価ページの情報を確認ください。
| 検証内容 | RTC 無効(秒) | RTC 有効(秒) |
2000 件小容量ファイルの複製 | 192 | 200(4% 増加) |
200GB 大容量ファイルの複製 | 476 | 371 (22% 短縮) |
今回は、Alibaba Cloud OSS の新機能 Replication Time Control (RTC)を検証してみました。複数小容量ファイルの場合、複製速度よりアップロード速度が遅いためため、RTC の効果を実感できませんでしたが、200GB 大容量ファイルの場合、RTC有効の方が 105 秒(22% 高速化)の短縮効果を確認できました。
もし低遅延のクロスリージョンレプリケーションのニーズがありましたら、ぜひ RTC 機能を使ってみてください。
今回、多ファイルのケースはファイルサイズを小さくしすぎて効果を感じられませんでしたが、ファイルサイズをもっと大きくしてファイル数が多い場合、効果が出るのかについても気になります。また機会があれば試してみたいと思います。
条件に該当するページがございません