Node.jsのEOLと格闘した2年間の記録
by
dShikata
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Node.jsのEOLと格闘した 2年間の記録 開発統括部 第二開発部 カスタマーサービス・クラウド開発課 四方 大輔 1
Slide 2
Slide 2 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自己紹介 • 四方 大輔 (シカタ ダイスケ) • 入社3年目 • メール共有・管理システム Mail Dealer の機能開発を担当 2
Slide 3
Slide 3 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 本日の内容 • Mail Dealerとは • Node.jsがバージョンアップができない!? • Node.jsのEOLとの戦い • Node.jsをバージョンアップした!! 3
Slide 4
Slide 4 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Mail Dealerについて
Slide 5
Slide 5 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Mail Dealer(MD) とは クラウド型のメール共有・管理システム 5
Slide 6
Slide 6 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. MDのチャット機能について 6
Slide 7
Slide 7 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. MDのチャット機能について 7
Slide 8
Slide 8 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Node.jsのバージョンアップが できない!? 2年前 EOLとの戦い Node.js Verup(2回目) リリース
Slide 9
Slide 9 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのバージョンアップができない!? 2年前にNode.jsをバージョンアップ (6系でマイナーverup) チャット切断障害が発生!! (きっかけとなった切断障害) • チャットの接続が定期的に切れる • ユーザから問い合わせは多数 • 原因が特定できずバージョンアップ前に切り戻すことに… 9
Slide 10
Slide 10 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. チャットの切断障害 接続時のUI
Slide 11
Slide 11 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. チャットの切断障害 切断時のUI
Slide 12
Slide 12 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. チャットの切断障害 切断時のUI ユーザが手動で再接続しないといけない 問い合わせが殺到
Slide 13
Slide 13 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのバージョンアップができない!? 調査が難航した 切断事象を再現できなかった • 一定の接続数や負荷をかけないと発生しない • 本番相当の負荷を検証環境にかけることが難しい • Node.jsの知見が浅い
Slide 14
Slide 14 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのバージョンアップができない!? バージョンアップができない状態に 再現できない 原因がわかっていない EOLは2年後(2019年4月) バージョンアップできないとセキュリティ的に問題
Slide 15
Slide 15 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 2年前 EOLとの戦い Node.js Verup(2回目) リリース
Slide 16
Slide 16 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 切断時のUI
Slide 17
Slide 17 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 切断時の問題点 • チャットが切断される • ユーザは手動で再接続しないといけない • UIのインパクトが大きい
Slide 18
Slide 18 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い チャットの切断障害… Node.jsのバージョンアップは困難という状況 ユーザにとってはチャットが切断しなければOK 根本的な解決ができなくても ユーザにとって問題なければ良いのでは??
Slide 19
Slide 19 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い ■問題点 チャットが切断される ⇒ すべて切断されるわけではない 手動で再接続しないといけない ⇒ 自動で再接続されたら…? UIのインパクトが大きい ⇒ ユーザが気づかなければOK そうだ、チャット自動再接続機能を作ろう!!
Slide 20
Slide 20 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い チャット自動再接続 切断時のインパクトを抑える!! • チャットの切断を検知すると、自動で再接続する • 切断したことがわからないUIにする • 一定回数、自動再接続に失敗すると切断状態とする
Slide 21
Slide 21 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 切断時のUI AFTER BEFORE
Slide 22
Slide 22 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 開発時の苦労 設計では… MDユーザ数を考慮した負荷分散 • チャット機能関連の閾値は決まっていなかった • 開発だけでなく、インフラチームの知見と協力が必要だった • 同時接続数など負荷試験を通して取得した 22 想定より大きな案件になった
Slide 23
Slide 23 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 開発時の苦労 実装では… チャット全画面のUI改修 • UIが部品化されていなかった • 全画面改修 = 既存仕様を網羅している必要がある 開発環境と本番環境の違い • 開発環境はチャットサーバ1台、本番はチャットサーバ複数台 • LBサーバ変更が同時で動いてたこと (pound → nginx) 23
Slide 24
Slide 24 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 2018年9月 自動再接続機能リリース 24
Slide 25
Slide 25 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い 2018年9月 自動再接続機能リリース 25 このとき、チャット切断障害が発生!! (自動再接続リリースの切断)
Slide 26
Slide 26 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自動再接続機能リリース 切断障害の原因 • リリースと同時にロードバランサを変更 設定に問題があり、切断事象が発生した 26
Slide 27
Slide 27 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自動再接続機能リリース いきなり自動再接続が活躍!! 顧客からの問い合わせは少なかった 27
Slide 28
Slide 28 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自動再接続機能リリース 自動再接続機能がリリースされたことで… Node.jsがバージョンアップできるようになりました。 28
Slide 29
Slide 29 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自動再接続機能リリース 切断時の問題点 • チャットが切断される • ユーザは手動で再接続しないといけない • UIのインパクトが大きい 自動再接続機能ですべて解決
Slide 30
Slide 30 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsのEOLとの戦い ■問題点 チャットが切断される ⇒ 切断しても再接続される 手動で再接続しないといけない ⇒ 自動で再接続される UIのインパクトが大きい ⇒ ユーザが気づかないUIに改修 自動再接続機能ですべて解決
Slide 31
Slide 31 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 自動再接続機能リリース Node.js バージョンアップへ • Node.jsをバージョンアップすると 切断が発生するものとして考える • 切断しても自動再接続機能が頑張ってくれる
Slide 32
Slide 32 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップへ まとめると… 最悪、切断事象が発生しても ユーザにとっては問題がない状態になった Node.jsがバージョンアップできるようになった
Slide 33
Slide 33 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Node.jsバージョンアップへ 2年前 EOLとの戦い Node.js Verup(2回目) リリース
Slide 34
Slide 34 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ Node.js v6系 ⇒ v10系 へバージョンアップ • モジュールも合わせてバージョンアップする 負荷試験までは順調に進んだ • 影響調査やアプリケーションの対応など 34
Slide 35
Slide 35 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 負荷試験 • 負荷試験だけで2ヵ月ぐらい使った • たまたま「接続切れ」が発生した ⇒ 原因を特定して解決することになった。 • socket.ioのみバージョンアップしない方針になった • 最新のv2系へのバージョンアップをやめて、v1系のまま • この状態の負荷試験で問題ないことが確認できた 35
Slide 36
Slide 36 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ リリース 2年前 EOLとの戦い Node.js Verup(2回目) リリース
Slide 37
Slide 37 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ Node.jsをバージョンアップを実施 チャット自動再接続があるので バージョンアップもこっそり実施 ついに2年間の戦いが終わる…!! 37
Slide 38
Slide 38 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ バージョンアップから2日後 ユーザからの問い合わせが… 「チャットの接続が不安定になっている」 このときまでは問題なく稼働していた 38
Slide 39
Slide 39 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ バージョンアップから2日後 ユーザからの問い合わせが… 「チャットの接続が不安定になっている」 このときまでは問題なく稼働していた 39 切断障害が発生!!
Slide 40
Slide 40 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ 切断障害 チャット自動再接続によってなんとか復旧!! ただし、想定以上の切断が発生していた 40
Slide 41
Slide 41 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ 今回の切断原因 Node.jsのプロセスでメモリが大量消費されていた • インフラチームによるチャットサーバの調査で判明 • また新たな問題が… 41
Slide 42
Slide 42 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. Node.jsバージョンアップ Node.jsのプロセスがメモリを大量消費していた • メモリを食い切って切断事象が発生している • チャット再接続によって大問題にはなっていない • アプリケーション側のバグではなさそう… 戦いは終わっていなかった… 42
Slide 43
Slide 43 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. 今後の課題 • メモリの問題は調査継続中 チャット再接続が頑張ってくれている • Node.jsのメモリ周りで挙動が変わった? • Node.jsが使用しているメモリをうまく解放できていない?? • アプリケーション側で対応するしかない?? 43
Slide 44
Slide 44 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. まとめ
Slide 45
Slide 45 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. まとめ 原因不明のチャット切断問題を改善 • 根本的な解決が困難 • Node.jsがバージョンアップできない状態 • 正攻法以外の選択でEOLを乗り越えた • MW自体の原因追及ではなく、アプリケーションやUIを改修 • 根本的な解決にチャレンジしていきたい…!! 45
Slide 46
Slide 46 text
#RAKUSMeetup ©2019 RAKUS Co., Ltd. ©2019 RAKUS Co., Ltd. ご清聴ありがとうございました