2012年12月19日水曜日

sockjsとvertx


websocketの検索してたら、こんなの見つけた。
Sockjs

vertx


2012年11月6日火曜日

HAProxyはじめました

HAProxyを入れてみることにした。

websocketを試すために、nginxを入れたけど、既存のapache環境もひつようで、
振り分けの設定が簡単そうなHAProxyを選択。

nginxがダメということではなく、単にHAProxyとwebsocketの組み合わせに興味が。。。
(nginxのwebsocket対応が開発版のみ、というので賛同が得られなかったこともある)

というわけで、
HAProxyの後ろで、apache, nginx, node が動いている状況です。
nodeはsocket.io用。 nginxはwebsocket用に入れたけど、しばらく宙ぶらりんのアイドル状態。

HAProxy って何ですか?
「The Reliable, High Performance TCP/HTTP Load Balancer」です。

インストールはrpmを利用 (epelリポジトリ)
yum install --enablerepo=epel haproxy

スタティックなファイルなどはパス指定して、専用のサーバーへ
ドメインの振り分けは hdr_dom(host) でACLを定義する。
HAProxy
Configuration Manual
7. Using ACLs and pattern extraction

振り分け条件はいろいろな書き方があって、かなり幅が広がりそう。
サブドメイン単位でなく、URLの文字列や、パスでも振り分けられる。
う~ん、凄い。
既存のapache環境もポートを変更しただけで、いい感じに動いてる。


ただ、パフォーマンスの観点から、ssl、keepaliveは未対応らしい。

websocket環境はまだまだですね。
awsのelbもnginxも。そもそもクライアントサイドでは、androidブラウザが未対応とはがっかり。

でも、近いうちにやってくるwebsocket革命が!!!

2012年11月2日金曜日

nginxインストール (rpm)

nginx どうなのよ?
「エンジンエックス」って読むけどOKですか?

nginx.org でrpmを用意してくれている。


では、リポジトリをついか。

/etc/yum.repos.d/nginx.repo を作成
-----------------------------------------------------------
[nginx]
name=nginx repo
# stable版
baseurl=http://nginx.org/packages/centos/6/$basearch/
# 開発版
baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
gpgcheck=0
enabled=1
-----------------------------------------------------------
stable or mainline(開発版) のどちらかを選択し、

とりあえず、websocketを試したいので、開発版を選択。

yum install nginx
で、無事インストールできた。


自分のドメインを追加するとエラーが出るので、
/etc/nginx/nginx.conf に
server_names_hash_bucket_size  64;
を追加。 (今のところ何なのかはわかってない)

あと、デフォルトで、
uwsgi_params とかfastcgi_params が用意されてるので、
そのうち使ってみる。

2012年8月28日火曜日

aws 触ってみた

Amazon EC2 料金表

Available Instance Types (メモリ、CPU、ネットワーク帯域)

クラウドサービスなので、CPUがどの程度の能力なのかわかりにくい。
一応、マイクロインスタンスを1とした基準となっている。
また、cpuinfoなどで、物理的なCPU情報を確認できるので、使っていくうちに、感覚的にわかってくるはず。
CPUの能力はECU という単位で表記されている。
(かなり、ざっくりしたものだけど)

Webサービス用に使えそうなインスタンス
インスタンス名メモリCompute UnitsCPUNetworkAPI Name
マイクロインスタンス
エクストララージ615 MiBUp to 21Very lowt1.micro
High CPUインスタンス
エクストララージ7 GiB208 (2.5 ECUs each)Highc1.xlarge
スタンダードインスタンス
エクストララージ15 GiB84 (2 ECUs each)Highm1.xlarge
スタンダードインスタンス (第2世代)
M3エクストララージ15 GiB134 (3.25 ECUs each)Moderatem3.xlarge
M3ダブルエクストララージ30 GiB268 (3.25 ECUs each)Highm3.2xlarge

マイクロインスタンスは1年間無料なので、開発、ステージング用。
2012年12月 スタンダードインスタンスの第2世代(M3)が追加。パフォーマンスは約5割り増し


SDK (HTTPのWebAPI)
Python (boto)
Ruby
PHP
Javascript (サーバーサイド、ブラウザ上でもOK)

仕方ないが、PHP (Javaも)に力を入れていて、PythonSDKはコミュニティーで開発されている感じでしょうか。 (WebAPIなので、あまり問題ではないかもしれませんが)


勝手に感想

AWSの強み
短時間の使用では、コスト面で圧倒的に有利
全ての操作をAPI経由で実行できるので、サーバーを準備する時間を大幅に減らせる。

弱み
インスタンスのCPUパワーが結構、貧弱。
長時間のサーバー運用では、おそらく割高になる。


・特定の時間だけ、特定の時期だけサーバーが必要な場合
・最初から、多数のサーバーを用意する時間(お金?) が無い場合
には、特に力を発揮するサービスだと思います。

・先日(2012年12月)、ニフティークラウドを少し触らせてもらえる機会がありました。
サーバーインスタンスとロードバランサーしかない状況ですが、料金的には、いいかんじにおさまりそうでした。 (料金表ではAWSより割高ですが、CPUはそんなに非力ではなさそうだったので)
あと、ネットワークではどこにも負けないといっていました。(プロバイダーですしね。)




2012年7月29日日曜日

remi, epelリポジトリの追加

epelを追加
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
http://dl.fedoraproject.org/pub/epel/6/からepel-release-6xxx.rpm をインストール
時々数字が上がってアップデートされるので、目視確認。

remiを追加
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm


PHP5.4 を入れてみる
yum install php-mbstring php-devel php-common php-cli php-mysql php-pear php php-pdo --enablerepo=remi-test,remi

MySQL5.5
yum --enablerepo=remi install mysql-server mysql-devel mysql mysql-libs


とうとう、PHPをやることになった。
2012年夏

2012年5月21日月曜日

cross join

いままで、cross joinなんて何のためにあるのかと思っていました。
しかし、その威力に驚いた。 (半年前の気持ち)


inner joinってのは、cross joinの特例であるということ。

普通は、idでjoin して、正規化されたテーブルをくっつけていく。
これはこれで、全うな、意味のある結果を取り出せる。

たとえば、日付ごとのデータがある場合、日付でcross joinした物をサブクエリで
利用すると、日付ごとの累積データが出せたり、特定の日付までの最大値が
出せたりと、かなり使える。

join の後に、onを付けなければ、世界が広がる。
(いや、corss joinも条件を付けなきゃただの直積でおわる)

ただし、PostgreSQLでは、結構なパフォーマンスで使えるが、
MySQLでは、あるレコード数になると、極端に遅くなる。

インデックスのせいなのか、joinのパフォーマンスが悪いのか?
自力では特定できず、あきらめた。
MySQLもそこそこ自信があったけど、ダメだった。

よくわからない、エントリーでどうしようもないので、とりあえず終わり。