2008/04/30(水)「Googleを支える技術」を読んだ気分になる要点

はてなのnaoyaさんのところで見かけて購入したこの本。あれだけ巨大なシステムがどうやって動いているのか、興味深いところが解説されていてとても面白かった。

よくあるサーバの考え方

よくC10K問題といってクライアントが1万人を越えた途端、どんなシステムでも耐えられなくなると言われています。この先をどうやって維持していくか。はててやmixiなどでは、

  • DNSによるサーバグループの切り離し(障害発生時)
  • リバースプロクシによる負荷分散
  • データベースレプリケーションによる負荷分散、障害対策

普通サーバと言えば、とりあえずRAIDをして、電源ユニットを冗長化して、とにかく基幹システムが壊れないように構成します。基幹システムが落ちなければ、サブシステムは基幹システムによって障害対応しようというものです。

Googleの考え方

システムは、普通のPC(それもハイパフォーマンスPCではなく、コストパフォーマンスのいいPC)を使います。メモリもそこそこ、HDDはIDEディスクです。ネットワークは100Mbpsや1000Mbpsの普通のLAN。

その代わり、マシン台数を増やすことで徹底した負荷分散を行います。

しかしこれ、言うのは簡単ですが実際どうするのか。Googleのもっとも優れたところは、このような負荷分散システムを作り上げたところにあります。

ファイルシステムやデータベースシステムなどは「実に単純な機能」を効率的に実装します。例えば、GFS(Google File System)にはファイルの読み込みと書き込みの機能はあってもオフセットを指定して書き換えたりできないそうです。必要なら読み出して再度書き込むべしという具合です。

書き込みは多くのPCに分散・冗長化して行われ、障害発生時の切り離し対策を何重にも行って対応します。逆に言えば障害対策はすべて「障害発生PCの切り離し」によって復旧するということを徹底して行っています。

そして基幹システムの Chubby は、どれかが特別に優先するわけではなく、複数マシンによる合議制によって作られていて、半数以上のマシンが停止しない限りシステムが稼働し続けるように作られています。

まるで本を読んだかのように自慢できる、要点

  • PCの中身は冗長化しない
  • PCの数を用意するだけで冗長化・障害対策できるシステムを構築する
    • コピーを複数作り障害が起きたら自動的に切り離す
    • 早急に別の新マシンを起動させデータを自動的にコピーする
  • PCの数を用意するだけで性能が向上するようにシステムを構築する
    • 大きなデータは複数のブロックに分割し、手分けして処理をする
    • このような手分け処理をシステム化(ライブラリ化)する

asin:4774134325

2008/04/22(火)作業中

オーディオカード Prodigy 192VE

192VEのチップ出力抵抗、DAC/ADCまわりのアナログ電源コンデンサ交換と回路変更(ノイズ対策)をしました。SE-U55SX(改)と同等の音質。もしかしたら越えたかも? という感じになりました。ついでにADCまわりも強化して録音品質向上に挑戦。

結果、またも原形留めてない説(笑)

「SE-U55SX(改)があるのになぜ?」という疑問もあると思いますが、結局のところProdiy(AudioTrak)はソフト(ドライバ)がとても使いやすいという一点に尽きます。裏を返せば…ry

USB-DAC

PCM2901 DACの録音部分の回路を作ろうと思ったのですが、録音ボリュームを付けようかどうか迷っています。下手なボリュームつけると劣化するし、かといってWindows側からの録音制御もまったく効かない状況ですので、困ってしまいました。

ボリュームは諦めるかな……。

FETヘッドホンアンプ

このサイトで一番人気なコレですが、次期バージョンのため色々調査していると面白いことが分かってきました。

  1. 初段が無い方が音が良い*1
  2. 3パラの出力インピーダンス4.5Ω駆動より、4パラにしたり出力抵抗を省いて、出力インピーダンス2Ωぐらいにした方が、わずかに音が良い。

(1)は今更すぎてみなさまに申しわけない感じですが、どうやらその傾向があります。

(2)については、出力抵抗による劣化などあらゆる要因を疑って聞き比べてますが、どうやら出力インピーダンスがまだ高いという結論に達しそうです。比較的インピーダンスの低い、40Ωヘッドホンに対して4~5Ωなら十分だと思ったのですが、細かい変化がまだあります。

現時点で調査中であり、確定的なことはまだわかりませんが、あの回路を作られた方の中で「試してもいいよー」という方がいましたら、(1)または(2)について個別に追試して感想を教えて頂けると嬉しく思います。((2)については発振の危険があります。特に、出力抵抗削除は高確率で発振します。)

  • どちらの要因か分からなくなるので、同時に実施しない方がありがたいです。
  • 聞き比べたヘッドホンを教えてください。
  • ハンダ熱を加えると電解コンが劣化しますので、数時間は放置してから聞き比べてください。*2
  • どちらもわずかな差ですので、違いが分からないことも多いと思います。

とにかく出力インピーダンスを下げるのは発振との戦い(もしくは出力抵抗16個という嬉しくない状況との戦い)。またブレッドボードでの調査かな…。*3

メモ

完全パラレル(全FETで出力抵抗共有)での試験@ブレッドボード

  • 4パラ 8V 0.22Ω×2+負荷 → 発振
  • 5パラ 16V 0.22Ω×2+負荷 + 電解コン(任意) → 安定
  • 5パラ 2V 0.1Ω →無条件に発振
  • 5パラ 16V 0.33Ω×2 → コンデンサに関わらず安定

発振させるには:電源にL成分、パラ数を増やす、電圧を上げる、出力抵抗を低くする。

安全性を鑑みて「4パラ/0.33Ω(0.47Ω)×2」。

*1 : ついでにオフセットも少ない

*2 : 変更直後より、何日かして何気なく聞いている方が違いが(あれば)分かりやすいかも。

*3 : ブレッドボード組は大変発振しやすく、安定性テストにはもってこい。

オペアンプの音質比較@Chu-Moy

はてブ数 2008/04/21電子::HPA

注意!! ここに書かれている情報は古くなっています。LM6172はあまり音がよくありませんし、OPA627より安価で良い音質のオペアンプがたくさんあります。


Chu-Moyヘッドホンアンプを使ってオペアンプの音質を比較しました。

関連記事

続きを読む

2008/04/21(月)PBLブラックリストの謎

某所に設置してある『固定IPを持ったメールサーバ』からメールを送信した際、ブラックリストに入っていると跳ねられてしまいました。

ブラックリストを調べるサーバ

http://www.spamhaus.org/query/bl?ip=203.216.247.249

というサイトでIPアドレスを入力すると、ブラックリスト入りを調べることができます。この中で、引っかかってしまったのが真ん中のPBLです。どうも原因は

Ref: PBL2102xx

222.210.xx.0/20 is listed on the Policy Block List (PBL)

と出てきました。PBLというデータベースに入っているようです。

PBLとは?

他人のIPですが、このようにナンバリングされて管理された、ダイナミックIP(と想像される)リストです。このリストをどうやって作っているのかつらつらと説明がありますが、逆引き名から推測しているようです。要するに、メールサーバを中継せずにクライアントIPから直接送信してくるサーバを排除する仕組みです。

そもそも、この仕組みはブラックリストではないそうですが、……まああからさまにブラックリスト向けですよね。でも、こんなのブラックリストとして使うな。 >某有名サーバメーカー

解除のために

解除するため説明を読んでみると、このデータベース(ブラックリスト)からの削除は自動処理であり、2つの条件を満たすよう書かれています。

You should only remove an IP address from the PBL if (A) the IP address is Static and has proper Reverse DNS assigned to your mail server, and (B) if you have a specific technical reason for needing to run a 'direct-to-MX' email service, such as a mail server appliance, off the Static IP address. In all other cases you should NOT remove an IP address from the PBL.

  • (A)IPアドレスが静的であり、逆引き名があなたのメールサーバに割り当てられていること。
  • (B)技術的な理由により'direct-to-MX'を行うことが必要ならば、静的IPなどのメールサーバを利用してメールを送信すること。

イマイチ分からないところもありますが、逆引きが設定された静的IPならば消してくれるようです。フォームから申請したところ無事解除されました。