こんにちは、私は機械学習のエンジニアとして週3、4で勤務しようとフリーランスエージェントを利用しています。
最近の面談で直近のPJでの技術的課題とその解決について聞かれ、うまく説明できなかったwebsocketでのチャット欠落問題について備忘録として残しておきます。
私はチャット機能のあるサービスの開発に当時携わっておりまして、無茶な工数と引き継ぎで炎上しつつもなんとか第一期リリースを終えた時にそれは起きました。
顧客から「チャットが表示されていたのに後から見直すとある時間の複数のチャットだけ無くなっている」との障害報告が来ました。
このチャットのやり取りをしている間は正常に表示できているところがややこしいところで、
1.websocketはブラウザ間でハンドシェイクして通信している
2.チャットのDBへの保存はサーバーへの通信で行なっている
と二種類のレイヤーで通信していることに起因していると考えました。
チャットのやり取りが成功しているため。1の通信は成功していて2で失敗しているということですね。
対応策としては以下を実施しました。
1.サーバーのログを見てもおかしなログはなかったので、AWS側ではじいたとみてログレベルを上げる。(料金がかかるがいか仕方なし)
2.websocketで新しいチャットが来るたびにチャットが欠落していないか確認。該当チャットが欠落の場合挿入する処理を追加
2の暫定対応でそれ以来発生しなくなったのですが、根本的な原因が何かを面談で説明できず微妙な雰囲気に。。。
そこで、改めてわからないなりにどのようなケースがあるか考えてみると
- フリーWi-Fiに接続したところ、サーバー間通信でセキュリティ上の問題が生じ、接続が拒否されたが、websocket通信はブラウザ間なので正常だった。
- トンネルなどを通過していて、websocketのみ通信が再接続され、サーバーへの通信は失敗した。
上記2ケースが考えられるかなと思いました。
次の面談ではスラスラ説明できるようにします!
面談で聞かれたけど答えられなかったシリーズはこれからも残していこうと思います。