耐障害性向上・パフォーマンス改善・運用負荷軽減をどう実現する? 事業を支えるSREのノウハウを共有 (2023/12/06 19:00〜)
イベント概要 ...
https://enechange-meetup.connpass.com/event/301585/
ENECHANGE(エネチェンジ)株式会社は、「エネルギーの未来をつくる」をミッションに掲げ、エネルギーの4D革命を推進するエネルギーテック企業。私たちが提供する「EV充電エネチェンジ」は月額費用不要で、いつでも誰でも好きなときに、電気自動車(EV)やプラグインハイブリッド車(PHEV)向けの充電スタンドを利用できるサービスです。
EV充電サービス事業部の開発チームが注力する技術領域のひとつに“Site Reliability Engineering(以下、SRE)”があります。システムを安定稼働させ、ユーザーが快適に利用できるように、日々の改善を続けているのです。
今回はEV充電サービス事業部におけるSRE関連の事例について、開発チームのSRE担当である佐々木 徹とマネージャー兼サーバーサイドエンジニアを務める花井 章剛、そしてCTO室に所属しVPoT兼マネージャーを務め、SRE関連業務も担う岩本 隆史に話を聞きました。
――今回のインタビューでは、EV充電サービス事業部におけるSREの事例を伺います。
佐々木:まずは、充電器管理システムに関する事例からお話しさせてください。私は2023年5月にENECHANGEに入社したのですが、その直前の2023年4月に2回、そして入社後の2023年6月に1回、システムの大規模な障害が発生しました。いずれも数時間にわたって、EVユーザーが充電器で充電できない状態に陥りました。
充電器管理システムのアプリケーションをデプロイしたタイミングで障害が発生していました。この原因について調査をしたところ、充電器管理システムと充電器がOCPP*(WebSocket)で常時接続しているため、デプロイによって古いコンテナがシャットダウンされたタイミングで充電器からの再接続が集中し、システムがパンクしていたことがわかりました。
*…OCPPはOpen Charge Point Protocolの略であり、電気自動車の充電器を管理する国際標準通信プロトコル。
もともとこの設計だったにもかかわらず4月から急に障害が発生し始めた大きな理由としては、充電器台数の増加に伴って再接続が集中するようになったことが挙げられます。
――その課題を、どのような方法で解決しようと試みたのでしょうか?
佐々木:充電器からの再接続が同じタイミングで集中することが問題なので、そのタイミングをずらすことが基本的な解決策になります。まず試したのは、私たちがデプロイに使用しているAWS CodeDeployの、線形デプロイという機能を利用することでした。これにより充電器からの接続を徐々に古いコンテナから新しいコンテナへと移せるか試しました。
ですが、この方式ではうまくいきませんでした。線形デプロイの機能では、新規のコネクションを新しいコンテナへと接続します。しかし、WebSocketという技術ではサーバーとクライアントとの常時接続を行うため、一度古いコンテナにつながったコネクションはそのままつなぎっぱなしになります。そのため充電器からの接続を段階的に新しいコンテナへと移すことはできませんでした。
試行錯誤している中で、岩本さんともSlack上で情報交換をしました。そして解決策として「新しいコンテナが用意されたというイベント情報をトリガーとして、古いコンテナへの接続を切る処理をAWS Lambdaで実行する。そうすることで、各充電器の接続を段階的に新しいコンテナへと切り替えていく」というGraceful Upgradeの方針を選びました。
▲佐々木 徹
岩本:「Slack上で情報交換を〜」と言われましたが、このAWS Lambdaを使うという案は佐々木さんが独力で考えていたと記憶しています。私はいくつか参考になりそうな情報を提示したくらいです。とても良いアイデアですし素晴らしいなと思いながら見ていました。
花井:調査し解決策を考える過程の中で、佐々木さんは適切に仮説を立てて、周りの人たちをうまく巻き込みながら進めていました。出した成果はもちろん素晴らしいですが、プロジェクトを進めるプロセスそのものも良かったと感じます。佐々木さんは、この難易度の高い仕事を担いつつ、合間に差し込みのタスクもこなしていました。
佐々木:そう言っていただけるとありがたいです。デプロイ方法の改善と併せて、充電器管理システムのアプリケーション内で発行されているSQLの改善も行いました。アプリケーションの処理で、スロークエリが原因で充電器との通信がうまくいかなくなってしまう箇所があったんです。CTO室に所属するエンジニアの伊賀原さんから「AWS X-Rayを使うとパフォーマンスのボトルネックを見つけやすくなる」と教えてもらったため、AWS X-Rayを導入して問題のあるクエリを見つけ、このパフォーマンス改善を実現しました。
これら一連の改善を行ったことで充電器管理システムのアプリケーションをデプロイする心理的なハードルが大きく下がりました。対応を行うまでは、デプロイをするたびに「また障害が起きるのではないか」という不安が常に付きまとっていたんです。今では、アプリケーションのリリースサイクルも短くなり、継続的改善のスピードが上がりました。
――他の事例についても教えてください。
佐々木:充電スポット検索APIの改善についてお話しします。私はENECHANGE入社前から「EV充電エネチェンジ」のアプリに触れていましたが、「充電スポットを検索する処理が重たい」と感じており、改善したいと思っていました。そんな折、5月の入社直後に花井さんから「充電スポット検索APIのパフォーマンス改善に取り組んでほしい」と言われたんです。
▲花井 章剛
花井:検索機能のパフォーマンスをなんとかしたいと思っていたものの、開発チームのメンバーは6月末まで別のプロジェクトで手一杯だったんです。そんなタイミングで佐々木さんが入社してくれたので、アプリの仕様理解のためにも、充電スポット検索APIのソースコードを見てもらうことにしました。
佐々木:その頃は、APIが本番環境でレスポンスを返すまでに平均で1秒以上、少し複雑な検索条件の場合は数秒以上かかっていました。パフォーマンスの問題があるため、なるべくAPIの呼び出し回数を減らすようにアプリのマップ上でスクロールした際に自動で再検索を行っておらず、ユーザビリティも良くないという状況でした。
――APIのソースコードを見た結果、改善すべき点として何がありましたか?
佐々木:一言で言うと、無駄な処理が多かったです。充電器の最新のステータス情報だけを取得すれば十分なのにすべての履歴を取得していたり、別々の箇所で同じ条件のデータ取得を複数回行っていたりしていました。
そこでSQLの発行回数を減らし、後続の処理でも必要なデータはクラス間で情報を受け渡すようにして、全体的なリファクタリングを行いました。また、アプリの仕様そのものを調整することで、レスポンスに含める情報の量もなるべく少なく済むようにしました。
その結果として、レスポンス速度を平均で4倍、90%ileで6倍、99%ileで3倍ほどまで改善しました。90%ileではもともと1.18秒ほど応答にかかっていたのが、0.19秒に短縮。99%ileでは3.1秒だったのが、1.04秒になっています。99%近くのリクエストを1秒以内に返せるようになりました。また、このパフォーマンス改善を実現できたため、アプリのマップ移動時に自動的に再検索する処理も、有効にする方針になりました。
個人的には充電スポット検索の処理を、さらに高速化したい気持ちがあります。たとえば、Redisのようなキャッシュサーバーを導入するなどの方法です。ただ、今のところユーザーからパフォーマンスについての不満の声などは挙がっていないので、当面の間はサービスのSLOを監視していく方針でよいと思っています。各サービスのSLO監視については岩本さんが設定を進めており、基準値を超えるようなレイテンシになった場合には、通知されるようになっています。
▲岩本 隆史
岩本:CTO室では各事業部のシステムを横断的に管轄しています。そして、特定の事業部でうまくいった仕組みは、積極的に他の事業部にも展開しています。現在は、EV充電サービス事業部のシステムにおいて、AWSのベストプラクティス集であるAWS Well-Architected Frameworkを適用して、信頼性のさらなる向上を目指しています。佐々木さんやAWSのソリューションアーキテクトの方に協力してもらいながら、その作業を今ちょうど進めているところです。
――SREとしての今後の目標なども教えてください。
佐々木:ENECHANGEは、2027年までにEVの充電器を3万台設置することを目指しています。それに伴い、充電器管理システムやAPIなどへのアクセス数は当然ながら増えていくため、それに備えたアーキテクチャに変える必要があります。まずは負荷試験を実施し、システムの課題などを洗い出したうえで、改善計画を立てていくことが重要です。
――他社のSRE業務と比較して、ENECHANGEにおけるSRE業務にはどのような魅力があるでしょうか?
佐々木:EV充電サービス事業部は、扱っている技術が特殊です。今回のインタビューで登場した、充電器と接続するOCPPというプロトコルはEV専用であり、一般的なWebサービスなどでは絶対に使われません。そうした変わった技術に触れられるのは魅力のひとつです。また、EV充電サービスそのものの前例が世の中に少ないので、発生した課題の解決策が世に出回っていないことが多いです。だからこそ、SREを通じて未知の領域を切り拓く経験ができます。
花井:SREという仕事の目的は、システムを安定稼働させることです。そして、多くの人が使うシステムであればあるほど、“安定稼働”の価値は高くなります。「EV充電エネチェンジ」は日本国内におけるEV充電サービスの中では特に多くの方々に支持されていますし、佐々木さんが述べてくれたように今後も充電器の設置台数を増やしていきます。だからこそ、ENECHANGEにおけるSREの業務の価値はさらに高くなっていくはずです。
岩本:ENECHANGEにおけるSREの魅力は、自由度の高さだと思います。何か解決すべき課題がある場合、「自分がやります」と手を挙げて、その仕事を成し遂げるだけの自信があれば何でも任せてもらえる。自ら課題の解決策を考えて、進めていきたいエンジニアに適している環境です。
――これからENECHANGEのSREとして入社される方へのメッセージをお願いします。
佐々木:EV充電は、今後確実に社会インフラになっていくサービスです。その、社会インフラのインフラを構築するような仕事がSREです。目立たない仕事かもしれませんが、やりがいは大きいです。こうした仕事に携わりたい人はぜひ来てください。
花井:EV充電器はこれから日本中でどんどん増えて、当たり前のものになっていきます。どうすればEV充電サービスそのものが良くなるか、EVドライバーたちの役に立てるかを考え、行動できる方に来ていただきたいです。
岩本:今後、持続可能な社会システムへの転換は必須だと思います。でも、そうした活動に携わりたいと思いつつも、実際には動けていないという人は多いのではないでしょうか。ENECHANGEはエネルギーの課題に対して真剣に取り組んでいる企業ですから、世の中を良くしたいというマインドを持った人ならばマッチすると思います。
12月6日(水)夜にENECHANGE、アソビュー、Chatworkの3社のSREをテーマにオンラインのイベントを開催します。
イベント内では、このインタビュー記事で扱った事例について佐々木がより詳細に発表を行う予定です。
ぜひご参加ください!
詳細とお申し込みは以下です。
エンジニア採用サイトを公開しています。ぜひご覧ください。
エンジニア向けのエントランスブック(採用関連コンテンツのまとめ)もありますのでよろしければこちらもご覧ください。
SREの募集に関しては以下をご覧ください。