strace実践編──Webアプリケーションは思ったとおりに動かない
最後はstraceの実践編です。
Perlで書いたWebアプリケーションの動作の妥当性は,
これらはいずれも有効なのですが,
こういった問題は得てして,
開発環境などであらかじめさらっとstraceの結果を見ておくと,
Perlで作られたWebアプリケーションで陥りがちなパターン
昨今の現場はさまざまなミドルウェアが使われているので一概には言えませんが,
- 接続先のノード数をあまり気にせず多数のkeyに対してget_
multiやset_ multiを実行するコードがデプロイされた結果, リクエスト中で全ノードへの接続・ 再接続が発生するようになり応答が劣化する - アプリケーション側で生成しているkeyの値が間違っている,
あるいはアプリケーション間でずれており, キャッシュを活用しているつもりが実は常にデータベースにフォールバックしている - 思ったよりキャッシュヒット率が低く,
実はデータベースにフォールバックしている
「俺ならそんなことはやらかさない」
これはあくまで憶測ですが,
- ライブラリ側でしれっとコンシステントハッシュ法による分割が行われるため,
利用者側であまり接続先のノード数 (Cache::Memcached::Fastの場合はnewで渡すserversの数) を意識しないことが多い - 同様の理由で,
それぞれのノードに対してどういうタイミングでTCPコネクションが張られるかを意識しないことが多い
以降では,
実例1:epollを使っているつもりが,select(2)を使っていた
AnyEventはPerlでイベント駆動なアプリケーションを書く場合によく使われるモジュールです。通常,
これはいささか極端な例ですが,