[PHP-users 14272] Re: 大量のメールをすばやく送りたい

KUBO Atsuhiro php-users@php.gr.jp
2003年 3月 25日 (火) 06:07:59 JST


久保です。

>>>>> In <20030325141809.AB22.M5ISSIGE@mr.hitachi-medical.co.jp> 
>>>>> `Osamu Shigematsu' = `m5issige@mr.hitachi-medical.co.jp' wrote:
> 現在、Windows 用のソフトでやっているらしいのですが、
> 一時間に 1000 通程度しか処理できないようです。
> # どうもサーバが遅いようですが、Pentium 500Mhz くらいで、
> # 著しくのろいとは思えないです。qmail+tcpserver, RedHat です。

メッセージ作成処理を行うサーバとしては問題ないスペックだと思います。

> (2) 複数のプロセス (=PHP スクリプトを複数起動する) で並列処理するか、
> それともひとつだけの方が速いのか。
> プロセスをたくさん用意すると、メモリを大量消費しそうですし、
> ディスクが追いつかない気もします。

メッセージ作成処理用のサーバから複数の SMTP セションを作成してあとは
各 SMTP サーバにメッセージを流すいった手法があります。この場合はメッセ
ージ作成スクリプトは SMTP の 1 セションを 1 つの子プロセスが担当するよ
うに fork するつくりにします。
速度に関してですが、大抵スクリプトの速度自体よりも SMTP サーバの速度が
ボトルネックになるケースが多いでしょう。

また Perl モジュールですが大量配信用途のものがあります。
- Mail::Bulkmail
http://search.cpan.org/author/JIMT/Mail-Bulkmail-3.05/

並列処理用のモジュールとしては、以下のようなものがあります。
- Parallel::ForkManager
http://search.cpan.org/author/DLUX/Parallel-ForkManager-0.7.5/

PHP で作成される場合でも参考になると思います。

> (3) qmail よりも速いものはない?
> qmail だと、メールを送る時点で、完全なメールに組み立てる必要があるし、
> そのために、データがかなり冗長な構成で、無駄がある気がします。
> socket で直接通信した方が速いとか?

大量配信には同じホスト宛のメッセージをまとめて取り扱える Postfix や
Sendmail (+ SMTPfeed) が向いているでしょう。配送前に宛先のホスト部分で
ソートしておくと効果的だと思います。

--
KUBO Atsuhiro e-mail: kubo@isite.co.jp




PHP-users メーリングリストの案内