Entries from 2009-01-01 to 1 year

linodeがネットワーク的に近くてびびった件

linodeというより、Hurricane Electronic ががんばってるんだろうけど。このホップ数はビビった。 $ traceroute 74.207.***.*** traceroute to 74.207.***.*** (74.207.***.***), 64 hops max, 40 byte packets 1 eM60-254-***-*.emobile.ad.jp (60.254.***.…

HA構成と復旧作業時間と信頼性

2台でHAノードを組んでいて1台が落ちた場合に、何時間以内に再度2台構成に復帰させる必要があるのかなーと思って、ちょっと計算してみた。ノード毎の障害発生の確率が独立であると仮定すると、 $ perl -le 'print exp(log($ARGV[0])/(365*24))**$ARGV[1]'…

Re hbstudy #4 での OpenVZ の話 (ARP response が遅い件について)

hbstudy #4 で id:fujya さんが OpenVZ についてお話されました。FreeBSD の jail 大好きっこだった自分も OpenVZ を使っているので、興味深く拝聴させていただきました。ありがとうございました。(スライドは Open VZ)。その中で、 「venetを超えてrt_cache…

perlの文字列結合におけるpreallocもしくは事前のSvGROWの効果

多少あるのかも。 use strict; use warnings; use Benchmark qw(:all); my $t = "hello world! hello world! hello world! hello world!\n"; my $rep = 100; my $prealloc_s = $t x $rep; cmpthese(100000, { default => sub { my $s = ''; $s .= $t for 1..…

HTTPプロトコルパーサのオーバーヘッドは18%以下という話

「テキストプロトコルは遅くないよ」という話 - kazuhoのメモ置き場に関するの具体的な話。Kazuho@Cybozu Labs: 「サーバ書くなら epoll 使うべき」は、今でも正しいのかを書く際に自作したベンチマークツールがあるのですが、それを使ったベンチマーク結果…

Plack::Server::Standalone(::Prefork) の ToDo

REQUEST_METHOD が HTTP/1.0 に規定されているものかチェックしていない チェックすべきだろうか HEAD リクエストが来た際に、レスポンス entity-body を消すような処理はしていない すべきだろうか REQUEST_URI が / から始まるか確認していない HTTP/1.0 …

「テキストプロトコルは遅くないよ」という話

「バイナリプロトコルは速い」「テキストプロトコルは遅い」という言説を、ときおり目にするけど、それって本当なのか。個人的には、それって昔の話だと思ってる。SMTP みたいな、ペイロードについてもターミネータ(とエスケープ)を使うプロトコル*1は確か…

(Min|Max)SpareServers にかわる prefork モデルを考えてみる

そもそも動的にプロセス数を変化させることができて何がうれしいか、というと、負荷が軽い時に、別のタスクを動かしても、アイドル状態のサーバプロセスが邪魔にならない。ってあたりなのかな。でもそのため(だけ)に Scoreboard とか複雑な仕組みを用意す…

C/C++に文字エンコーディングバリデーション機能がないって、ほんと?

通りすがり (2009-09-16 18:09)> PHP以外の言語は「(略)」のに対し ここに挙げられている言語がWebアプリで使われる全ての言語ではない。 例えば、CやC++にはない。付け足せば、PHPやPerlなどのCモジュール内部で起こった不正な文字はスルーされうる。 よっ…

「Linux-DBシステム構築/運用入門」がすごい - あなたのシステム、ガラパゴス化していませんか?

松信さんがやってくれました。ずいぶん前からデータベースの「正しい」構築と運用方法についてまとめた本はないかなーと思ってました。自分はこれまで、様々なネットワークアプリケーションのプログラミングやデータベースの設計、チューニングを行ってきて…

HTTP::Parser::XS - a PSGI compatible, fast http parser

んー、と思って、書いた。GitHub - kazuho/p5-http-parser-xs: a fast http parserBLURB は、 PSGI のリクエストオブジェクトを返す 高速 同期 httpd, 非同期 httpd のどちらを実装する際にも使用可能 POST コンテンツのハンドリングはご自分で いったんファ…

apache の mod_cgi のヘッダハンドリング

値が空のヘッダもセットする 同一名のヘッダが複数回出現した場合は ", " で結合する 複数行ヘッダの値は、2行目以降は先頭の空白を含む形で結合する よって、 Foo: Foo: [SP][SP]abc [SP]de Foo: ehの場合の環境変数 HTTP_FOO は、 ,[SP][SP][SP]abc[SP]de…

アプリケーションサーバで非同期処理をするかしないかの分水嶺

mala さんのまとめは、わかりやすいなぁと思いました。ただ、傍論なんですが、 既存のマルチスレッド/マルチプロセスのサーバーで、常にリクエスト処理待ちの待機しているプロセスがある状態の場合は(+その並列数でCPUのパフォーマンスが劣化しない場合は)、…

FastCGI プロトコルってなんのためにあるのかわからない

どういう場合に便利なんだっけ。てか HTTP プロトコルでいいじゃんみたいな。たとえば httpd とアプリケーションサーバを分割するような環境なら、apache + fastcgi external server みたいな構成よりも、apache (mod_proxy + mod_proxy_balancer) + apache …

memcachedのクライアントライブラリに対する不満

Cache::Memcached, libmemcache, Cache::Memcached::Fast, libmemcached, Cache::Memcached::libmemcached あたりを見たけど、primitive なインターフェイスが公開されてなくて、mycached のシャードへアクセスするみたいなケースだと使えないなーという感じ…

メモ: Error.pm でサブクラス化した例外を投げる

例外を投げるときは $obj->throw。ベースクラスは Error::Simple。 try { MyException->new("hello world")->throw; } catch MyException with { my $e = shift; print "$e\n"; }; package MyException; use base qw(Error::Simple); みたく書く、色々教えて…

ユーザーフレンドリな assert() の使い方

assert(fd < picoev.max_fd); みたく書いてると、assertion が失敗した場合に表示されるエラーは、 Assertion failed: (fd < picoev.max_fd), function parse_hoge, file ..., line 15.のような形になる。でもこれだと、何をチェックしているのか、ライブラ…

MySQL に memcached プロトコルサポートを追加してみる

ソース: http://coderepos.org/share/browser/platform/mysql/mycached/例によって UDF (笑) として書いてみてるところ *1。大体2倍速。対応してるのは gets? コマンドのみ、かつ、INT 系のプライマリキーのルックアップのみ。こんな感じで動いてる。 $ ech…

Test::mysqld で Q4M のテストを書く方法

yappo perl, test, memcached Test::memcached もほすい Test::Q4M もほすぃ Test::Pg もほすい はてなブックマーク - yappoのブックマーク / 2009年8月10日 Test::Pg は書いた。memcached は個人的に需要がない。Q4M のテストなら、こんな感じで書けます。 …

PostgreSQL のデーモンが起動中に、別のインスタンスを作成することってできないのかな

Test::mysqld みたいなのを作る必要があって、試してみたんだけど、postgres が起動中に initdb を実行すると、 $ /opt/local/lib/postgresql-devel/bin/postgres --version postgres (PostgreSQL) 8.4devel $ /opt/local/lib/postgresql-devel/bin/initdb -…

シングルマスタ/マルチスレーブ構成に興味がない理由

システム全体で必要な書き込みパフォーマンスが、RDBMSノード1基の IOPS の W% の場合、シングルマスタ+スレーブn台構成のシステム全体のパフォーマンスは、 書き込みパフォーマンス: W 読み込みパフォーマンス: R=(1-w)*(n+1) になる。この n=R/(1-w)-1 っ…

xtrabackup を src.rpm からインストールするメモ

前提: xtrabackup は mysql にパッチあてて make するのでソースからのインストールは大変 でもバイナリパッケージは x86_64 しかない そこで、それ以外の RedHat 系環境では src.rpm とかからインストールする 手順: ccache をインストール xtrabackup-0.…

海外のクラウド環境と国内のVPSを比較検討してみた

Amazon EC2 や Rackspace Cloud Servers を色々調べていて分かったこと。国内の比較対象は、仕事や個人で使っている WebARENA SuitePRO と CPI VPS スケーラブルプラン。まず、価格について。国内の VPS は、転送量に関わらず価格が一定なのに対して、EC2 や…

OpenVZ系の環境でプロセスの使用メモリ量を節約するライブラリを書いた

以前、 スワップがなく、かつ、overcommit が効かないので、いろいろ動かない。apache 2 系の worker mpm とか標準設定だと起動時に 500MB 確保するので当然起動すらしない。もう LD_PRELOAD で malloc を MAP_SHARED な mmap(2) にマップする共有ライブラリ…

続: C++で仮想メンバ関数テンプレートを使いたい話

C++ で仮想メンバ関数テンプレートを使いたい - kazuhoのメモ置き場 の続き。結局、関数の引数によるコンパイル時の多態性 (m) と、仮想関数による実行時の多態性 (n) を組み合わせようとした瞬間に、メンバ関数テンプレートが使えなくなって、必要な定義量…

C++ で仮想メンバ関数テンプレートを使いたい

class Base { public: template <typename T> virtual void print(const T& v) { ... } }; class Derived : public Base { public: template <typename T> virtual void print(const T& v) { ... } }; とか書きたい (けど動くわきゃない)。どうやれば書けるんだろうと思って、 #inclu</typename></typename>…

任意のイテレータを抽象型にラップするイテレータを書く話

C++ で仮想メンバ関数テンプレートを使いたい - kazuhoのメモ置き場の件、id:moriyoshi さんからトラックバックをいただきました。ありがとうございます。 それにしてもこの 2 つは本当に水と油だね。typeinfo 見てディスパッチする、というのがばっちりはま…

JavaScript で任意の漢字にマッチする正規表現を書く

重箱の隅で恐縮ですが。弾さんは (function(e){ e.innerHTML = e.innerHTML.replace( /東京都?([\u3200-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]+)/g, '首都$1東京' ) })(document.body)漢字を判定する正規表現が工夫のしどころでしょうか。[一-龠]はUnicode時代…

Q. UTF-8 の冗長性問題は、設計上の問題なのか?

UTF-8 は、逆方向へのスキャンが可能、バイナリ比較の結果が UCS と同じ、といった特徴をもつ一方、冗長なエンコーディングが可能という欠点をもっている。では、前者の特徴を活かしたまま、後者の問題をもたないエンコーディングを定義することはできるだろ…

STL のコンテナとか std::string の thread safety

SGI STL のマニュアルには、 The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads acce…