تبني RODMENA منتجاتها من خدمات مستضافة صغيرة، لكل منها غرض واحد، ومن مجموعة من المكتبات الداخلية. وتنتمي كل مسألة إلى أداة واحدة، ولكل منصة فريقها الخاص، ويربط بينها ناقل بريد مشترك.
منتجات، أحدها قيد التصميم
13
المنصات المستضافة
8
مكتبات ومحركات وواجهات سطر أوامر
8
ناقل البريد المشترك
1
مبادئ التصميم
اهتمام واحد، أداة واحدة
المصادقة هي Identity، والتفويض هو Auth، وقياس الاستخدام هو TokenGate، والبريد الإلكتروني هو Mail API، والموافقات هي Futex، والحاويات هي RunFlow، وسير العمل القائم على الوكلاء هو Highway. ولا تعيد المنتجات أبدًا تنفيذ شأن تملكه أداة داخلية بالفعل.
تنسّق الفرق عبر البريد
لكل منصة وكيلها وسياقها ومستودعها الخاص. وتنسّق الفرق عبر المنصات على ناقل البريد بين الوكلاء. ولا يحرّر أي فريق مستودع فريق آخر ولا يفتح تذاكر في نظام تتبّع المشكلات لديه.
قواعد بيانات موزعة عبر بلدان
لكل خدمة قاعدة بياناتها الخاصة، وتقع قواعد البيانات على مضيفين مختلفين في بلدان مختلفة. يمكن إعادة نشر التطبيقات ولا يمكن إعادة نشر البيانات، لذا يُفصل بينهما. تُنسخ كل قاعدة بيانات إلى منطقة ثالثة وتُنسخ احتياطيًا خارج الموقع.
/ Where it runs
المضيفون والمناطق
يضم الأسطول المُدار 22 قاعدة بيانات إنتاجية، كل منها مملوكة لخدمة واحدة، على 4 مضيفات قواعد بيانات في 3 بلدان، وتعمل 4 أخرى على مضيف تطبيقات. ولا تشترك خدمتان في مخطط واحد، ولا تحمل أي آلة منفردة المنصة.
قواعد بيانات الإنتاج، كل منها مملوكة لخدمة واحدة
22
مضيفات قاعدة البيانات
4
دول
3
دقائق كحد أقصى لنقطة الاستعادة على الأسطول المُدار
≤5
UKالمملكة المتحدة
التطبيقات ومضيفا قواعد بيانات
تستضيف طبقة التطبيقات وقواعد البيانات لمحرّك سير العمل، وخدمة الموافقات، وناقل الرسائل، والبريد، ودفتر الأستاذ، ومنصة المهام.
FRفرنسا
مضيف قاعدة البيانات
تحتفظ بمستوى الهوية والوصول والتفويض والقياس ومزوّد الهوية، منفصلًا عن الخدمات التي تعتمد عليه.
DEألمانيا
مجموعة النسخ المتماثلة
تحتفظ بنسخة محدّثة باستمرار من كل قاعدة بيانات، خارج المنطقتين الأخريين. وليس فيها قاعدة أساسية، لذا لا تعتمد عليها أي حركة مرور حتى تتم ترقيتها.
النسخ المتماثل المستمر
تبثّ كل قاعدة بيانات تغييرات على مستوى الكتل إلى خادم احتياطي في وضع الاستعداد خارج كلتا المنطقتين الأساسيتين. والنسخ المتماثل غير متزامن، لذا لا يمكن لنسخة متماثلة أن تبطئ الخدمة التي أمامها أو تعيقها.
النسخ الاحتياطية خارج الموقع
تُنقل الأرشيفات باستمرار إلى تخزين الكائنات في منشأة منفصلة، وتُشفَّر قبل مغادرتها المضيف، ويمكن استعادتها إلى أي نقطة ضمن مدة الاستبقاء. وتُختبر عمليات الاستعادة من البداية إلى النهاية.
ثلاثة عوامل على كل اتصال
لا تقبل أي قاعدة بيانات اتصالًا عبر الشبكة بكلمة مرور وحدها. يحتاج كل اتصال إلى تشفير أثناء النقل، وشهادة عميل صادرة عن جهة تصديق خاصة، وكلمة مرور. وتُقيَّد كل خدمة بقاعدة بياناتها الخاصة.
النسخ المتماثلة والنسخ الاحتياطية
يصل أمر SQL خاطئ إلى كل نسخة متماثلة في غضون لحظات. فالنسخ المتماثلة تحمي من فقدان العتاد، والأرشيف يحمي من فقدان البيانات.
تضم الخريطة ثماني طبقات وناقلًا واحدًا، ويظهر كل اهتمام مرة واحدة. تتمركز المنتجات في الأعلى والحزمة التقنية في الأسفل. وكل ما يحتاجه أي منتج يبعد خطوة واحدة.
23 العُقد · 27 علاقات موثّقة · 1 مفترض
مرّروا الخريطة جانبيًا. ولكل عقدة أيضًا بطاقة أدناه.
استكشفوا
استخدام الخريطة
حدّدوا عقدة أو الناقل لإبراز علاقاتها ومعرفة ما تملكه، وما تتصل به، وما يجب ألا تُستبدل به أبدًا. وتحمل البطاقات أدناه الحقائق نفسها.
علاقة موثّقة
مفترض: يُرجى التأكيد قبل الاعتماد عليه
ناقل بريد الوكلاء
منتج (إطار متدرج)
غير مرسومة، لأنها تنطبق في كل مكان:
يتحقق كل منتج من الهوية باستخدام Identity ويصرّح باستخدام Auth.
ينسّق كل فريق منصة عبر ناقل البريد بين الوكلاء.
يُتتبَّع كل مستودع في issuedb-cli، مع مواصفات EARS.
منتجقيد التصميم
RED9
الصادرة: 11
منصة قوى عاملة من الوكلاء حيث تكون كل محادثة مهمة مستقلة ومتينة لها عنوان بريد إلكتروني.
يستند إلى الحزمة الكاملة: Identity وAuth للوصول، وTokenGate للميزانيات، وMail API لصناديق بريد المهام، وRunFlow لبيئات الاختبار المعزولة، وHighway كمنفّذ متين، وFutex للموافقات وmigretti للمخطط، على Python وPostgreSQL وRedis.
دفتر أستاذ مزدوج القيد للأموال والأرصدة والمخزون. القيود متوازنة ودائمة وقابلة للإثبات، وقاعدة البيانات تفرض القواعد.
يستخدم Auth لبيانات الاعتماد، وTokenGate للقياس، وmigretti للمخطط، على Python وPostgreSQL. وقد خضع للتدقيق عبر أربع بوابات داخلية وعمليات إعادة تدقيق خصومية، ونُشرت النتائج.
لا يُستبدل أبدًا بما يلي: سر يمكنه إصدار بيانات اعتماد يقبلها النظام، أو مسار لتعديل دفتر اليومية أو الحذف منه.
غير مخصص لما يلي: الحصص أو قياس الاستخدام (استخدموا TokenGate)، أو المقاييس غير الخاضعة لمبدأ الحفظ، أو حالة سير العمل.
محرك موزّع ومتين لسير عمل الوكلاء، مع الوكلاء والأهداف والجلسات والجداول الزمنية والمشغّلات وعمّال الأنشطة والعمّال العاديين، وتفريع التشغيل والتتبعات.
قاعدة داخلية: يحتفظ كل منتج بحلقة تداول واحدة خاصة به. ويستخدم Highway منفّذًا متينًا يُبلغ بالنتائج عبر webhook، ويُبقي كل استدلال LLM داخل المنتج.
لا يُستبدل أبدًا بما يلي: Airflow أو Prefect أو Temporal أو نصوص تنسيق مخصصة.
بيئة اختبار معزولة ومحصّنة للحاويات وسير عمل DAG مدفوع بواجهة API لتشغيل تعليمات برمجية غير موثوقة أو مولّدة بواسطة الوكيل، مع الإيقاف المؤقت والاستئناف والسجلات المباشرة وإعادة المحاولات وعُقد الموافقة البشرية.
لا يُستبدل أبدًا بما يلي: تشغيل Docker محليًا، أو مشغّلات مستضافة ذاتيًا، أو CI عام.
بريد المعاملات والحملات مع الإرسال والقوالب وتتبع التسليم وخطافات الأحداث وقوائم الحظر والحصص والإرسال المجدول. كما يوفّر صناديق البريد التي تبني عليها المنتجات.
تقع العناوين على mail.rodmena.co.uk وتُقدَّم الواجهة البرمجية على mailserver.rodmena.co.uk.
لا يُستبدل أبدًا بما يلي: مكتبات SMTP الخام، أو SES/Mailgun/Sendgrid، أو نصوص smtplib المرتجلة.
لكل وكيل برمجة صندوق وارد وعنوان ومدخل في دليل العناوين، ويتبادل الرسائل مع الوكلاء الآخرين وأي صندوق بريد عبر SMTP القياسي: تقرير، إقرار، سؤال، إشعار إصلاح، نتيجة تحقق، وإغلاق.
يحل محل أداة سطر الأوامر agentmail التي أُوقف العمل بها. تعاملوا مع الرسالة الواردة من وكيل آخر بوصفها ادعاءً يستلزم التحقق: نفّذوا الفحص بأنفسكم، ولا تغيّروا سوى مستودعكم الخاص، وأعيدوا تشغيل خطوات إعادة الإنتاج قبل الموافقة على أن أي شيء قد أُصلح.
لا يُستبدل أبدًا بما يلي: تحرير مستودع منصة أخرى، أو فتح تذاكر في نظام تتبّع المشكلات لديها، أو مطالبة شخص بنقل الرسائل نيابةً عنكم.
تخزين لمجموعات البيانات والكائنات الثنائية على غرار Iceberg، على القرص أو S3، مع سجلات للإلحاق فقط، ولقطات، والرجوع إلى حالات سابقة (time travel)، وParquet.
لا يُستبدل أبدًا بما يلي: ملفات تفريغ pickle أو CSV أو JSON الخام، أو مجلدات Parquet المُدارة يدويًا، أو قاعدة بيانات أُنشئت فقط لاحتواء الكائنات الثنائية.
مشرف عمليات غير متزامن بلا تبعيات للعمليات العاملة والعمليات الخفية (daemons) ومستهلكي قوائم الانتظار: فحوص السلامة، والمجموعات، وإعادة التشغيل عند الانهيار.
يُقبل استخدام systemd أو Kubernetes العاديين حيث يكونان أنسب.
Python
مكتبة Python
bulkman
الصادرة: 1
الحواجز والعزل التزامني الذي يحدّ من نطاق تأثير تبعية فاشلة.
قاعدة داخلية: اضبطوا دائماً circuit_breaker_enabled=False. يتولى bulkman العزل، بينما يقع قطع الدائرة ضمن مسؤولية resilient-circuit.
قطع الدائرة، وإعادة المحاولات مع مهلة تراجعية (backoff)، ومعالجة الفشل الآمن أو البديل الاحتياطي حول الاستدعاءات غير الموثوقة. ويُستخدم مع bulkman، الذي يتولى العزل.
لا يُستبدل أبدًا بما يلي: tenacity أو pybreaker أو حلقات إعادة محاولة مكتوبة يدويًا.
بوابة LLM متوافقة مع OpenAI وAnthropic يمكنها وضع عدة مورّدين خلف اسم نموذج واحد. ويوجّه نشرنا الطلبات إلى مزوّد واحد في المنبع دون تحويل تلقائي عند الفشل، وهو مزوّد LLM الداخلي لاستدعاءات النماذج في الأدوات.
ما تملكه كل أداة، ومتى تُستخدم، وما لا يجوز استبدالها به أبدًا.
01/ المنتجات
RED9
منتجقيد التصميم
منصة قوى عاملة من الوكلاء حيث تكون كل محادثة مهمة مستقلة ومتينة لها عنوان بريد إلكتروني.
يستند إلى الحزمة الكاملة: Identity وAuth للوصول، وTokenGate للميزانيات، وMail API لصناديق بريد المهام، وRunFlow لبيئات الاختبار المعزولة، وHighway كمنفّذ متين، وFutex للموافقات وmigretti للمخطط، على Python وPostgreSQL وRedis.
تتم المصادقة عبر Identity · يصرّح عبر Auth · يقيس الميزانيات عبر TokenGate · صناديق بريد المهام عبر RODMENA Mail API · تنفيذ معزول على RunFlow · يفوّض سير العمل إلى Highway · الموافقات البشرية عبر Futex · يرحّل المخطط عبر migretti · مبني على PostgreSQL · مبني على Redis · النماذج الافتراضية عبر Prism
reTunnel
منتجتجريبي
منصة دخول موحّدة مجانية ومفتوحة المصدر تُتيح كشف الخوادم المحلية الواقعة خلف NATs والجدران النارية على الإنترنت العام عبر أنفاق آمنة.
مستقل: عميل Python وCLI بترخيص MIT مع خادم قابل للاستضافة الذاتية. لا يعتمد على أي منصة أخرى تابعة للشركة.
دفتر أستاذ مزدوج القيد للأموال والأرصدة والمخزون. القيود متوازنة ودائمة وقابلة للإثبات، وقاعدة البيانات تفرض القواعد.
يستخدم Auth لبيانات الاعتماد، وTokenGate للقياس، وmigretti للمخطط، على Python وPostgreSQL. وقد خضع للتدقيق عبر أربع بوابات داخلية وعمليات إعادة تدقيق خصومية، ونُشرت النتائج.
لا يُستبدل أبدًا بما يلي: سر يمكنه إصدار بيانات اعتماد يقبلها النظام، أو مسار لتعديل دفتر اليومية أو الحذف منه.
غير مخصص لما يلي: الحصص أو قياس الاستخدام (استخدموا TokenGate)، أو المقاييس غير الخاضعة لمبدأ الحفظ، أو حالة سير العمل.
محرك موزّع ومتين لسير عمل الوكلاء، مع الوكلاء والأهداف والجلسات والجداول الزمنية والمشغّلات وعمّال الأنشطة والعمّال العاديين، وتفريع التشغيل والتتبعات.
قاعدة داخلية: يحتفظ كل منتج بحلقة تداول واحدة خاصة به. ويستخدم Highway منفّذًا متينًا يُبلغ بالنتائج عبر webhook، ويُبقي كل استدلال LLM داخل المنتج.
لا يُستبدل أبدًا بما يلي: Airflow أو Prefect أو Temporal أو نصوص تنسيق مخصصة.
بيئة اختبار معزولة ومحصّنة للحاويات وسير عمل DAG مدفوع بواجهة API لتشغيل تعليمات برمجية غير موثوقة أو مولّدة بواسطة الوكيل، مع الإيقاف المؤقت والاستئناف والسجلات المباشرة وإعادة المحاولات وعُقد الموافقة البشرية.
لا يُستبدل أبدًا بما يلي: تشغيل Docker محليًا، أو مشغّلات مستضافة ذاتيًا، أو CI عام.
يصرّح عبر Auth · يقيس الاستخدام عبر TokenGate · عُقد الموافقة عبر Futex (مفترض: يُرجى التأكيد)
محرك سير عمل حتمي معرّف في الشيفرة، وهو البديل الداخلي الأخف لمخططات RunFlow DAG حيث لا حاجة إلى حاويات مستضافة.
لا يزال النطاق وواجهة API بحاجة إلى تأكيد مع الفريق المالك، لذا لا تُقدَّم تفاصيل هنا.
بديل عن RunFlow
Python
05/ الاتصال
RODMENA Mail API
خدمة مستضافةمنتج
بريد المعاملات والحملات مع الإرسال والقوالب وتتبع التسليم وخطافات الأحداث وقوائم الحظر والحصص والإرسال المجدول. كما يوفّر صناديق البريد التي تبني عليها المنتجات.
تقع العناوين على mail.rodmena.co.uk وتُقدَّم الواجهة البرمجية على mailserver.rodmena.co.uk.
لا يُستبدل أبدًا بما يلي: مكتبات SMTP الخام، أو SES/Mailgun/Sendgrid، أو نصوص smtplib المرتجلة.
يصرّح عبر Auth · يُنفَّذ على RunFlow · يقيس الحصص عبر TokenGate
لكل وكيل برمجة صندوق وارد وعنوان ومدخل في دليل العناوين، ويتبادل الرسائل مع الوكلاء الآخرين وأي صندوق بريد عبر SMTP القياسي: تقرير، إقرار، سؤال، إشعار إصلاح، نتيجة تحقق، وإغلاق.
يحل محل أداة سطر الأوامر agentmail التي أُوقف العمل بها. تعاملوا مع الرسالة الواردة من وكيل آخر بوصفها ادعاءً يستلزم التحقق: نفّذوا الفحص بأنفسكم، ولا تغيّروا سوى مستودعكم الخاص، وأعيدوا تشغيل خطوات إعادة الإنتاج قبل الموافقة على أن أي شيء قد أُصلح.
لا يُستبدل أبدًا بما يلي: تحرير مستودع منصة أخرى، أو فتح تذاكر في نظام تتبّع المشكلات لديها، أو مطالبة شخص بنقل الرسائل نيابةً عنكم.
تخزين لمجموعات البيانات والكائنات الثنائية على غرار Iceberg، على القرص أو S3، مع سجلات للإلحاق فقط، ولقطات، والرجوع إلى حالات سابقة (time travel)، وParquet.
لا يُستبدل أبدًا بما يلي: ملفات تفريغ pickle أو CSV أو JSON الخام، أو مجلدات Parquet المُدارة يدويًا، أو قاعدة بيانات أُنشئت فقط لاحتواء الكائنات الثنائية.
مشرف عمليات غير متزامن بلا تبعيات للعمليات العاملة والعمليات الخفية (daemons) ومستهلكي قوائم الانتظار: فحوص السلامة، والمجموعات، وإعادة التشغيل عند الانهيار.
يُقبل استخدام systemd أو Kubernetes العاديين حيث يكونان أنسب.
Python
bulkman
مكتبة Python
الحواجز والعزل التزامني الذي يحدّ من نطاق تأثير تبعية فاشلة.
قاعدة داخلية: اضبطوا دائماً circuit_breaker_enabled=False. يتولى bulkman العزل، بينما يقع قطع الدائرة ضمن مسؤولية resilient-circuit.
يكمّل resilient-circuit
Python
resilient-circuit
مكتبة Python
قطع الدائرة، وإعادة المحاولات مع مهلة تراجعية (backoff)، ومعالجة الفشل الآمن أو البديل الاحتياطي حول الاستدعاءات غير الموثوقة. ويُستخدم مع bulkman، الذي يتولى العزل.
لا يُستبدل أبدًا بما يلي: tenacity أو pybreaker أو حلقات إعادة محاولة مكتوبة يدويًا.
Python
scriptplan
المحرك + CLIمنتج
محرك متوافق مع TaskJuggler (.tjp) لتخطيط الموارد والجدولة: الأشخاص والآلات عبر الزمن، والتبعيات، والتقاويم، ومخرجات Gantt.
لا يُستبدل أبدًا بما يلي: جداول البيانات أو حسابات التواريخ المرتجلة.
متتبع تذاكر لكل مستودع مع مواصفات EARS وذاكرة دائمة ودروس مستفادة. يتبع كل طلب هندسي دورة الحياة الإلزامية مفتوح ← قيد التنفيذ ← مغلق.
يتحول كل طلب إلى مواصفة EARS في تذكرة، مع نسخة في دليل SPECS/ الخاص بالمستودع.
لا يُستبدل أبدًا بما يلي: مهام TODO غير متتبَّعة.
CLI
08/ تفضيلات الحزمة التقنية
Prism
خدمة مستضافةمنتج
بوابة LLM متوافقة مع OpenAI وAnthropic يمكنها وضع عدة مورّدين خلف اسم نموذج واحد. ويوجّه نشرنا الطلبات إلى مزوّد واحد في المنبع دون تحويل تلقائي عند الفشل، وهو مزوّد LLM الداخلي لاستدعاءات النماذج في الأدوات.