読者です 読者をやめる 読者になる 読者になる

ISUCON夏期講習に参加した

f:id:tattii:20150819162401j:plain

学生限定のISUCON夏期講習に参加してきた。

isucon.net

内容

@tagomorisさんから、ISUCONについて解説してもらった。

概要から、実際の取り組み方までかなり詳しく教えてもらい、勉強になった。

チーム結成できた

チームメンバー募集可と書いていたけど、チームメンバーを募集していたのは3人だけだった。

PerlでWeb API

アルバイトでISUCONのようなことをしていた。

課題

Web APIの負荷が高く、高速化したい。

元の構成

Apache + CGI(Perl)

データはファイルから読み出し

やったこと

Nginx + Starman + Redis
  • データをすべて事前処理してRedisへ格納、インメモリ化

  • フレームワークは使わず、Plackの基本モジュールだけで作成

  • Unix Domain Socketを使う

  • Server::Starterで無停止デプロイ

  • AutoScaling

結果

[#/min]
Old 600
New 60000

abで何度も計測しながら、高速化できるところをいろいろ試していった。
ここまで速度を追求したのは初めてだったので、楽しかった。

AWS上で構築したので、既存のものから徐々に切り替えてもらった。
最終的にはすべて切り替わって、問題なく動いているみたい。

参考にしたもの

ISUCON参加したい

isucon.net

Heroku無料枠の変更点

HerokuのDynoの仕様が変更されるみたい。

Heroku | New Dyno Types and Pricing Public Beta

いつも無料枠でいろいろ試しているけど、無料枠も変更されるので変更点をまとめてみる。

Traditional dynos (現在)

750 dyno-hour / monthまでは無料。
(1X、2X、PXの使い方は自由。)

New dynos (6月から)

現在の1X、2X、PX → Professional Dyno

f:id:tattii:20150508233105p:plain

開発用 → Hobby and Free Dynos

f:id:tattii:20150508233116p:plain

無料枠

Heroku | Heroku’s Free (as in beer) Dynos

  • 1日のうち18時間しか起動できない
  • 30分アクセスがなければsleep
  • webとworkerの2つが使える

  • 現在の1Xは6/1から順次freeに切り替え

  • 少なくとも2ヶ月は18時間を超えてもメール通知のみ

無料で24時間起動し続けることができなくなるみたい。

TrackBoxを公開しました

TrackBox

航跡を共有するWebアプリ「TrackBox」を公開しました。

航跡をきれいに見やすく表示でき、それを共有できます。

f:id:tattii:20150504115433p:plain

Example: http://trackbox.herokuapp.com/track/z12rcnmi


以前作った、 tattii.hatenablog.com

に共有機能を加えたものです。

Heroku + node.js + PostgreSQLを使っています。

メールクライアント

スマホからでも航跡を共有できるように、メールクライアントを作成しました。
下記のアドレスにGPXファイルを添付して送信すると、リンクアドレスが返ってきます。

trackbox0@gmail.com

使い方

自分がよく使っている、Trackというアプリから共有する例です。

Track-リアルタイムルート追跡と共有

Track-リアルタイムルート追跡と共有

  • 7 sols media d.o.o.
  • ユーティリティ
  • ¥600

f:id:tattii:20150504123556p:plain

  1. 履歴の詳細ページの共有ボタンを押す。
  2. Mail as GPXを選択する。
  3. 宛先をtrackbox0@gmail.com、件名を航跡の名前にして送信。
  4. 共有された航跡へのリンクがメールで返ってくる(少し時間がかかります)


f:id:tattii:20150504124117p:plain:w240

これから

  • クライアントアプリを作りたい
  • リアルタイム共有
  • オブジェクトのマッピング

いろいろ発展できそうです。
(クライアントアプリは開発してみたけど、途中で挫折…)

自分の気球の航跡を残しています。→ trackbox posts - To the Sky!

Apache+Starmanの高速化

Apache+Starmanのチューニングをいろいろ試して計測してみた。

0.環境

AWS EC2 t2.micro Amazon Linux
1CPU
1GB Memory

Perl v5.16.3
Apache 2.2.29
Starman 0.4011

1.実行するアプリ

hello.psgi

my $app = sub {
    return [
        200,
        [ "Content-Type", "text/plain" ],
        [ "Hello!" ],
    ];
};
$ starman --workers 64 hello.psgi

2. 測定

別のインスタンスから、abを使ってベンチマークを測定。

$ ab -n 10000 -c 100 <URL>

starmanへ直接、prefork、worker、starman --disable-keepaliveといろいろ試してみた。

[#/sec]
直接 2343.08
prefork 1573.77
prefork --disable-keepalive 1256.11
worker 1754.70

ApacheからReverseProxyするオーバヘッドがかなり大きい。 いろいろ試してみたけどなかなか数値が上がらず…。

ちなみにApacheは、できるだけプロセスのforkが少なくなるように設定した。

KeepAlive On

<IfModule prefork.c>
StartServers           64
MinSpareServers        64
MaxSpareServers        64
ServerLimit           256
MaxClients            256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers            16
MaxClients             256
MinSpareThreads         25
MaxSpareThreads         75
ThreadsPerChild         25
MaxRequestsPerChild  10000
ServerLimit            256
</IfModule>

3. Nginxを試してみる

ずっとApache+Starmanで考えていたけど、これを見てnginxを試してみたくなった。

location /test_tcp/ {
    proxy_pass http://127.0.0.1:5000/;
}

location /test_uds/
    proxy_pass http://unix:/tmp/starman.sock:/;
}

さっきと同じ条件で測定。
StamanがUnix domain socketに対応しているのでそれも試してみる。

[#/sec]
TCP socket 1703.56
Unix domain socket 2132.53

4. 結論

Nginx+Unix domain socketが最速。

NginxとApache共存もできるので、Nginxをメインにするのもありかも。

d.hatena.ne.jp
このブログ記事を参考にさせてもらいました。

CompeGPS Landのインストール

CompeGPS Landを使ってTwoNavで使う地図データを作成する方法をまとめてみます。
まずは、Landのインストールから。

30日間無料で試用できます。

Windows 7
Land 7.7.0

1. ダウンロード


CompeGPS Updates and Downloads

CompeGPS Landを選択してダウンロードします。

2. インストール

ダウンロードしたファイルを開くとインストールが始まります。
この時、言語はEnglishを選択します。

日本語も選択できるけど、日本語化が不完全で使えない機能があるので。

3. 起動できない

起動しようとするとエラーが出て強制終了されます。(version 7.7.0)

f:id:tattii:20141205132322p:plain

4. 原因のファイルを削除

C:/Program Files(x86)/CompeGPS/plugins/Kompass/CompePlugIn_Kompass.dll

を削除します。

f:id:tattii:20141205132943p:plain

5. アクティベート

起動できたら、Free Activationを選択して適当にユーザ登録します。
パスワードは6文字以上でないと始めから入力し直しになるので注意...。

f:id:tattii:20141205133408p:plain

6. インストール完了

航跡を可視化

航跡を可視化するwebアプリを作りました。

GPX view
http://tattii.github.io/map/gpxview/



f:id:tattii:20141205102735p:plain


普段気球に乗ったときに航跡を記録してGoogle Earthで確認したりしてるけど、もっと気軽に航跡を見る方法があればいいなと思って作りました。

必要と思った機能は、

  • 航跡を高度で色付けして表示
  • 高度、速度のグラフ
  • いくつかの統計情報

です。

使ったもの




GPXファイルにしか対応していないけど、気球とか飛行機とか、3次元に移動する航跡に最適です。