システム間接続のはまりパターン

中〜大規模開発のシステム間接続でハマったときのメモ。

連携方法は様々だが 徹底解説! ITアーキテクトとは何か?(4):システム間連携のアーキテクチャ、4つの基本パターンと正しい適用のポイント (1/2) - @IT で解説されているアプリケーション連携が多い。

LAN アナライザーを使えばすぐ分かりそうなものが大半だが、禁止されている現場が多いのかもしれない。

接続できません!どうなってるんですか!?

ステルス接続

こちらのログには出力なし。LAN アナライザーでもパケットを拾えない。

原因は…

  • 相手の設定が間違っていてテスト環境を向いていた
  • ネットワーク経路で止められていた (ルータ、プロキシーなど)
  • 相手のマシンがテスト環境のマシンだった

404 not found

URL が間違っている。

原因は相手の設定ミスなのだが「こちらはすぐに直せないのでそちらでなんとかしてください!」…ここでなんとかするのも仕事である。

応答がありません!

"接続できない" から一歩前進。

原因は…

  • こちらからはちゃんと応答しているのだが、受信した相手プロセス (スレッド) がなぜか死ぬ
  • 上記同様だが、相手プロセスが無限ループで無応答に見える

エラーが返ってくるんですが!どうなってるんですか!?

原因のほとんどは「エラーを返すのが正しい」パターン。

  • プロトコル違反: たいがいがアプリケーションプロトコル違反
  • プロトコル違反ではないが、HTTP ヘッダに "Connection: Close" を指定しておいて 同じ TCP 接続で再度 POST してくるなんていうのも
  • 相手の設定が間違っていてテスト環境を向いていた (これもよくある)

データが送られてこないんですが!

原因は…

  • こちらからはちゃんと送っているのだが、受信した相手プロセス (スレッド) がなぜか死ぬ
  • 上記同様だが、相手プロセスが無限ループで無応答に見える
  • 上記同様だが、相手の処理が遅すぎてタイムアウト

変わり種: そちらのデータを受信すると CPU 100% になるんですが!

ビジー無限ループ (送ったデータは正しかった)

学んだこと

システム開発ではすべてを疑え *1

*1:まず自分の書いたプログラムを疑うのは大前提