2月 07

Osukini Cloudとは

クラウドサービス「Osukini クラウド」|クラウドならSaaSes

Osukini Cloudは日本ラッドが提供するSaas/Paasサービスのブランド「SaaSes」の1商品です。
Cloudと銘打ってはいるものの、サーバーのスナップショットイメージを保存して再利用したり、稼働済みのサーバーのクローンを立ち上げたりする、スケールアウト向けの機能はありません。

簡単に言うと、CPU・メモリ・ハードディスクを動的にスケールアップ・ダウンできる機能が付いたXenベースのVPSサービスです。
仮想サーバーの仕組みをそのままサービスにしたイメージです。

Osukini Cloudの使いどころ

上述のように急激なアクセス増が予想されるスケールアウト必至のサービスには向いていないので、使いどころとしては

  • 当面は低スペックで構わないが後々のアクセス増対応に不安
  • 既存の格安VPSでどのプランで契約していいかわからない

ようなケースが当てはまるかもしれません。

さくらのVPSが価格の割に品質がよく、満足できるVPSサービスだと思いますが、現時点でスペックが固定なので、もう少し高スペックで同様に低価格なサービスを探している方にはOsukini Cloudはおすすめだと思います。

スペックと価格

一般的なVPSサービスのようにプランごとにスペックが決まるのではなく、1プランでスペック変更が可能というところが特徴ですので、最低スペックで始めて運用しながら随時変更することができます。(スケールアップ・ダウンには再起動・サービスダウンが伴うようです。)

料金とスペックをまとめると以下のようになります。(全て月額)

  1CPU+1GB 2CPU+2GB 3CPU+3GB 4CPU+4GB
80GB ¥1,000 ¥2,200 ¥3,800 ¥5,800
160GB ¥1,900 ¥3,100 ¥4,700 ¥6,700
240GB ¥2,800 ¥4,000 ¥5,600 ¥7,600
320GB ¥3,700 ¥4,900 ¥6,500 ¥8,500

CPUとメモリは連動で、4×4の16パターンの料金体系があり、月途中でスペックを変更した場合は、その月で最もハイスペックだった料金が請求される仕組みです。
転送量に対する課金もありませんし、稼働時間に対する課金もありませんので、料金が非常に明確になります。

利用可能なOSは以下の通りです。

  • CentOS ver5.5 32bit
  • CentOS ver5.5 64bit
  • Ubuntu ver10.04 32bit
  • Debian ver5.0(lenny) 32bit
  • Debian ver5.0(lenny) 64bit
  • Debian ver6.0(squeeze) 32bit
  • Debian ver6.0(squeeze) 64bit

実際に使ってみて

現在、4CPU/4GB+80GB(¥5,800)、CentOS5.5 64bitのサーバーを3台契約しています。
ホームページ上では最短5分以内でスタートできると書いてありますが、1台目を契約した際は在庫がないとのことで、サービスの利用開始まで丸1日かかり、2台目・3台目は14、5分でした。必ずしも契約後すぐに利用できるわけではないので、注意が必要です。

参考までに、サーバーの基本的なスペック情報は以下の通りです。

システム情報

$ uname -a
Linux hostname 2.6.18-194.32.1.el5xen #1 SMP Wed Jan 5 18:44:24 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

CPU情報

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 9
model name	: AMD Opteron(tm) Processor 6128
stepping	: 1
cpu MHz		: 2000.154
cache size	: 512 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse
bogomips	: 5003.13
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc [6] [7] [8]

processor	: 1
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 9
model name	: AMD Opteron(tm) Processor 6128
stepping	: 1
cpu MHz		: 2000.154
cache size	: 512 KB
physical id	: 1
siblings	: 1
core id		: 0
cpu cores	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse
bogomips	: 5003.13
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc [6] [7] [8]

processor	: 2
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 9
model name	: AMD Opteron(tm) Processor 6128
stepping	: 1
cpu MHz		: 2000.154
cache size	: 512 KB
physical id	: 2
siblings	: 1
core id		: 0
cpu cores	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse
bogomips	: 5003.13
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc [6] [7] [8]

processor	: 3
vendor_id	: AuthenticAMD
cpu family	: 16
model		: 9
model name	: AMD Opteron(tm) Processor 6128
stepping	: 1
cpu MHz		: 2000.154
cache size	: 512 KB
physical id	: 3
siblings	: 1
core id		: 0
cpu cores	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse
bogomips	: 5003.13
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 48 bits physical, 48 bits virtual
power management: ts ttp tm stc [6] [7] [8]

メモリ情報

$ cat /proc/meminfo
MemTotal:      4194304 kB
MemFree:         67556 kB
Buffers:         59036 kB
Cached:        3588160 kB
SwapCached:          0 kB
Active:        2048284 kB
Inactive:      1838268 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      4194304 kB
LowFree:         67556 kB
SwapTotal:     8393952 kB
SwapFree:      8393880 kB
Dirty:            1064 kB
Writeback:           0 kB
AnonPages:      239332 kB
Mapped:          11304 kB
Slab:           115088 kB
PageTables:       8744 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:  10491104 kB
Committed_AS:   332088 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      4340 kB
VmallocChunk: 34359734027 kB

ディスク性能(Read)

$ sudo hdparm -Tt /dev/xvda3

/dev/xvda3:
 Timing cached reads:   9604 MB in  1.99 seconds = 4818.05 MB/sec
 Timing buffered disk reads:  340 MB in  3.01 seconds = 113.05 MB/sec

ディスク性能(Write)

$ dd if=/dev/zero of=/tmp/test.tmp bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 0.63945 seconds, 420 MB/s

$ dd if=/dev/zero of=/tmp/test.tmp bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.70829 seconds, 396 MB/s

最後に

運用して1週間程立ちましたが、スペック通り十分なパフォーマンスを安定して発揮してくれています。リプレース元のサーバーでは転送量課金もかかっていたので、だいぶコストを圧縮することが出来ました。

格安VPSではスペックがネックになって利用シーンが限られていたと思いますが、Osukini Cloudはスペックの自由度が高いので、格安VPSと専用サーバーの間の領域を柔軟にカバーしてくれる数少ない優れたVPSサービスだと思います。

Tagged with:
8月 19

Twitter Client Ranking by Streaming APIの構成は、
PHP5.3.3(with APC) + MongoDB1.6.1 + Apache2.2.3で、フレームワークにsyfmony1.4.6を利用しています。この構成が動く最低限の環境を構築した際のメモです。
さくらのVPSはサービスはほとんど入っていませんでしたが、gccやautoconfは既に入っていました。

#Apache
sudo yum install httpd.x86_64

#PHPのコンパイルに必要(パラメータによる)
sudo yum install httpd-devel.x86_64
sudo yum install libxml2-devel.x86_64
sudo yum install openssl-devel.x86_64
sudo yum install curl-devel.x86_64

#最新版PHP取得→コンパイル→インストール
wget http://ve2.php.net/get/php-5.3.3.tar.gz/from/jp2.php.net/mirror
tar vfxz php-5.3.3.tar.gz
cd php-5.3.3
./configure \
--enable-mbstring \
--with-apxs2=/usr/sbin/apxs \
--with-curl \
--with-openssl \
--with-config-file-path=/etc  \
--enable-dom \
--with-libdir=lib64
meke
sudo make install

#symfonyのインストール
sudo pear channel-discover pear.symfony-project.com
sudo pear install symfony/symfony

#PHP拡張のインストール
sudo pecl install apc
sudo pecl install mongo

#PHP拡張の反映
sudo vi /etc/php.ini

extension = mongo.so
extension = apc.so
apc.enabled=1

PHPもRemiのリポジトリを利用すると簡単に最新版がインストールできますが、cli版がバックグラウンドで実行できない不具合があるのでソース版を利用しました。

参考

MongoDBをインストール

下記URLを参考にMongoDBのリポジトリを設定してインストールします。
参考:CentOS and Fedora Packages

sudo vi /etc/yum.repos.d/10gen.repo 

[10gen]
name=10gen Repository
baseurl=http://downloads.mongodb.org/distros/centos/5.4/os/x86_64/
gpgcheck=0

name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0

sudo yum install mongo-stable* --enablerepo=10gen
sudo yum install  mongo-10gen* --enablerepo=10gen

最新のstableバージョン1.6.1がインストールされます(2010年8月19日現在)最新のstableバージョン1.8.2がインストールされます(2011年7月21日現在)。デフォルトの設定は以下の通りです。
設定ファイル:/etc/mongod.conf
ログファイル:/var/log/mongo/mongod.log
データディレクトリ:/var/lib/mongo/

起動は起動スクリプトでOK

sudo /etc/init.d/mongod start

2011-7-21修正 yumリポジトリの修正。最新バージョンの修正。

Tagged with:
8月 17

はじめに

さくらのVPSをベータ*1として使わせてもらっているのに何もしないのはもったいない&申し訳ないので、Twitter Client Ranking by Streaming APIというのを、さくらのVPSのパフォーマンスとMongoDBのパフォーマンス・使用感をテーマに実験的に作ってみました。

TwitterのStreaming APIからツイートを取得、保存、解析してどんなクライアントが使われているかをランキング形式に表示するという単純なものです。

解析結果をブログで公開している例があるものの、なかなか直近で連続的なデータを公開しているところがなかったので、勢いで作りました。

さくらのVPS

さくらのVPSの仕様は以下の通りです。

メモリ 512MB
HDD 20GB
回線 100Mbps
OS CentOS 5 x86_64
グローバル IP アドレス IPv4 アドレス×1 個
データ転送量 無制限
管理者権限 root 権限付与

データを継続的に保存するのにHDDが20GBと心許ないので古くなったデータはどんどん削除していく必要がありそうです。一方でデータ転送量が無制限となっているので、APIからの取得に(料金的な意味で)気を使う必要はなさそうです。
OSは最新のCentOS5.5で、サービスはsendmailとssh以外は何も入っていないので、httpdなどを自由に追加して利用します。また、ポートはすべて公開状態なのでiptablesを設定、有効にすることも必要です。

Twitter Streaming API

Twitter Streaming APIのstatuses/sampleメソッドを利用します。sampleメソッドは公開タイムラインの1%未満がサンプリングされたデータとなります。実際にアクセスをしてみると1分間に350〜650ツイート取得でき、量にかなりムラがあることがわかりました。
HDDの容量を考えて、データはcronで6分毎に1分間取得することにしたので、サンプルは1/6%、全ツイートの約0.167%未満になりそうです。数日間取得してみたところ、1日で約10万〜12万ツイートをサンプリングできています。

MongoDB

MongoDBはドキュメント指向DBと呼ばれる仲間で、Key-Value StoreにRDBMSの色を少し足したようなイメージです。スキーマはダイナミックに変更できる一方で、SQLこそ使えないものの、where, sort, limit, group(by), max, min,などが用意されていて、RDBMSに慣れている人にもとっつきやすいと思います。
さらに、スケールアウトを容易にするSharding機能を標準装備していて、分散したデータベースから複雑な集計ができるMap/Reduceが利用できます。

RDBMSでDBやテーブルにデータを入れようと思った時はあらかじめCREATEしておく必要がありますが、MongoDBは必要ないので存在しないDBやコレクション(RDBMSでいうテーブル)にいきなりデータを投入してもエラーは出ず、コレクションやDBすらダイナミックに作られます。この辺りの挙動はファイル操作に近いので、日付ごとにダイナミックにコレクションを作ることもでき、今回のログの保管などの用途にも適しています。

日付ごとにコレクションを作り、値にはtimestamp, date, source, source_url, time_zone, utc_offset, langを保存することにしました。Sharding環境ではないのでMap/Reduceの力を発揮することもできないのですが、実験的な意味で、データの集計にはMap/Reduce*2を利用しています。

使い方

デフォルトは1日前のサンプリングしたすべてのデータが表示されます。そこから、日付、Lang、Time zone、UTC offsetで絞り込みすることで様々な形で抽出することができます。
例えば、「8月12日のツイートの中から東京(time_zone=Tokyo)で日本語(lang=ja)のツイートをするのに利用されているクライアント」などを抽出・集計することができます。

ランキングだけでは味気ないので、TOP10を円グラフで表すのと、各クライアントが時間ごとにどのくらい利用されているのか3つまで比較出来る機能を用意してみました。住んでいるところやクライアントの種類で利用されている時間外が全然違うのがわかります。

現状、なかなかもっさりとした感じなので、イライラするかもしれません。
実験なので、負荷の問題でサービスを終了するかもしれませんし、逆に、作っただけではなくMongoDBのTipsやチューニングなどで改善し、それをさらにネタにして行きたいとも思っています。

*1 7月15日〜8月31日までクローズドベータとして会員限定でプレリリースされたホスティングサービス。2010年9月1日から初期費用無料、月額980円の「さくらのVPS 980」として正式リリースされる。

*2 今回の実験ではmapReduce()よりgroup()を使った集計の方が速度が速いことが多かったので、当日分のリアルタイム集計ではgroup()を利用しています。mapReduce()の結果は新しくコレクションとして保存することができるので、過去分に関してはmapReduce()で抽出→コレクションとして保存→そこから再集計という実装にしています。

Tagged with:
preload preload preload