最近、サイボウズLiveが公開しているAPIを叩くアプリケーションを趣味で作っているのだけれども、アプリケーションからサイボウズLiveAPIを叩くのが非常に遅い。OAuthで認証するとき、アクセストークンを取得する時、APIを実際に叩いて情報を取得する時、とにかく全てが遅い。最初はサイボウズLiveAPIが遅いのかと思って諦めて、取得した情報をキャッシュする仕組みだとか、ユーザに遅さを感じさせないようなしくみを作っていたのだけれど、さて実際の環境であるさくらインターネットのVPSにデプロイしてみると、思った以上に早い。あれ、これもしかしてローカルの開発環境の問題か?と気がついて、解決したのでメモ。
ローカルの開発環境はというと、VagrantにboxでCentOSをインストールしてApacheやらPHPやらを突っ込んで使っているだけ。不思議に思ってTwitterでなんでだろう?ってつぶやいてみたところ、いつもお世話になっているMugeso氏からリプライを頂いた。
サイボウズLiveのAPI、ローカル環境から叩く時と、さくらのVPSから叩く時で、体感速度が100倍ぐらい違うんだけど、どういうことだ。 — Mikio KIURA (@kur) November 5, 2013
ちゃんと計測したら、sakura VPSからだと300msecで返事が帰ってきてるのに、ローカル(vagrant)からだと6000secかかってた。何が原因なんだろ。
— Mikio KIURA (@kur) November 5, 2013
@kur マジレスすると名前解決かswapが怪しいですね。
— mugeso (@mugeso) November 5, 2013
なるほど、名前解決か確かに怪しいなと思って色々調べて見たら解決方法を下記の2つ発見しました。両方試してみたけど、両方いけた。
ひとつはRHEL6/CentOS6では、single-request-reopen を必須にしたい…[IPv6]に書いてあるように、CentOSの名前解決の問題。このページによると、Queryの再送に5秒程度余計にかかるって書いてあるのでビンゴっぽいですね。
もうひとつはvagrantでCentOSのVMを立ちあげて、ネットワークが遅い時に試すことに書いてある方法。こちらもおそらく解決している問題は一緒なのだけれど、CentOSの設定ファイルではなく、Vagrantの設定ファイルをいじって、Virtualboxのオプションとして認識させる方法。
以上、俺専用メモ。