y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

メルマガって結構大変なのよ

メールとデータベース関連のネタをもういっちょ。
世の中にはメーリングリストサーバーだとか、メルマガ発行システムなんていうのがある。
自分の仕事でもそういうシステムの開発をしていたりするのだが、メールサーバーってどれくらいの能力があるか知ってるかぃ?良くメーリングリストサーバーのスペックなんかを見ると数十万件/日とか数百万件/日なんていう”公称値”が載っているが、もちろんこんな閉鎖環境での試験結果を信じる馬鹿はいまい。
実際のメール配送は、DNSサーバーによる名前解決やWAN経由のSMTP通信など、不確定要素がたっぷり。
メールサーバーだけを稼動した純粋培養のサーバーマシンをLAN上で動かし、限られたメールアドレス宛に送信するわけではないのだ。
エンジン性能と実車の性能には種々の条件設定が絡んでくるのと一緒だ。

スパムなんていって、受信する方は辟易としているのが実際だが、いやいや敵もなかなか凄いですな。
膨大なスパムを高速に送信し、しかも身元を割らせない技術(多分複数のSMTPサーバーに分散しているんだろうな)というのは、学ぶべきものがある。
もちろん、スパマーめいた悪徳業者の倫理を賞賛しているのではなくて、その技術の話ですよ。

メルマガって大体、専用のアクセスURLや○○さんなんていう個別の差込データが入っているが、これらは当然定型メールではなくて、DBから取ってきたフィールド値を一度メモリ上に展開してから、1通1通の文面を生成している。
DBでリストを生成して、1件づつ読み出しながら文面を作成して、send・・・を何万回も繰り返すのだ。
自社で持っているこの手のツールでは、1時間5000通程度でチューニングされているが、このチューニングもなかなか奥が深い。
例えば1万通のメールをプログラムから送ると、メールサーバー(ここではsendmail)のプログラムは、面白い動きをする。始めの5分で1000通を送るなどのパフォーマンスを見せるものの、その後は膨大なキューの処理で追われ、頭打ちになってくる。一度に1万通の場合は、10時間経っても送信完了しないのだ。
そこで、始めの5分に着目して、1000通づつを10分間隔のジョブとして実行すると、あっという間に1000通を送り終わり、その後5分はアイドル時間・・・という動作をしたりするのだ。待ち時間を減らせばもっとたくさん送れるようになるし、複数のsendmailに分散しながらも1000通置きに送信すれば、望む件数を望む時間内に送信することもできるわけ。
メルマガ発行ってこれだけじゃなくて、実際にはアドレスの重複チェックとか、不正なアドレスの検出、retuenメールの処理なんていう面倒な仕事が待っているんだけど、基本的にはメール送信をいかに間違いなく”短期間で””サーバーリソースを無駄にしないで”送るのが重要。2重送信しないとか、でたらめなアドレス宛に送りつけて先方メールサーバーに負担をかけないとか・・。
届いて当たり前、送信できて当たり前・・とインターネットのキラーアプリケーション”メール”では要求される技術もなかなかに高度化していると感じる次第。