[Postfixbuch-users] "rate limiting" für ausgehende Mails
rog7993 at web.de
rog7993 at web.de
Do Okt 14 00:55:50 CEST 2010
Hallo,
unser Mailgateway sendet ausgehende Mails an einen externen Relayhost,
der folgenden Einschränkungen unterliegt:
- maximal 60 Verbindungen pro 3 Minuten
- pro Verbindung maximal 30 versendete Mails pro 3 Minuten
Optimalerweise würde man also 60 x 30 = 1800 Mails in 3 Minuten
ausliefern können. Hinter dem MX-Record des Relayhosts verbergen sich
insgesamt 6 Server, so dass das Ganze nochmal mit 6 zu multiplizieren
ist. Allerdings erreiche ich diese Werte nicht annähernd, was daran
liegt, dass bei größere Mailmengen alle Relayhosts nach kurzer Zeit
weitere Verbindungen ablehnen und dann die Mails in der deferred-Queue
landen. Und darin liegen sie zunächst länger, als sie müssten. Und nach
mehreren erfolglosen Zustellversuchen steigt ja noch der Zeitraum, den
eine Mail in der deferred-Queue bleibt, obwohl die Relayhosts längst
wieder Mails annehmen würden.
Wie konfiguriert man Postfix unter diesen Randbedingungen, um einen
möglichst hohen Durchsatz zu erhalten?
Ich habe ein paar Versuche mit den Parametern
smtp_destination_concurrency_limit = 1
smtp_destination_rate_delay = 1
gemacht. Der erste (ohne den zweiten) verbessert die Situation zwar
etwas, aber nicht deutlich. Wenn man beide definiert, sieht es insgesamt
besser aus, da man vermeidet, dass gleichzeitig alle Relayhosts
Verbindungen ablehnen und damit keine Mails in der deferred-Queue
landen. Insgesamt ist der Durchsatz aber immer noch viel schlechter, als
das Optimum. Mit diesen Parametern scheint Postfix pro Verbindung auch
nur eine einzige Mail auszuliefern, statt bis zu 30, die möglich wären.
smtp_connection_cache_on_demand steht auf dem Defaultwert "yes". Damit
sollte Postfix das automatisch steuern. Oder wäre es besser,
smtp_connection_cache_destinations zu definieren?
Ich könnte mir auch vorstellen, die Default-Parameter
minimal_backoff_time = 300s
maximal_backoff_time = 4000s
queue_run_delay = 300 s
auf kleinere Werte zu setzen, z.B.
minimal_backoff_time = 180s
maximal_backoff_time = 1000s
queue_run_delay = 90 s
Damit hat man dann zwar immer noch ein burstartiges Auslieferverhalten,
aber immerhin bleiben die Mails weniger lang in der deferred-Queue
hängen. So richtig gefällt mir das aber nicht, wobei es in diesem Fall
wohl sogar vertretbar wäre, nachdem alle Mails an einen einzigen (bzw.
sechs) Relayhosts ausgeliefert werden.
Gibt es eine sinnvollere Variante?
Viele Grüße,
Ingo Rogalsky
Mehr Informationen über die Mailingliste Postfixbuch-users