it-swarm.asia

حجم البريد الإلكتروني SMTP

يحتوي تطبيق شركتي على نظام بريد إلكتروني جماعي ، تم تصميمه بالكامل ، ويستخدمه عملاؤنا لإرسال رسائل البريد الإلكتروني بناءً على الاشتراكات الإضافية. أثناء قيامنا بمراقبة الأداء خلال بعض عمليات إرسال مجموعات البريد الإلكتروني الكبيرة ، لاحظنا أنه يبدو أن هناك حاجزًا مصطنعًا ناجم عن آلية الإرسال الحالية لدينا (phpMailer) لفترة وجيزة ، قمنا بإعادة توجيه بريدنا عبر خدمة SMTP لجهة خارجية ، ولكن أدركت أنهم لم يرسلوا أي أسرع مما كنا. الآن وبعد أن عادت إلينا مسؤولية الإرسال ، نحن نختبر بدقة تحسباً لعدد من العملاء الكبار المقبلين.

على افتراض قيامنا بتحسين معدل الإرسال لبروتوكول البريد لدينا (نحن نفكر في التغيير كليًا إلى SwiftMailer) كنت أفكر فيما إذا كان خادم SMTP قد يصبح أيضًا عنق الزجاجة أم لا. ما نوع الإنتاجية التي يمكنك تحقيقها من خادم SMTP؟ ما هي الاعتبارات المتعلقة بإرسال SMTP (مثل المصادقة ، التغليف ، وما إلى ذلك) التي قد يتعين علي إعادة النظر فيها عند القيام بتعديل الأداء؟

5
bpeterson76

طالما كنت تستخدم خادم SMTP غير محظور (في حالة وصوله إلى خادم DNS/SMTP سيئ) فهو إذن مسألة عدد المجالات المختلفة التي هي رسائل البريد الإلكتروني الموجهة إليها وما هو النطاق الترددي (يتحدث تقريبًا لأن تظهر استثناءات القاعدة في الحدود القصوى). أود أن أشك في أن هذا الأخير (عرض النطاق الترددي) بسبب رؤية نتائج مماثلة مع خادم خارجي.

يستغرق أي تغليف/تشفير على الأجهزة الحديثة جزءًا صغيرًا من الوقت اللازم لإرسال بريد إلكتروني إلى خادم بطيء. إذا كنت تستضيف خوادم DNS الخاصة بك ، فتأكد من أن هذه النتائج ستؤدي إلى نتائج سريعة لأن خادم SMTP المستلم قد يرغب على الأرجح في التحقق من سجلاتك (تباطؤ الأمور أكثر). عادةً ما يكون الحصول على خادمي بريد (مع عرض نطاق ترددي كافٍ) أسرع (نظرًا للحظر على خادم تلقي بطيء) من إنفاق نفس المبلغ من المال على خادم واحد محدد بشكل أفضل.

الخارقة سيئة لفوز سريع

  1. فرز عناوين البريد الإلكتروني حسب اسم المجال. إذا قمت بإنشاء جدول قاعدة بيانات جديد معلق بالجدول حيث تخزن عنوان البريد الإلكتروني ، فيمكن أن يحتوي على المفتاح الخارجي وجزء المستخدم وجزء المجال. التشغيل لتحقيق الانقسام على البيانات الحالية وبعض التغييرات في CRUD لتحديث السجلات سوف يحقق ذلك. بالفرز على اسم المجال ، ستسمح للخادم المرسل بإعادة استخدام اتصاله بخادم البريد البعيد (احرص على عدم حظر الرسائل الاقتحامية).

  2. حيث يصعب تغيير الرمز وتريد تبديل خوادم البريد ، يمكنك فقط تغيير الوظيفة بحيث تقبل مرجعًا (بادئة لها بـ & في PHP) ثم يمكنك استخدام متغير $ _GLOBAL يتم تغييره كل x ثوانٍ بواسطة مجدول يستدعي صفحة PHPمخفية.

  3. استخدم ذاكرة تخزين مؤقت DNS محلية واستعلم عن سجلات MX الضرورية قبل التشغيل (أو على الأقل تشغيل برنامج نصي لتشغيله بشكل متوازٍ). تحتفظ معظم ذاكرات التخزين المؤقت بسجلات لمدة 24 ساعة (عادةً ما تكون 3600 ثانية). يمكن أن يقلل زمن الوصول الأولي بمقدار 100 مللي ثانية تقريبًا. إذا كان لديك عدة خوادم SMTP وكان لدى المتلقي سجلات MX متعددة ، فيمكنك محاكاة ساخرة للنتائج. لذلك يرى خادم الإرسال الأول الخاص بك:

    • سجل MX الأولوية 1 10
    • سجل MX الأولوية 2 20
    • سجل MX 3 الأولوية 30
    • سجل MX 4 الأولوية 40

    ويرى خادم الإرسال الثاني الخاص بك

    • سجل MX الأولوية 1 40
    • سجل MX الأولوية 2 10
    • سجل MX 3 الأولوية 20
    • سجل MX 4 الأولوية 30

    إلخ. بهذه الطريقة يمكنك زيادة السلوك الموازي ، لكنه يؤدي إلى تآكل أي مكاسب من النقطة 1.

إذا تمكنت من تشغيل تتبع حزمة لتحديد الاختناقات ، فسيساعد ذلك في العثور على عمليات الفوز السريعة الضرورية.

3
Metalshark

بقدر ما أحب PHP ، هذا هو المكان الذي توجد فيه عنق الزجاجة في نظامك. PHP فقط لا تتمتع بكفاءة اللغات الأخرى عندما يتعلق الأمر بمعالجة النصوص.
https://stackoverflow.com/questions/603163/is-Perl-a-good-option-for-heavy-text-processing

سيكون Perl خيارًا أفضل لمعالجة وإرسال رسائل البريد الإلكتروني. قبل بضع سنوات ، كنت قد كتبت برنامجًا بسيطًا في بيرل يرسل رسائل بريد إلكتروني مخصصة إلى التقيد. تمكنت من إرسال حوالي 80،000 رسالة بريد إلكتروني في 6 ساعات فقط باستخدام Perl لإنشاء البريد الإلكتروني وإرسالها إلى برنامج Sendmail المحلي. كان هذا على خادم خاص افتراضي قياسي مع 2 غيغابايت من ذاكرة الوصول العشوائي.

هل تقوم بإرسال المهام إلى عملية Sendmail المحلية أم أن PHPMailer يستخدم SMTP؟ سيكون برنامج Sendmail المحلي أسرع نظرًا لأن PHP ليس بحاجة إلى فتح أي مآخذ توصيل للشبكة لإرسال البريد الإلكتروني.

لذلك باختصار ، يجب عليك:

  1. استخدم Perl بدلاً من PHP (أكره Perl أيضًا ، لكنها أداة معالجة نص أفضل)
  2. أرسل المهمة إلى برنامج Sendmail المحلي (الذي يمكن تهيئته لإعادة توجيه المهام إلى خوادم SMTP الخارجية إذا لزم الأمر)
  3. استخدم خادم SMTP خارجي إذا تم تحميل الخادم المحلي.
3
Shane Stillwell