はじめに
は以前から Redis による Redis データ移行と同期機能に対応しており、双方向の同期もサポートしていますが、サポートされているコマンドの種類は限られています。
ユーザーが使用するにつれ、包括的なコマンドのサポート不足が比較的大きな問題となってきたため、この機能の最新バージョンでは、ユーザーが遭遇した問題に対応するために、新たな最適化が実施されました。
今回の最適化の主な特徴は以下の通りです。
- 初期化タイプの追加
- データ同期コマンドタイプの追加
- 双方向同期化戦略の最適化
本記事では、上記の最適化ポイントを簡単に紹介し、このリンクの今後の開発方向性について考察します。ユーザーの皆様のお役に立てれば幸いです。
最適化ポイント
コマンドのサポート範囲の改善
文字列(String)とハッシュ(Hash)に加えて、データの初期化は現在、リスト(List)、セット(Set)、およびZセット(ZSet)をサポートしています。
さまざまな種類のデータ初期化とデータ同期コマンドにより、このリンクはより実用的なものとなります。
コマンドの最適化
リスト型のデータ初期化では、取得されたメンバーデータはデフォルトで逆順になっているため、CloudCanalは内部メンバーを並べ替え、RPushコマンドを使用してデータをターゲットに一様に書き込むことで、ソースとターゲットのデータが正確であることを確認します。
Expireコマンドの場合、データ同期が直接ターゲットエンドに適用されると、ソースエンドよりもターゲットエンドのデータの方が後に期限切れになります。そのため、CloudCanalがこのタイプのコマンドを処理する際には、Expireを絶対時間コマンドであるPExpireAtに変換し、ソースとターゲットのキーが同時に期限切れになるようにします。
双方向同期のアンチループ最適化
最適化前は、Redis -> Redis の双方向同期アンチ・ループバック戦略では、データをフィルタリングするかどうかを決定するために、補助コマンドを使用していました。通常のコマンドを受信すると、ハッシュ値が計算され、補助コマンドのキーが存在するかどうかを確認するための補助コマンドが構築されました。この戦略には、以下の問題がありました。
補助コマンドの有効期限を制御することが容易ではありませんでした。
補助コマンドがメモリ領域を占有していました。
補助コマンドが期限切れになっていない場合、同じコマンドは無効になります。
この最適化では、補助コマンドの戦略は維持されますが、データをフィルタリングするかどうかを判断するために補助コマンドの削除を使用します。これによりパフォーマンスが低下しますが、上記の3つの問題が解決され、キャッシュに書き込まれるデータ量が少ない場合には効果的です。新しい戦略の利点:
- 補助コマンドの有効期限の問題を考慮する必要がありません
- ほとんどのコマンドのループ防止に対応できます
コマンドの解析/処理の最適化
この最適化により、コマンドの解析と処理の構造がさらに改善されます。 1つのコマンドを実装するために必要なロジックはより明確かつ独立性が高くなり、新しいコマンドを追加しやすくなり、将来的にコマンドセットをより多くサポートするための基盤が整います。
進化の方向性
コマンドセットの拡充
CloudCanalは現在、一般的なRedisコマンドの17種類をサポートしていますが、これは氷山の一角にすぎません。今後、さらに多くのRedisコマンドがサポートされる予定です。
データの検証と修正
現在、RedisとRedisのリンクでは、データの検証と修正はサポートされていません。データ移行および同期製品では、事後修正と事前防止が同様に重要です。この機能は今後追加される予定です。
スタンドアロンでの完全移行
現在、RedisとRedisのリンクは単独で完全な移行を実行する機能を持っていません。その代わり、増分タスクの一部として完了します。一部のユーザーにとっては、このリンクに対して定期的なバックアップを実行する必要があります。この機能は必要です。