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

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

Toru Sasaki
December 12, 2023
110

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

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

Toru Sasaki

December 12, 2023
Tweet

Transcript

  1. ENECHANGE株式会社
    佐々木 徹
    SRE初心者が
    急成長しているEV充電サービスの
    安定稼働にコミットした話

    View full-size slide

  2. 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月納車)

    View full-size slide

  3. 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日
    業種:情報・通信業

    View full-size slide

  4. Copyright © ENECHANGE Ltd. All Rights Reserved. | 4
    今回お話しする内容
    ● EV充電サービスについて
    ● 入社直後に直面した課題への対応
    ● 今後の計画

    View full-size slide

  5. EV充電サービスについて

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 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

    View full-size slide

  9. 入社直後に直面した課題への対応

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. Copyright © ENECHANGE Ltd. All Rights Reserved. | 12
    障害は起きていないものの...
    DB の CPU 使用率が跳ね上がるタイミングがあり、時々アラートが出る
    跳ね上がるタイミングは主に充電器管理サーバーのデプロイと同じことが多い

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. Copyright © ENECHANGE Ltd. All Rights Reserved. | 15
    障害発生時に起きていたことのイメージ図
    デプロイ前 デプロイ後の再接続
    デプロイによる切断

    View full-size slide

  16. Copyright © ENECHANGE Ltd. All Rights Reserved. | 16
    やるべきことは明白
    再接続が集中しない仕組みを導入する

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. Copyright © ENECHANGE Ltd. All Rights Reserved. | 22
    ちょっと待った
    本当にこれで安定稼働できてる??

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  25. 今後の計画

    View full-size slide

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

    View full-size slide

  27. ありがとうございました

    View full-size slide