[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