مبني من المبادئ الأولى
بدون بيئة تشغيل. بدون جامع قمامة. بدون أعباء إطار عمل. كل سطر في Flashstor مكتوب بلغة C11 للتحكم الأقصى في الذاكرة والإدخال/الإخراج وموارد النظام.
الأساس التقني
أربع ركائز للتميز الهندسي
دورة حياة الطلب
كل طلب S3 يتبع خط أنابيب حتمي من أربع مراحل
القبول والتحليل
تقبل حلقة الأحداث الاتصال عبر epoll/kqueue. يتم تحليل رؤوس HTTP في مخازن arena مُخصصة مسبقاً. يُفرض مهلة anti-slowloris عند استلام الرؤوس. يتم توجيه الطلب إلى المعالج عبر جدول الإرسال.
المصادقة والتفويض
يتم التحقق من توقيع SigV4 باستخدام CRYPTO_memcmp الآمن زمنياً. يتم تقييم سياسة IAM في سياق الطلب مع ذاكرة تخزين مؤقت epoch لكل خيط (معدل إصابة قريب من 100% على اتصالات keep-alive). يتم التحقق من رموز STS.
التنفيذ والاستجابة
يتم إرسال العملية إلى المعالج. يتم تجزئة البيانات عبر توجيه CRC32، وترميزها بتقنية erasure coding ISA-L SIMD، وكتابتها على الأقراص بالتوازي عبر مجموعة خيوط I/O. يتم تجميع الاستجابة بإرسال zero-copy عبر writev().
التنظيف وإعادة التدوير
يقوم مُخصص arena بتحرير جميع ذاكرة الطلب دفعة واحدة في عملية واحدة — صفر استدعاءات free() فردية. يُعاد الاتصال إلى حلقة الأحداث لإعادة استخدام keep-alive. يتم وضع إدخال سجل التدقيق غير المتزامن في ring buffer SPSC الخالي من الأقفال.
تخصيص Arena: صفر تجزئة بالتصميم
كل اتصال يحصل على مُخصص arena مخصص بكتل قابلة لإعادة الاستخدام بحجم 64 KiB. جميع التخصيصات لكل طلب تحدث داخل الـ arena. عند اكتمال الطلب، يتم إعادة تعيين الـ arena بالكامل في O(1) — بدون استدعاءات free() لكل كائن، بدون تجزئة، بدون GC.
- كتل arena بحجم 64 KiB — تُعاد استخدامها عبر الطلبات، ولا تُعاد أبداً لنظام التشغيل
- ~75 KiB أساسي لكل اتصال (arena + مخازن I/O)
- تحرير جماعي عند اكتمال الطلب — إعادة تعيين مؤشر واحد
- وضع التصحيح: تتبع لكل تخصيص مع كشف التسريبات
بنية الكتلة الموزعة
مجموعات erasure موزعة عبر العقد مع إجماع قائم على النصاب
عقدة البوابة
تقبل طلبات S3 API، وتُجري مصادقة SigV4، وتوجه العمليات إلى مجموعة erasure الصحيحة عبر التجزئة الحتمية المبنية على CRC32.
عقدة التخزين
تدير الأقراص المحلية مع تنفيذ vtable xl_storage. تتعامل مع erasure coding والتحقق من bitrot وعمليات I/O على مستوى الشظايا مع عمليات قرص متوازية.
عقدة النظير
تخزين بعيد يمكن الوصول إليه عبر vtable rest_storage عبر HTTP. يشارك في القفل الموزع ونصاب البيانات الوصفية والنسخ المتماثل عبر العقد.
قنوات الاتصال
نموذج فصل الامتيازات
يتبع Flashstor مبدأ أقل الامتيازات مع دورة حياة أمنية من أربع مراحل تُقلل سطح الهجوم أثناء التشغيل.
التهيئة كـ Root
- • ربط المنفذ المميز (مثل 443 لـ HTTPS)
- • تحميل شهادات TLS من --certs-dir
- • تهيئة جداول إرسال ISA-L SIMD
إسقاط الامتيازات
- • التبديل إلى FLASHSTORE_RUN_USER / FLASHSTORE_RUN_GROUP
- • تعيين PR_SET_NO_NEW_PRIVS على Linux (يمنع إعادة التصعيد)
- • استخدام نموذج القدرات على SunOS/illumos
تقوية وقت التشغيل
- • RELRO كامل — لا توجد إدخالات GOT قابلة للكتابة بعد بدء التشغيل
- • -fstack-protector-strong مع حماية كناري المكدس
- • سلامة تدفق التحكم (-fcf-protection على x86_64)
- • -D_FORTIFY_SOURCE=3 لكشف تجاوز المخزن المؤقت
التدقيق والمراقبة
- • سجلات تدقيق JSON غير متزامنة عبر ring buffer SPSC خالٍ من الأقفال
- • معرّفات تتبع لكل طلب مع توقيت العمليات
- • مقاييس Prometheus للأحداث المتعلقة بالأمان
أسئلة تقنية؟ دعنا نتحدث عن البنية.
فريقنا الهندسي متاح لمناقشات تقنية معمقة حول إدارة الذاكرة ونماذج الإدخال/الإخراج وتقوية الأمان وتصميم الأنظمة الموزعة.