Canvaは、同社のProduct Analytics Platformのために、AWS SNSとSQSの組み合わせ、MKS、Amazon KDSなど、さまざまなデータメッセージングソリューション群を評価し、主に費用面での大きな優位性から最終的にAmazon KDSを選択した。同社は、パフォーマンス、メンテナンスの労力、コストなど、これらのソリューションに対して多くの側面から比較を行った。
Canvaは、パーソナライズやレコメンデーション、統計や知見への利用など、多くのユーザー向け機能を強化するために、1日あたり約250億の製品分析イベントを処理しています。また、取得されたデータは、新しい製品機能のA/Bテストをサポートするための鍵となります。
製品分析イベントを収集し配信するデータパイプラインは、非常に高いスループットをサポートするだけでなく、高い可用性(99.999%のアップタイム)もサポートし、費用対効果が高く、信頼性が高く、ユーザーフレンドリーである必要があります。商品分析のためのイベント駆動アーキテクチャ(EDA)の提供を担当するチームは、MVPの初期段階でAWS SQSと SNSの組み合わせを使用しました。これらのサービスはセットアップが簡単で、優れた弾力性とスケーラビリティを提供したが、コストに関しては当該アーキテクチャ運用の80%を占めていた。
Amazon KDSを使用した製品分析データパイプライン(出典:Canva Engineering Blog)
最初のMVPの経験に基づいて、チームはより低いコストでパフォーマンス要件を満たす代替手段を探すことにし、他の2つのAWSサービスを検討した: Amazon Managed Streaming for Apache Kafka(MSK)とAmazon Kinesis Data Stream(KDS)です。エンジニアは、これらのサービスのコスト、パフォーマンス、メンテナンス性を比較し、MSKと比較してレイテンシが高い(10~20ms高いが許容範囲)ものの、低コスト(SQS+SNSより85%安い)およびメンテナンスの容易さからKDSを選択した。
KDSベースのソリューションの費用対効果を改善するため、Canvaチームは複数イベントのバッチ処理化とzstd圧縮を使用し、圧縮率は10倍、バッチごとの圧縮レイテンシは100msとした。エンジニアは、圧縮の使用により年間60万ドルの節約につながったと見積もっている。
KDSを使用する際に特に注意が必要だったのは、高いテールレイテンシ(500ms以上)と、スループットが急上昇した時にシャードごとに1MB/sのハードリミットしきい値を超えた場合のスロットリング制限でした。エンジニアは、SQSキューを利用するフォールバック・ロジックを実装し、その結果、SQSの月額料金を100ドル未満に抑えながら、99パーセントでレイテンシを20ms以下にすることに成功しました。このフォールバック・オプションはさらに、KDSが深刻なサービス低下または予期しない停止に見舞われた場合のフェイルオーバー・メカニズムとしても機能します。
KDSがスロットリング制限されている時のSQSへのフォールバック(出典:Canva Engineering Blog)
CanvaチームはProtocol Buffersを使用して、アーキテクチャが時間の経過とともにイベント定義を記述し、進化できるようにした。Canvaはすでにマイクロサービス間のインターフェース定義をするためにProtocol Buffersを使用していたが、イベント定義については、さらに追加して完全な後方互換性と前方互換性が必要だった。エンジニアはまた、protocをベースに自家製のコード生成ツールを作成した。
Datumgenは、互換性要件を検証し、複数の言語でコードを生成するために使用されます。さらに、このツールはイベント定義からメタデータを抽出し、技術担当者やビジネスオーナーに関する詳細情報およびフィールドの説明によってイベントカタログデータの強化につなげます。十分に文書化された最新のイベントスキーマは、Canvaがデータ品質を維持し、実行時のスキーマ非互換性により引き起こされる手間のかかる問題を回避し、エンジニアが利用可能な製品分析イベントを発見するのに役立ちます。