sennaの副作用
sennaのmysqlバインディングのお陰で、mysqlのコードをより深く追求するモチベーションが増えたという事は、検索技術の発展に匹敵するくらいの良い結果が出てる気がする。
mysqlもソースファイル多いけど要領が分かればapache並に見ていける物ですね。
sennaのmysqlバインディングのお陰で、mysqlのコードをより深く追求するモチベーションが増えたという事は、検索技術の発展に匹敵するくらいの良い結果が出てる気がする。
mysqlもソースファイル多いけど要領が分かればapache並に見ていける物ですね。
'07。10。26のTech-RD MTGでの内容である Net::Stomp - ActiveMQで
Message Queueの話。
もともと、Sennaに気合入れるはずだったのに、なんだかへんだったので
K国のD社のLさんから"Net::Stompをしらべて見たら?"といわれた!
で、CPANで検索して Module Install.
daemonとして、activeMQっていう Apache Software Foundationのものがいいと言われてそれをInstall. ベースはJAVAなんで JDK必須かも(いつのまにかInstallされていたのかな)
1. activeMQを立ち上げて
2. Stomp Clientを書く
#!/usr/bin/perl
# stomp.pl
use Net::Stomp;
my $stomp = Net::Stomp->new( { hostname => 'localhost', port => '61626' });
$stomp->connect( { login => 'rotfl', passcode => 'orzorz' });
$stomp->send({ destination => '/queue/foo', body => "This is Sparta~!!!" });
$stomp->disconnect;
こんなスクリプトを書いて perl stomp.pl やってみると!!!!!
.
.
.
.
なにもでてこない。activeMQにはなにもかわったことないらしいし。
で、CPANのTutorialをみると
#!/usr/bin/perl
# stomp_sub.pl
use Net::Stomp;
my $stomp = Net::Stomp->new( { hostname => 'localhost', port => '61626' });
$stomp->connect( { login => 'rotfl', passcode => 'orzorz' });
$stomp->subscribe(
{ destination => '/queue/foo',
'ack' => 'client',
'activemq.prefetchSize' => 10
});
while(1) {
my $frame = $stomp->receive_frame;
warn $frame->body;
$stomp->ack( { frame => $frame });
}
$stomp->disconnect;
こんなものがあり、なにかと思ったら
前のがMessage Sendで これがMessage Receiveっていう感じ?
/queue/fooでどんどん貯まってる "This is Sparta!!!!!!"がどんどん出て来る!
これで、"あーできるんだ"で終りではないんでしょう?
ちょっとやってみよう!
.
.
.
.
あとで....
TECHメールに投げたのをブログにもちゃんと書いて見よう。
もちろん Slashdotからのなんの許可ももらっていないので、
言われたら消すモードで...
-------------------------------------------------------------------------------
Slashdot's Hardware 構成
- California Bay Areaにある Savvisっていう所でLevel-AデータセンタのHostingを受け、Networkは二つの Gigabit Uplinkを持っている
- CentOSとLVSを使う P4 Xeon 2.66Ghz, 2G RAM, 2x80GB IDEの負荷分散システム x 2。
- ReadHat 9を使う16台の "Web Server (2 Xeon 2.66Ghz, 2G RAM, 2x80GB IDE )"で構成、全部 2 Xeon 2.4Ghz, 2G RAM, 4x36GB 15K RPM SCSIのスペックの NFS Server Volumeを NFSに Mountする
- 2 Dual Opteron 270, 16GB RAM, 4x36GB 15K RPM SCSIスペックの DBサーバーが CentOS4で運営
1台のWriteができるDBを中心にして、他は Readonly専用のDBサーバーに replicationする構造
Readonly専用のDBサーバーは 2 Dual Opteron 270, 8GB RAM, 4x36GB 15K RPM SCSIのスペックをもっている
Slashdot's Software 構成
- HTTP Requestは pound(http://www.apsis.ch/pound)っていう reverse proxyで入り、これはどのWeb Serverへ渡すかだけを決定
- poundはトラフィックを Apacheで運用してる 16台の Web Serverへ送る, 1台は HTTPSを処理、他は一般処理をする
- 15台のWeb Server中 2台は 静的ページ, 4台は 動的ページ, 6台は動的コメントページ, 3台は他の動的スクリプト(ajax, tag, bookmarks.. etc..)に対応している
こういう風に分離した理由は性能と特定ページがのDDos攻撃を受けているときに他の部分はちゃんと動作を保障するためだと...
- httpd Level CachingとMaxClients Tuningなどは効率性の理由で分離 => Web Serverの負荷は RAMではなく、CPUだから
- MaxClients値(動的 5-15, 静的 25)はなんかおかしいと思われるがSlashdotではRequestをはやく処理しなきゃ、もっと大幅のRequestがもっと早くCPUの性能を食うからだと
- Apacheはまだ 2.0へUpgradeする理由がないのでApache 1.3を使ってあり、 mod_perlとlingerdをコンテンツ伝達の時 RAMの解除保障のため使う(?)
- bot対応のため mod_auth_useragentの様な非標準モジュールを使ってる
- Slashっていう Slashdotを運営する Perl Opensource Codeを使ってる
(http://slashcode.cvs.sourceforge.net/slashcode/slash/)からダウンロード出来る。
- DBへのアクセスは Slashの SQL API(DBD::mysql, DBIを継承したSlashDot 専用)
Apache::DBIを使わず、 connect_cached(http://search.cpan.org/~timb/DBI/DBI.pm#connect_cached)を使う
だが、実はメイン Connection Cacheは Connectionを維持するオブジェクトで、サイズが大きくないデータはこういうオブジェクトから使われる
- 絶対 statementハンドルは使わない。 11個の方法のSELECTと他の方法で結果を操作して Perl Data Structureからもらう(?)
- placeholders((http://search.cpan.org/~timb/DBI/DBI.pm#Placeholders_and_Bind_Values)は使わない。
- Replicationを使う
- memcachedを使う(? bolt-on)。試しにmemcachedを使う時, 三つの大きいデータタイプ(users, stories, comment text)のCachingでスゴいPerformanceを味わった。
そしてCachingがこんなことにメリットがあることをちょっと確信した。
Memcachedのメインで使うのはデータオブジェクトを得たり、設定したら(set/get)すること、 だからかな? SlashはBottleneckとかはまったくない。
- ALTER TABLEの使わないように。。。
------------------------------------------------------------
大体、このぐらいに....
Low costのDB Serverでも ちゃんとコード書いて、 Memcachedと OpensourceのDB Softwareと Moore's Law(ww)があればかなり大きいサイトを作れると...
そしてSlashdotのメインソングを紹介!
まー slashdotは .comではなく .orgですけど...;
http://meta.slashdot.org/article.pl?sid=07/10/22/145209