fc2ブログ
プロフィール

けい

Author:けい
公開したWebサービス・アプリ一覧はこちら

※2014年12月、私が個人で開発したWebサービス・アプリへの
累計アクセス数は8億を超えました。
負荷対策頑張ります。日々精進していきます!!


■■■ 業務経歴 ■■■
社会人1年目:携帯電話開発。画面周りを1年間
2年目 :海外向け携帯電話ミドルウェア開発
     ブラウザとプロトコルスタック周り
2年目後半~:携帯電話の通信専用チップ開発
3年目:カーナビ。画面周りの開発
3年目後半~:BDビデオカメラ
     組み込みLinux カーネルと
     ドライバの開発。
4年目12月:プロジェクト途中で退社
~ここまではC、またはC++で開発~

~ここからJavaがメインの開発~
4年目1月:Web系の会社に転職
       ~4ヶ月間の研修
5年目5月:製造業向け生産管理システム開発
6年目9月:証券会社向けシステム開発
7年目10月~携帯電話向けコミックサイトの運用・開発
8年目12月:プロジェクト途中で退社

~ここからPHPがメインの開発~
8年目1月~仲介手数料が無料の不動産屋の社内SEに転職
交渉しほぼ完全に裁量労働が可能な立場になる。
業務内容はシステム全般ですが、
最近はSEO対策の作業が多いです。
現在14年目 まだ、しばらくはこの会社に居るつもりです。

あと、全ての記事がリンクフリーです。

最近の記事

過去ログ

全ての記事を表示する

全ての記事を表示する

カテゴリー

FC2カウンター

RSSフィード

BBモバイルポイントの自動再接続ツールなんかをひっそりと公開しています。

タイトルどうり。せっかく契約したBBモバイルポイントがあまりにも不安定すぎるので
むしゃくしゃしてやった。それなりに安定して動いたので2chで配布した。今はビクビクしている。

ダウンロード(Ver 0.2 2009/09/01 更新)

Q:どんな場合に使えるの?
A:BBモバイルポイントで頻繁にログイン画面に飛ばされてしまうアクセスポイントの場合に有効です。
  頻繁に無線自体が切断されてしまうアクセスポイントではこのソフトを使っても意味がありません。

使い方
ActiveRubyのインストール(インストール済みの人は不要)
②接続バッチ.bat をメモ帳で開く
③ユーザー名とパスワード、アクセス先URLの箇所を編集する
 (アクセス先URLで指定したURLに毎秒アクセスを行います。
 空白にした場合にはデフォルト設定として毎秒私のサーバーにアクセスしにいきます。)
④保存して、接続バッチ.batを実行する。

プログラムがやっていること
 毎秒、アクセス先URLにアクセスを行い
 BBモバイルポイントに転送されたら、
 プログラムが自動でログインを行うというもの。

ActiveRubyについて
 ActiveRubyについては詳しく知りたい方は以下のURLを見てください
 http://arton.hp.infoseek.co.jp/indexj.html

今後について
 2009年8月時点では動作確認ができておりますが
BBモバイルポイントの契約を作者が止める予定なので、
その後の開発は継続できません。ご了承ください。
スポンサーサイト



コメント(0)   2009.08.27    [ Myカテゴリ:技術の話 ]

【仮想化】OpenVZが素晴らしすぎる件について

どうも。けいです。
現在サーバー復旧中です。
復旧ついでといっては何ですが、いくつかのお行儀の悪かったソフトウェアを
仮想環境で起動させるように変更しています。

以前まではパフォーマンスを重視していたため
VMWareやVirtualPCのような低速な仮想化からは大分距離を置いていたのですが
最近の仮想化は随分状況が異なってきているようです。

VMWareやVirtualPCを使っていたときは、大体30%程度動作速度が落ちており、
メモリ・HDDの使用量もネイティブで動かすときよりも多めに見積もる必要がありました。
そのため、リソース的にはなかなか厳しいものがありました。

その後、Xenのような準仮想化が可能なソフトウェアが登場し、
仮想化の大本命と絶賛されたものです。
そして、近年OpenVZのようなOSレベルの仮想化ソフトウェアが注目されています。
私は使ってみるまではOpenVZのようなOSレベルの仮想化ソフトウェアには
懐疑的だったのですが、
OpenVZのことを、 chroot + jail にいくつかの規制を加えたものだというように説明されたときには
「・・・仕組み的にも最もシンプルだし、それでいいじゃん」と妙に納得してしまいました。
仮想化するメリットはいくつかありますが、多くの場合、OSレベルの仮想化で十分なはずです。
また、使い方次第では驚くような利点があることがわかります。

【従来の仮想化の問題点】
OpenVZは従来の仮想技術とは違い、複数の仮想OSを起動したとしても使用するカーネルは一つです。
これにより今までと何が変わるのかというと、
従来では仮想OSのカーネル+付随する環境自体がメモリを使ってしまうため、
仮想OSでありながら、複数のアプリケーションを仮想OS上で動かす場面が多くありました。

例えば従来の方法で以下のような仮想システムを組んだとします。
仮想OS1:カーネル+必要なプロセス&スワップ(200MB) + Apache(128MB) + Tomcat(256MB) + MySQL(256MB) = 合計840MB
仮想OS2:カーネル+必要なプロセス&スワップ(200MB) + メールサーバー(128MB) + DNSサーバー(32MB) = 合計360MB

この構成では仮想OS上のApacheが下品な落ち方をした場合(OSを巻き込んで落ちた場合)
TomcatやMySQLも使えなくなってしまいます。
よりよい構成を求めるならば、全てのアプリケーションを仮想OSに分けるべきです。

しかし、もし仮に分けた場合には、
カーネル+必要なプロセス&スワップ(200MB)がアプリケーションの数だけ必須となってしまうため
200MB * 5(アプリケーションの数)で合計、1000MB分もとられてしまうことになり、
アプリケーションが多くなればなるほどリソース的に圧迫されるものでした。
そのため、複数のアプリケーションを仮想環境で動かさなければならないという状況が
現実的には多かったのです。

また、見積上では仮想OS1のメモリ使用量は840MBとなっていますが、
実際には相当数のアクセスがない限り、これほど多くのメモリは使いません。
しかし、実際に仮想OSを作成する場合のメモリ使用量は何かあったときのために
多めに見積もっておくのが普通でしょう。
そして、従来の仮想化では仮想OSの840MBは占有されてしまい
ネイティブのOSのリソースがごっそりと取られてしまいます。

->OpenVZならばこれらの問題を解決することができます。
OSレベルでの仮想化であるため、「カーネル+必要なプロセス&スワップ」は
ほとんど無いに等しいからです。
試しに最低限の仮想OSを作成しプロセスを見てみました。

# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 1980 692 ? Ss 05:01 0:00 init [2]
root 342 0.0 0.2 1692 620 ? Ss 05:01 0:00 /sbin/syslogd
root 349 0.0 0.3 5272 1024 ? Ss 05:01 0:00 /usr/sbin/sshd
root 367 0.0 0.3 2036 876 ? Ss 05:01 0:00 /usr/sbin/cron
root 379 0.0 1.0 8016 2704 ? Ss 05:09 0:00 sshd: root@pts/0
root 381 0.0 0.5 2760 1492 pts/0 Ss 05:09 0:00 -bash
root 428 0.0 0.3 2296 896 pts/0 R+ 05:42 0:00 ps aux

initの次はもうサービスです。
最小限の環境ならば10MBもあれば十分でした。

#top
top - 05:46:49 up 45 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 7 total, 1 running, 6 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 262144k total, 8940k used, 253204k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 1980 692 592 S 0 0.3 0:00.00 init
342 root 20 0 1692 620 508 S 0 0.2 0:00.00 syslogd
349 root 20 0 5272 1024 668 S 0 0.4 0:00.02 sshd
367 root 20 0 2036 876 704 S 0 0.3 0:00.00 cron
379 root 20 0 8016 2704 2224 S 0 1.0 0:00.12 sshd
381 root 20 0 2760 1496 1184 S 0 0.6 0:00.00 bash
429 root 20 0 2256 1060 872 R 0 0.4 0:00.00 top

これだけリソースの消費が少なければ、
アプリケーションごとに仮想環境を割り当てることが十分可能です。
また、従来のように仮想環境に
メインOSのリソースがごっそり奪われるということはありません。
例えば、2Gのメモリが乗っているマシンに、
2Gのメモリを割り当てた仮想環境を複数起動したとしても
まったく問題なく動きます。
その他、ゾンビプロセス問題などが発生しても、アプリケーションごとに
システムが分かれているために、再起動もやりやすくなります。

ここまでいいことづくめで書いてきましたが、残念ながら
全てのアプリケーションが仮想化できるわけではありません。
仮想化できなかったソフトウェアもいくつかあります。
それは特定のデバイスの使用を前提に作成されたソフトウェアなどです。
例を挙げるなら、OpenVPNやAsteriskで使用するzaptelなどです。

/dev/ 以下の使用を前提としているため
OpenVPN だと /dev/net/tun が無ければ動作をすることができません。
そのため、私の環境ではいくつかのアプリケーションはメインOS上で動作させざるを得ませんでした。
理想としてはメインOSではSSH とOpenVZだけをサービスとして提供させたかったのですが、
致し方ないところですね。

※2009/09/13
一ヶ月以上使用してみたのだが、予想以上に特定のデバイスに依存しているソフトウェアが多い。
ハードが低速だった頃に作られたソフトウェアの多くが
「カーネルに組み込むことも出来るし、組み込まなくても動かせる」 という作りになっているため、
わざわざカーネルパラメータを取得しに行ってしまい、FATALエラーになるとか・・・
NFSやsambaのsmbfs, cifsなんかも、OpenVZ上で動かすのは手間であるし情報も少ないので、
OpenVZ上で動かす場合特有のトラブルを覚悟しなければなりません。
コメント(0)   2009.08.03    [ Myカテゴリ:技術の話 ]
Template Designed By
ぐらいんだぁ