تصميم البنية
يعتمد SirrChat بنية معيارية لتوفير حل خادم بريد إلكتروني مرن وقابل للتوسع.
البنية العامة
┌─────────────────────────────────────────────┐
│ طبقة العميل │
│ (Thunderbird، Outlook، تطبيقات الهاتف) │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة البروتوكول │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SMTP │ │ IMAP │ │Submission│ │
│ └─────────┘ └─────────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة المصادقة │
│ ┌──────────┐ ┌─────┐ ┌─────┐ ┌──────┐ │
│ │بلوكشين │ │LDAP │ │ PAM │ │مخصص │ │
│ └──────────┘ └─────┘ └─────┘ └──────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة المعالجة │
│ ┌─────────┐ ┌──────┐ ┌─────────┐ │
│ │ التصفية │ │تعديل │ │ التحقق │ │
│ │ (Sieve)│ │(DKIM)│ │(SPF/إلخ)│ │
│ └─────────┘ └──────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ طبقة التخزين │
│ ┌──────────┐ ┌────────────┐ │
│ │قاعدة بيانات│ │ التخزين │ │
│ │(PG/MySQL)│ │(محلي/S3) │ │
│ └──────────┘ └────────────┘ │
└─────────────────────────────────────────────┘المكونات الأساسية
معالجات البروتوكول
خادم 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 المختلفة
خط أنابيب معالجة الرسائل
البريد الوارد → فحص مكافحة الرسائل غير المرغوب فيها → فحص الفيروسات → قواعد التصفية
↓
التخزين في DB ← توقيع 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 بشكل منفصل
- التخزين المشترك: تشارك مثيلات متعددة البيانات
- موازنة التحميل: توزيع ذكي لحركة المرور
المراقبة والتسجيل
جمع المقاييس
- مقاييس النظام: CPU والذاكرة والقرص
- مقاييس التطبيق: إنتاجية البريد الإلكتروني والكمون
- مقاييس الأعمال: نشاط المستخدم واستخدام التخزين
نظام التسجيل
سجلات التطبيق → إخراج منظم → تجميع السجلات → منصة التحليلات
(ELK/Loki)التوفر العالي
التبديل الاحتياطي
- النسخ المتماثل الرئيسي-الثانوي: تكوين رئيسي-ثانوي لقاعدة البيانات
- التبديل التلقائي: فحوصات الصحة والتبديل الاحتياطي التلقائي
- نسخ احتياطي للبيانات: نسخ احتياطي منتظم واختبار الاسترداد
فحوصات الصحة
go
type HealthCheck struct {
Database bool
SMTP bool
IMAP bool
Storage bool
}للحصول على مزيد من التفاصيل التقنية: