تصميم البنية
يعتمد SirrMesh بنية نموذجية لتوفير حل خادم بريد إلكتروني مرن وقابل للتوسع.
البنية العامة
┌─────────────────────────────────────────────┐
│ طبقة العميل │
│ (Thunderbird، Outlook، تطبيقات الجوال) │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة البروتوكول │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SMTP │ │ IMAP │ │Submission│ │
│ └─────────┘ └─────────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة المصادقة │
│ ┌──────────┐ ┌─────┐ ┌─────┐ ┌──────┐ │
│ │البلوكتشين│ │LDAP │ │ PAM │ │مخصص │ │
│ └──────────┘ └─────┘ └─────┘ └──────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة المعالجة │
│ ┌─────────┐ ┌──────┐ ┌─────────┐ │
│ │ التصفية │ │التعديل│ │ التحقق │ │
│ │ (Sieve)│ │(DKIM)│ │(SPF/etc)│ │
│ └─────────┘ └──────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة التخزين │
│ ┌──────────┐ ┌────────────┐ │
│ │قاعدة │ │ التخزين │ │
│ │البيانات │ │(محلي/S3) │ │
│ │(PG/MySQL)│ └────────────┘ │
│ └──────────┘ │
└─────────────────────────────────────────────┘المكونات الأساسية
معالجات البروتوكول
خادم SMTP
- استقبال وإرسال رسائل البريد الإلكتروني
- دعم تشفير STARTTLS
- تنفيذ تحديد المعدل وإجراءات مكافحة البريد المزعج
خادم IMAP
- تخزين واسترجاع البريد الإلكتروني
- إدارة المجلدات
- وظيفة البحث في البريد الإلكتروني
- دعم إشعارات الدفع IDLE
خادم Submission
- إرسال البريد الإلكتروني (المنفذ 587)
- المصادقة الإلزامية
- توقيع DKIM التلقائي
وحدات المصادقة
مصادقة البلوكتشين
go
type BlockchainAuth struct {
networks map[string]RPCClient
cache *AuthCache
}
func (b *BlockchainAuth) Verify(address, signature, message string) bool {
// 1. استعادة عنوان الموقّع
// 2. التحقق من تطابق العنوان
// 3. التحقق من صلاحية الطابع الزمني
return verified
}مصادقة LDAP
- دعم Active Directory
- تعيين الوحدات التنظيمية (OU)
- مزامنة السمات
مصادقة PAM
- تكامل حسابات النظام
- دعم وحدات PAM المختلفة
خط أنابيب معالجة الرسائل
استقبال البريد → فحص مكافحة البريد المزعج → فحص الفيروسات → قواعد التصفية
↓
التخزين في قاعدة البيانات ← توقيع DKIM ← تعديل المحتوى ← قواعد المستخدمنظام التخزين
طبقة قاعدة البيانات
- بيانات المستخدم: معلومات الحساب، الحصص، الإعدادات
- بيانات وصفية للبريد: المرسل، المستلم، الموضوع، الوقت
- الفهارس: بحث واسترجاع سريع
تخزين الملفات
- صيغة Maildir: ملف واحد لكل بريد إلكتروني
- الضغط: ضغط تلقائي للبريد القديم
- متوافق مع S3: قابل للتوسع إلى التخزين السحابي
تدفق البيانات
تدفق إرسال البريد الإلكتروني
1. اتصال العميل (SMTP/Submission)
↓
2. التحقق من المصادقة
↓
3. استقبال محتوى البريد
↓
4. التحقق من المستلمين
↓
5. تطبيق قواعد التصفية
↓
6. توقيع DKIM
↓
7. معالجة قائمة الانتظار
↓
8. الإرسال إلى الخادم الوجهةتدفق استقبال البريد الإلكتروني
1. اتصال الخادم الخارجي
↓
2. فحوصات SPF/DKIM/DMARC
↓
3. فحص مكافحة البريد المزعج
↓
4. تطبيق قواعد المستخدم (Sieve)
↓
5. التخزين في قاعدة البيانات
↓
6. حفظ ملف البريد
↓
7. إعلام العملاء (IMAP IDLE)نظام الوحدات
الوحدات الأساسية
- auth: مزودي المصادقة
- storage: خلفيات التخزين
- filter: تصفية البريد
- modify: تعديل المحتوى
- check: فحوصات التحقق
نقاط التوسع
go
type Module interface {
Name() string
Init(config Config) error
Process(ctx Context, msg *Message) error
}تحسين الأداء
نموذج التزامن
- تجميعات Goroutine: معالجة الاتصالات المتزامنة
- الإدخال/الإخراج غير المتزامن: عمليات شبكة غير حاجبة
- المعالجة بالدفعات: عمليات قاعدة البيانات بالدفعات
استراتيجية التخزين المؤقت
- تخزين المصادقة المؤقت: تقليل استدعاءات RPC للبلوكتشين
- تخزين بيانات المستخدم المؤقت: البيانات المستخدمة بشكل متكرر في ذاكرة التخزين المؤقت
- تخزين DNS المؤقت: تقليل استعلامات DNS
تجميع الاتصالات
- تجميع اتصالات قاعدة البيانات: إعادة استخدام اتصالات قاعدة البيانات
- تجميع اتصالات RPC: إعادة استخدام اتصالات عقد البلوكتشين
تصميم الأمان
الحماية متعددة الطبقات
- طبقة الشبكة: تشفير TLS
- طبقة المصادقة: دعم المصادقة متعددة العوامل
- طبقة التطبيق: التحقق من المدخلات، الحماية من حقن SQL
- طبقة البيانات: التشفير في حالة السكون
تحديد المعدل
- معدل الاتصال: منع إساءة استخدام الاتصال
- معدل الإرسال: منع البريد المزعج
- محاولات المصادقة: منع هجمات القوة الغاشمة
قابلية التوسع
التوسع الأفقي
┌─────────────┐
│موازن الحمل │
└──────┬──────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│ عقدة │ │ عقدة │ │ عقدة │
│ 1 │ │ 2 │ │ 3 │
└───┬──┘ └───┬──┘ └───┬──┘
│ │ │
└─────────┼─────────┘
▼
┌────────────────┐
│ تخزين مشترك │
│(قاعدة البيانات/S3)│
└────────────────┘فصل المكونات
- النشر المستقل: يمكن توسيع SMTP و IMAP بشكل منفصل
- التخزين المشترك: مثيلات متعددة تشارك البيانات
- موازنة الحمل: توزيع ذكي لحركة المرور
المراقبة والسجلات
جمع المقاييس
- مقاييس النظام: المعالج، الذاكرة، القرص
- مقاييس التطبيق: إنتاجية البريد، زمن الاستجابة
- مقاييس الأعمال: نشاط المستخدم، استخدام التخزين
نظام السجلات
سجلات التطبيق → إخراج منظم → تجميع السجلات → منصة التحليلات
(ELK/Loki)التوفر العالي
تجاوز الفشل
- النسخ المتماثل الرئيسي-الثانوي: تكوين رئيسي-ثانوي لقاعدة البيانات
- التبديل التلقائي: فحوصات الصحة وتجاوز الفشل التلقائي
- نسخ احتياطي للبيانات: نسخ احتياطي منتظم واختبار الاستعادة
فحوصات الصحة
go
type HealthCheck struct {
Database bool
SMTP bool
IMAP bool
Storage bool
}لمزيد من التفاصيل التقنية: