Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SRE初心者が急成長しているEV充電サービスの安定稼働にコミットした話

Toru Sasaki
December 12, 2023
200

 SRE初心者が急成長しているEV充電サービスの安定稼働にコミットした話

SRE初心者として急成長するEV充電サービスの課題に立ち向かった経験の話をします。充電器管理システムの大規模障害を乗り越え、システムの安定稼働を実現したプロセス、そしてさらなる成長を迎えるために今後取り組む計画について共有します。SREとしての挑戦から得た知見と、進化し続けるサービスへの取り組みの方向性に焦点を当て他資料です

Toru Sasaki

December 12, 2023
Tweet

Transcript

  1. Copyright © ENECHANGE Ltd. All Rights Reserved. | 2 自己紹介

    佐々木 徹 所属 EV充電サービス事業部 開発チーム 入社 2023年5月 経歴 • 新卒で SI 下請SE … 2年 • Webシステム受託開発会社でサーバーサイドエンジニア …8年 ◦ 大規模ブログサービス ▪ 記事検索システムのフルリプレイス ▪ 記事更新通知システムの開発 ◦ 広告代理店案件管理システム新規開発 ◦ 社内用Web会議システムのR&D GitHub tetsu040e 所有EV VW ID.4 Lite (2023年10月納車)
  2. Copyright © ENECHANGE Ltd. All Rights Reserved. | 3 会社概要

    本社オフィス TOKYO ENECHANGE Innovation Limited LONDON 会社名 ENECHANGE株式会社(東証グロース 証券コード:4169) 会社所在地 東京都中央区京橋3-1-1 東京スクエアガーデンWeWork内14F 設立 2015年4月 事業内容 エネルギープラットフォーム事業、EV充電事業、エネルギーデータ事業 代表者 代表取締役CEO 城口 洋平 従業員数 216名(2022年12月31日現在、連結ベース) 拠点 東京 子会社 ENECHANGE Innovation Limited(イギリス)  ENECHANGE EVラボ株式会社 データ事業 プラットフォーム事業 電力会社向け 電力マネジメントサービス 家庭・法人向け 電力ガス会社の切替サービス EV充電事業 駐車場オーナー向け EV充電インフラサービス 東証グロース 上場日:2020年12月23日 業種:情報・通信業
  3. Copyright © ENECHANGE Ltd. All Rights Reserved. | 4 今回お話しする内容

    • EV充電サービスについて • 入社直後に直面した課題への対応 • 今後の計画
  4. Copyright © ENECHANGE Ltd. All Rights Reserved. | 6 EV充電エネチェンジ

    日本政府の掲げた「2035年までに新車販売の100%を電動車にする」という目標を背景に、2021年11月からサービスを開始 2027年までの3万台設置へ向け鋭意成長中 基本的な機能 • 充電スポットを探す • 充電開始・終了 • 経路検索v2 • 充電スポットへのコメント投稿・閲覧 • 使えた・使えなかった報告 https://ev-charge-enechange.jp/
  5. Copyright © ENECHANGE Ltd. All Rights Reserved. | 7 システム構成

    AWS データベース フロント サーバー 充電器管理 サーバー アプリユーザー (スポットを探すなど) アプリ・ゲストユーザー (アプリ・Web から充電) 充電カードユーザー (カードをかざして充電 ) 外部システム 充電器ステータスなどを同期 OCPP HTTPS HTTP HTTPSなど
  6. Copyright © ENECHANGE Ltd. All Rights Reserved. | 8 OCPP

    (Open Charge Point Protocol) • EV用充電スタンドと中央管理システム(充電器管理サーバー)との通信に使用されるプロ トコル • JSON over WebSocket で充電操作や電力データの連携を行う ◦ StartTransaction ◦ StopTransaction ◦ StatusNotification ◦ MeterValue ◦ …など => 充電器1台ごとに充電器管理サーバーと WebSocket で接続している WebSocket JSON JSON
  7. Copyright © ENECHANGE Ltd. All Rights Reserved. | 10 いきなりですが障害です

    • 4月 ◦ 充電器管理サーバーダウン (8時間) ◦ 充電器管理サーバーダウン (8時間) ◦ 充電器の利用ステータス更新が途絶える (1時間) • 5月 ◦ 入社 • 6月 ◦ DB ダウン (5時間) => いずれの障害も、多くの充電器で充電開始できないという致命的な障害
  8. Copyright © ENECHANGE Ltd. All Rights Reserved. | 11 応急処置

    • 4月 ◦ コンテナ1台あたりの同時接続数緩和のためスケールアウト & ECS オートスケール導入 ◦ 負荷の原因となっていたバッチ処理の実行頻度を下げた • 6月 ◦ DB のスケールアップ => リソース不足解消により一旦は落ち着いた...???
  9. Copyright © ENECHANGE Ltd. All Rights Reserved. | 12 障害は起きていないものの...

    DB の CPU 使用率が跳ね上がるタイミングがあり、時々アラートが出る 跳ね上がるタイミングは主に充電器管理サーバーのデプロイと同じことが多い
  10. Copyright © ENECHANGE Ltd. All Rights Reserved. | 13 根本的な原因調査

    (状況整理) • 4月以前は同様の障害は起きていなかった ◦ 4月以前と以降で大きな違いは充電器設置台数 ◦ 徐々に確実に増え続けている • いずれの障害もリソース不足で起きている • いずれの障害も充電器管理サーバーのデプロイタイミングで発生した • デプロイタイミング以外の大きな障害は起きていない • 平時は充電器と充電器管理サーバーは OCPP (WebSocket) で常時接続されている
  11. Copyright © ENECHANGE Ltd. All Rights Reserved. | 14 根本的な原因調査

    (仮説を立てる) • 充電器管理サーバーのデプロイ時の挙動が原因でリソース不足になっていることは間違いない • 充電器管理サーバーのデプロイに伴って旧コンテナが落ち、各充電器との OCPP (WebSocket) 接 続が一斉に切断されているのではないか • 各充電器は充電器管理サーバーとの接続が切れると、即時再接続する仕様なのではないか • 全充電器からの再接続要求が集中し、充電器管理サーバーがパンクしてしまったのではないか => デプロイ構成や充電器の仕様を確認する限り、この説が濃厚
  12. Copyright © ENECHANGE Ltd. All Rights Reserved. | 15 障害発生時に起きていたことのイメージ図

    デプロイ前 デプロイ後の再接続 デプロイによる切断
  13. Copyright © ENECHANGE Ltd. All Rights Reserved. | 16 やるべきことは明白

    再接続が集中しない仕組みを導入する
  14. Copyright © ENECHANGE Ltd. All Rights Reserved. | 17 Exponential

    Backoff • リトライ(再接続)間隔を指数関数的に後退させていくアルゴリズム ◦ 例: 1秒後に再接続、NGなら2秒後に再接続、4秒後、8秒後... • 乱数と組み合わせて実装すればサーバーへの再接続が集中しにくくなる • クライアント側での実装が必要 • 充電器管理サーバーにおけるクライアントは充電器そのもの ◦ 充電器自体はメーカーから購入していて、そこで動くファームウェアもメーカー側が担当 ◦ メーカーへファームウェア更新の開発依頼をすることはできるが、時間とコストがかかる ◦ 早めに解決したい => サーバー側でできる範囲でなんとかしたいため今回は不採用
  15. Copyright © ENECHANGE Ltd. All Rights Reserved. | 18 CodeDeploy

    の機能を使った線形デプロイ • 元々 CodeDeploy を使って Blue/Green デプロイを導入していた • CodeDeploy には線形デプロイのオプションがあり簡単に設定できる! ◦ CodeDeployDefault.ECSLinear10PercentEvery3Minutes • Blue 環境 (既存) から Green 環境 (新) へ設定に応じて徐々にトラフィックを置き換えてくれる • これを使えばデプロイ時の再接続が集中しなくなるのでは => しかし、実際はそうならなかった...
  16. Copyright © ENECHANGE Ltd. All Rights Reserved. | 19 Green環境立ち上げ

    CodeDeploy の線形デプロイと WebSocket • トラフィックを置き換えてくれるのは新規接続のみ • WebSocket で接続済みのものはそのまま Blue 環境と繋がったまま • 結局 Blue 環境が破棄されるタイミングで一斉切断 -> 再接続が集中するのは変わらなかった トラフィックを置き換え 各充電器 Blue環境 コンテナ コンテナ Green環境 コンテナ コンテナ Blue環境 コンテナ コンテナ 各充電器 ALB Green環境 コンテナ コンテナ Blue環境破棄 各充電器 Blue環境 Green環境 コンテナ コンテナ 既存のWebSocket接続 ALB ALB
  17. Copyright © ENECHANGE Ltd. All Rights Reserved. | 20 少しずつ切断用の

    エンドポイントを叩く Graceful Update の独自実装 他に方法がなさそうなので Graceful Update の仕組みを自前で実装することに • 充電器管理サーバーに任意の充電器と接続を切るための内部向けエンドポイントを作成 • トラフィックの置き換えが完了したタイミングを EventBridge で検知 • Lambda を起動し、 10〜15分かけて少しずつ充電器と接続を切っていく • 切断された充電器から順に Green 環境へ再接続される 各充電器 Blue環境 コンテナ コンテナ CodeDeploy EventBridge Lambda トラフィック置き換え トラフィック置き換え完了 のイベント WebSocket切断用の 関数起動 Green環境 コンテナ コンテナ ALB
  18. Copyright © ENECHANGE Ltd. All Rights Reserved. | 21 無事解決!

    🎉 • 想定通り、少しずつ切断 -> 再接続ができてデプロイ時に高負荷となることがなくなった • 充電器管理サーバーのデプロイによる障害が発生しなくなった • デプロイへの心理的ハードルが低くなり、継続的改善のサイクルが早まった • サービスにとって大きな課題をシンプルな方法で解決できた
  19. Copyright © ENECHANGE Ltd. All Rights Reserved. | 22 ちょっと待った

    本当にこれで安定稼働できてる??
  20. Copyright © ENECHANGE Ltd. All Rights Reserved. | 23 Graceful

    Update を導入したのは 7月中旬で、それ以前ほど跳ねてはいないがまだまだ安定していない。 まだDB負荷は完全には安定していない
  21. Copyright © ENECHANGE Ltd. All Rights Reserved. | 24 地道な改善

    • Graceful Update の導入後も DB の CPU 使用率は乱高下していた • X-Ray を導入しボトルネックを探してひとつずつ地道に潰していった ◦ アプリケーションコードの冗長性排除 ◦ INDEX の調整 ◦ あえて非正規化して重い SQL を廃止 …など
  22. Copyright © ENECHANGE Ltd. All Rights Reserved. | 26 •

    現状では安定的に稼働するようになった • 今後も充電器は増え続け、遅くとも4年後には今の十数倍以上の台数を捌く必要がある => 3万台を想定した負荷試験を実施して問題点を洗い出す => 必要に応じてリアーキテクチャを実施する • SRE業務が属人化している => 自動化の推進 => SRE文化の醸成・浸透 • EV充電インフラサービスの土台をしっかり整えていく 充電器3万台稼働へ向けて