検索
ニュース

DoorDashが公開、Kotlinライブラリを通じてキャッシングを効率化する取り組みインタフェースの標準化、メトリクスの一貫性など

DoorDashは公式ブログで、Kotlinライブラリを通じてキャッシングを効率化するための、単一インタフェースやキャッシュの階層化などの取り組みを紹介した。

Share
Tweet
LINE
Hatena

 オンデマンドフードデリバリーサービス事業を展開するDoorDashは2023年10月19日(米国時間)、同社がKotlinライブラリを活用してキャッシングを効率化した取り組みを紹介した。

DoorDashが抱えていたキャッシングの問題

 DoorDashでは、マイクロサービスアーキテクチャが成長するにつれ、サービス間のトラフィック量も増加していた。パフォーマンスを向上させ、コストを削減するための戦略として、キャッシングが長い間使われてきた。しかし、キャッシングに対する統一されたアプローチがなく、複雑化していることが問題だったという。

 DoorDashで最も一般的なキャッシュは、ローカルキャッシュの「Caffeine」と分散キャッシュの「Lettuce」だ。同社のほとんどのチームは、CaffeineとLettuceクライアントをコードで直接使用しているため、キャッシュの陳腐化などさまざまな問題を抱えていた。

問題への取り組み

 この問題に対処するため、同社では最小限のコストで統合できるシンプルなキャッシングライブラリを開発することにした。

単一のインタフェース

 それまでは、各チームがCaffeine、Lettuce、「HashMaps」などの異なるキャッシュクライアントを使用していたため、関数のシグネチャやAPIに一貫性がほとんどない状態だった。これらを標準化するため、簡素化されたインタフェースを導入した。

階層化キャッシュ

 シングルレイヤーとは異なり、マルチレイヤーはパフォーマンスを向上させることができる。なぜなら、ローカルキャッシュのような幾つかのレイヤーは、ネットワークコールを含むレイヤー(例えばRedis)よりもはるかに高速だからだ。そのため、下図に示すように共通のインタフェースの背後に3つのレイヤーを実装した。


マルチレイヤーのキャッシュリクエストフロー(提供:DoorDash)
  1. リクエストローカルキャッシュ: シンプルなHashMapを使用
  2. ローカルキャッシュ: 単一のJava仮想マシン内の全てのワーカーに見えるキャッシュ。重い作業にはCaffeineキャッシュを使う
  3. Redisキャッシュ: Lettuceクライアントを使用

ランタイム機能フラグ制御

 さまざまなユースケースで、異なるコンフィギュレーションが必要になったり、キャッシュレイヤー全体をオフにしたりすることがある。これらをより迅速かつ簡潔に実行するために、ランタイム制御を追加した。これにより、新しいキャッシュのユースケースをいったんコードに取り込み、その後、ランタイムを介してロールアウトとチューニングをフォローアップすることができるようになった。

一貫したメトリクス

 キャッシュの陳腐化に対する可観測性を提供することは、キャッシュの無効化を検証するための鍵だという。キャッシュパフォーマンスを測定するために、キャッシュが何回リクエストされ、リクエストが何回ヒットまたはミスになったかというメトリクスを収集した。

 もう一つの重要な指標は、キャッシュエントリーがSoT(Source of Truth)と比較してどれだけ新しいかだ。これを測定するためにシャドーイングメカニズムを採用した。

ユースケースガイダンス

 ライブラリを作成し実戦テストをしたら、次のステップは、開発者にこのライブラリを提供し、可能な限りシームレスに業務に統合できるようにすることだ。そのために、キャッシングをいつ、どのように使うか、そして同様に重要なこととして、いつ使わないかについて、包括的なアドバイスを与えた。

終わりに

 同社はマイクロサービスを1つの包括的なライブラリへ集約することで、スケーラビリティを劇的に合理化し、サービス全体の安全性を強化した。標準化されたインタフェース、一貫したメトリクス、統一されたキースキーム、適応可能な設定などの導入により、新しいキャッシュの導入プロセスを強化した。

 さらに、いつ、どのようにキャッシングを採用するかの包括的なアドバイスを与えることで、潜在的な落とし穴や非効率を防ぐことにも成功した。この戦略的な見直しにより、同社はキャッシングの潜在能力を最大限に活用する一方で、よくある落とし穴を回避できるようになった。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る