बहुत सारे "बड़ी तस्वीर" वास्तुकला प्रश्नों की तरह, सबसे अच्छा समाधान वास्तव में उनमें से एक है ... यह निर्भर करता है। क्या आप परिनियोजन वातावरण को नियंत्रित कर सकते हैं? यानी...क्या आप अपनी पसंद के किसी भी ई-मेल सर्वर का उपयोग कर सकते हैं, या आप पहले से स्थापित और होस्ट किए गए एक का उपयोग करने के लिए विवश हैं? क्या आप उसी मशीन पर कोड चला सकते हैं जिस पर एसएमटीपी सेवा है? इन सवालों, और बहुत से अन्य लोगों को एक (निकट) इष्टतम वास्तुकला के साथ आने पर विचार किया जाना चाहिए।
यह देखते हुए, मैं कुछ धारणाएँ बनाने जा रहा हूँ और कुछ विचार प्रस्तुत करूँगा जो मुझे लगता है कि तलाशने योग्य हैं...
आपको एक उच्च-प्रदर्शन संदेश प्रणाली पर गौर करना चाहिए। विशेष रूप से, RabbitMQ पर एक नज़र डालें . RabbitMQ विश्वसनीय और कुशल है, और एसिंक्रोनस इनकमिंग इवेंट के आधार पर वर्कलोड का वितरण एक ऐसा पैटर्न है जिस पर वे विशेष रूप से अपने (मेरी राय में, बहुत अच्छे) ट्यूटोरियल में चर्चा करते हैं।
इस तरह के मैसेजिंग सर्वर के साथ, आपके पास एक प्रक्रिया है जो आने वाली ई-मेल प्राप्त करती है। अधिमानतः यह एसएमटीपी प्रक्रिया के हिस्से के रूप में किया जाता है, या कम से कम इसके बहुत करीब - विशेष रूप से आपके द्वारा उल्लिखित कार्य भार के साथ। यदि आपके पास कोई अन्य विकल्प नहीं है, तो पीओपी या आईएमएपी के माध्यम से संदेशों को इकट्ठा करने के लिए क्रॉन का उपयोग करने के बारे में आपके विचारों को अभी काम करना होगा।
ई-मेल एकत्र करने की प्रक्रिया तब संदेशों को RabbitMQ कतार में धकेल देगी। (शायद सचमुच ई-मेल स्वयं नहीं है, हालांकि यह एक संभावना है, लेकिन मैं उन संदर्भों की तरह सोच रहा था जहां ई-मेल कुशलता से संग्रहीत किया जाता है)। आप तब एक से अधिक कार्यकर्ता प्रक्रियाओं को चलाते हैं जो एक नामित संदेश कतार में सदस्यता लेते हैं। RabbitMQ (या जो भी संदेश सेवा आप तय करते हैं) तब उन संदेशों को अलग-अलग ग्राहकों को राउंड-रॉबिन फैशन में वितरित करेगा। यदि पहले ही लोड हो चुका है, तो कार्यकर्ता प्रक्रिया संदेश को NACK कर सकती है, या अपना स्वयं का नियंत्रण प्रवाह संदेश वापस सेवा में भेज सकती है। बहुत अधिक कार्यभार के साथ (फिर से, जैसा आपने प्रस्तावित किया है), मैं किसी प्रकार की प्रबंधन प्रक्रिया की अत्यधिक अनुशंसा करता हूं जो वितरित प्रणाली के समग्र स्वास्थ्य पर नजर रखता है। प्रबंधक रन टाइम आँकड़े एकत्र करेगा (भविष्य के विकास की योजना, अनुकूलन और समग्र प्रणाली के रिफैक्टरिंग के लिए बहुत उपयोगी), और नई कार्यकर्ता प्रक्रियाओं को स्पिन करने और बंद करने की क्षमता रखता है। इससे पहले कि आप उस बहुत अधिक कार्यभार पर पहुंचें, और यह मानते हुए कि आपकी कार्यकर्ता प्रक्रियाएं स्थिर हैं और स्मृति विखंडन आदि के बिना लंबे समय तक रह सकती हैं, तो बस संदेश सर्वर का उपयोग करके काम वितरित करना पर्याप्त होना चाहिए।
इसके लायक क्या है, मुझे ई-मेल प्रोसेसर लिखने का कुछ अनुभव है (विशेष रूप से xmail - अगर आप अभी अपना प्रोजेक्ट शुरू कर रहे हैं और इसके शुरुआती चरणों पर आपका बहुत नियंत्रण है, तो मैं इसकी सिफारिश करूंगा)। साथ ही, मैं वर्तमान में एक प्रमुख वैज्ञानिक कंप्यूटिंग ग्रिड के लिए एक बहु-एजेंट परिणाम कैशिंग सिस्टम बनाने के लिए RabbitMQ का उपयोग कर रहा हूं।
वैसे भी...आपके प्रोजेक्ट के लिए शुभकामनाएँ!