概ねタイトル通りです。
2012年9月21日、iPhone5が発売されましたね。
その日に某システムで障害が発生して職場がてんやわんやでした(;´∀`)
その時に学んだ事があったのでちょっと書いてみます。
PHPで作られたWEBアプリなんですが、SOAPを利用したWeb APIを使っていました。
SOAPはYAHOOのAPIやAMAZONとかでも使われていますよね。
割と有名な通信方式のようです(最近知った)
今回の障害では、通信相手のシステムがレスポンスを全く返してくれなくなったのですが、
なんとAPIを呼んだ時にタイムアウトまで60秒もかかってしまうのです。
|
|
: : :::::::,. -─´、て
::: :: :::Σco===、!,_
: : :: :::::l´i(ノリハノリ) SoapClientクラスのコンストラクタで
: : :::::ルlリ⊃⊂ヽ タイムアウトは20秒って設定していたはずなのに…どうして…
: : ::::(( //xxxxヽ、─────────────────
/~~~
./
不思議に思ったのでマニュアルを調べてみる。
そこにはこんな記述が。
connection_timeout オプションは、SOAP サービスに接続する際のタイムアウト秒数を指定します。 これを使用しても、レスポンスが遅いサービスのタイムアウトを定義することはできません。 サービスのコールが完了するまでの待ち時間を制限するには、設定項目 default_socket_timeout を使用します。
なんてことだ…知らなかった…:(;゙゚'ω゚'):
php.iniかini_setでdefault_socket_timeoutを変更。
これで通信相手が応答を返さない時の待ち時間を変更できます。
一回あたり60秒も待たされるAPIを一画面で何度も何度も読んでしまうシステムだったので思いっきり影響を受けてサービスが停止してしまいました(´Д⊂ヽ
そもそも一回目の通信で失敗したのに次のAPIを普通に叩いてしまう作りが悪いんですけどね…