こんにちは。
株式会社エアークローゼットの藤川です。
Wantedlyのストーリーでは、エアクロのエンジニアや開発組織について知っていただくため、CTOのご紹介や、評価制度、開発優先度の決め方などをご紹介してきました。
今回は具体的な取り組みについても知っていただくため、2023年のQiita Advent Calendarで「New Relic 賞」を受賞した、SREの工藤が書いた記事をご紹介します。
New Relicを活用し、大きくパフォーマンスを改善した事例となっていますので、パフォーマンス改善に既に取り組んでいる方、SREの方、そしてエアークローゼットに興味がある方はぜひご覧ください!
Profile
工藤和人 1996年生まれ
ニックネーム:Cut(カット)
株式会社エアークローゼット プロダクトグループ テクニカルエンジニアリングチーム SRE
介護職、営業職を経て、2021年に受託開発企業にてエンジニアとしてのキャリアをスタート。2022年、株式会社エアークローゼットにジョインし、主にスタイリングシステムや倉庫システムの開発に携わる。2023年より同社にてSREポジションの立ち上げに従事し、SREに転向。KPI管理、パフォーマンス改善、DevOps、プロダクト開発品質の改善等、幅広い領域に携わる。
自己紹介
はじめまして。株式会社エアークローゼットでSREをしている工藤です。
エアークローゼットでは、直近大きな組織課題になっていたプロダクト品質を改善することを目的に、SREポジションを設立しました。その取り組みの一つであるパフォーマンス改善が大きな成果をあげることができたので、その経緯をシェアできればと思います。
今回の記事はQiita Advent Calendar 2023のプレゼントカレンダーでNew Relic 賞を受賞しました。
あらまし
国内最大級のファッションレンタルサービスを展開するエアークローゼットでは、サービスサイトやアプリの他に、倉庫システムなど様々なシステムを自社内製化しています。
なかでも特徴的なのが、スタイリストがオンライン上でお客様に合ったお洋服をお選びするスタイリング提供システムです。
ただ、このシステムにはパフォーマンス面の課題があり、度々スタイリストさんから「ローディングが長い」「サクサク動くようにしてほしい」といった要望を受けていました。が、優先度が上がらず着手されていませんでした。
そんな中、エアークローゼットでは2023年3月にSREポジションが誕生し、プロダクトの品質や障害対応速度の向上などに立ち向かっていました。パフォーマンスまわりの課題をCTOと棚卸する中で、このスタイリング提供システムのパフォーマンスが話題にあがったのです。
そして、Datadogから移行したばかりのNew Relicを使い、システムのパフォーマンスを改善していくことが決まりました。
この記事で紹介しないこと
- 高度なパフォーマンス改善のノウハウ
- Datadogからの移行ノウハウ
やったこと
1. New Relicでパフォーマンス問題の原因を探る
まずは、パフォーマンス問題のざっくりとした原因を探ります。
New RelicのTransactionsでは、エンドポイント単位のパフォーマンスを見ることができます。ここで、問題の原因がDBにあるのか、アプリケーションの処理にあるのか、外部との通信にあるのかを確認することができます。
スタイリング提供システムにおいては、ほとんどがDBの問題であることがわかりました。そこで、流れているクエリを見てみようとしたのですが...
クエリがない...だと...?!
2. New Relicの設定でクエリ転送設定を有効化する
どうやら、導入時にクエリの転送設定をしていなかったようです。
ドキュメントを参考に、スロークエリの転送設定とTransactionにおけるクエリの転送を設定してみることにしました。
New Relicの設定ファイルでslow_sql
とtransaction_tracer
を設定することで、簡単に有効化ができました。
リリース後すぐに、以下のようにクエリを確認できるようになります。
3. 問題の原因を調査・対策
先ほど確認できたクエリを実際に流してみたり、EXPLAIN
してみたりして調査を進めました。調査の中で、複雑なクエリや冗長なクエリによってパフォーマンスが低下しているケースはほとんどありませんでした。
お恥ずかしいことに、原因のほとんどは取得・更新のキーに使用しているカラムにIndexが貼られていなかったことでした...。
4. 対策を打つ
貼るべきIndexが貼られていなかったこともあり、改善のためのアクションはほとんどが「適切なインデックスを貼ること」でした。
1~2ヶ月を通して7カラムにIndexを貼り、都度その効果を確認していきました。
視覚的にわかりやすく、改善が目に見えてわかるのも非常にありがたいです。
どのくらいの効果があったの?
結果的に、多くのエンドポイントにおいてパフォーマンスを改善することができました!
API改善前改善後改善幅A4.34s→0.38s=3.96s (91%改善)B3.96s→0.37s=3.59s (90%改善)C10.6s→7.41s=3.19s (30%改善)D4.23s→0.57s=3.66s (86%改善)E4.49s→0.74s=3.75s (83%改善)
トータルすると、選定1回あたり18.15秒のパフォーマンス改善になりました。
エアークローゼットでは年間約500,000回以上の選定が行われているため、年間にすると実に約2,520時間分の選定時間を削減することができました🎉🎉🎉
まとめ
最後までご覧いただきありがとうございました🙏
エアークローゼットはエンジニア採用活動も行っておりますので、興味のある方はぜひご覧ください!まずはカジュアルにお話しできればと思いますので「話を聞きに行きたい」からご連絡をお待ちしております。