Redis使用量をタノスする
(engineering.ab180.co)Redisに大量のデータがJSON形式で圧縮なしに保存され、Redisサービス間でモデル共有ができていなかったことで発生していたコストを削減するためのエンジニアリング作業記
- 同一の元データの保存方式を変えることで、ElastiCacheのメモリ使用量を52%、コストを66%削減
- JSONの代わりにProtobufを使用し、データ仕様を明示すると同時に、サービス間のデータ読み書き方式を統一
- brotliと比較した結果、brotliが最も高い圧縮率を示した。windowサイズと圧縮レベルごとの所要時間と圧縮率を比較して最適値を見つけ、適用
- UUIDをRedisのキーとして使う際、ascii85を使用することでメモリ使用量をわずかながら節約できた
- ドメイン関連の技術的負債がインフラのコスト削減作業の障害になり得ることを認識し、明示的なschemaによってこれを解消
4件のコメント
サーバースペックが日ごとに高くなるにつれて、最適化について悩むよりも早く製品を作ることにばかり没頭していましたが、久しぶりに最適化について考えられる良い内容ですね!!
そうですね。実際、可読性が高く柔軟に構造化しやすいという利点から JSON が主に使われますが、容量の面では protobuf のようなバイナリプロトコルを使うほうが都合がよく、さらに突き詰めれば従来の PE 構造や TCP プロトコルのような、極度に最適化されたバイナリプロトコルのほうが適していると思います。
ドメイン関連の技術的負債というご指摘は、まさにその通りだと思います。
いいですね
社長! この方の給料、たくさん上げてください!!