sbarbase
المحتويات

العزل والثقة

ما هو

لكل بيئة قاعدة بياناتها وحسابات دخول خدماتها ومفاتيحها، فلا يصل مستخدمو تطبيق ورموزهم إلى بيئة أخرى. بعض الأجزاء مشتركة عمدًا: محرك PostgreSQL وStorage والبوابة والخادم نفسه. وكل جزء مشترك موضع يستطيع فيه عطل بيئة واحدة أن يصيب غيرها.

لماذا

الخيار: المشغّلون موثوقون، وزوار التطبيقات ليسوا كذلك. من يدير الخادم ويكتب SQL لبيئاته موثوق. أما زوار التطبيقات، برموزهم المجهولة أو رموز الدخول، فغير موثوقين. يناسب ذلك المستخدم الأساسي، وهو مطوّر واحد أو وكالة تشغّل تطبيقات لعملائها، ويُبقي التصميم صادقًا فيما يحمي منه فعلًا.

البديل المرفوض: استضافة مشتركة لعملاء لا يثق بعضهم ببعض. بيع المساحة لهم يتطلب عزلًا عن المشغّل نفسه وعن أي SQL يُكتب، ولا يقدر محرك PostgreSQL مشترك على ذلك. من يحتاج هذا المستوى فليشغّل نسخًا مستقلة كاملة.

الخيار: بيانات اعتماد منفصلة، لا مخططات منفصلة فقط. الفصل بالمخططات داخل قاعدة واحدة يترك كل البيئات خلف Auth واحد وأدوار API واحدة. أما قاعدة لكل بيئة، بحسابات دخولها وقواعد اتصال لا تسمح إلا لحساب واحد بالوصول إلى قاعدة واحدة، فتُبقي أي سر خدمة مسرّب داخل بيئته.

كيف بنيناه

زوار التطبيقات غير الموثوقين لا يصلون إلى الخادم إلا عبر وكيل TLS والبوابة بمفتاح عام؛ والمشغّلون الموثوقون يستخدمون لوحة الإدارة أو الخادم مباشرة؛ ولكل بيئة Auth وREST وقاعدة بيانات وحسابات دخول خاصة بها، بينما محرك PostgreSQL وStorage حدود فشل مشتركة

وكيل TLS وحده يواجه الشبكة، والمحرك وStorage حدود فشل مشتركة.

طلب بمفتاح المشروع أ على مسار البيئة أ يصل إلى REST الخاص بها وإلى القاعدة أ؛ والمفتاح نفسه على مسار البيئة ب يتلقى 401 عند البوابة؛ وحساب دخول يحاول قاعدة بيئة أخرى ترفضه قواعد الاتصال في PostgreSQL

لا خلط للبيانات: مفتاح البيئة أ ورموزها وحساباتها لا تفتح إلا قاعدتها.

دفعة كبيرة على البيئة أ تملأ أماكنها الثمانية المضمونة وتستعير أماكن فارغة حتى سقفها 24 من أماكن البوابة الـ64، فتُقبل البيئة ب فورًا وتتلقى طلبات أ الزائدة 429؛ وخلف البوابة لكل بيئة حاوياتها بحدود للمعالج والذاكرة والقرص، وحدود اتصالاتها في المحرك المشترك

البيئة المزدحمة تستفيد من الخادم الفارغ، لكنها لا تأخذ أبدًا الحصة التي تحتاجها جاراتها. هذه الحدود غير معايرة تحت حمل مستمر.

ما يخص كل بيئة وحدها:

ما هو مشترك، ولذلك حدّ فشل مشترك:

الكود: lab/resource_policy.py (الفئات)، وlab/resource_admission.py وlab/pressure_admission.py وlab/connection_budget.py (القبول)، وlab/hba_authority.py (قواعد الاتصال)، وsrc/gateway/handler.ts (فحص المفاتيح).

الحدود

للتعمق

عدّل على GitHub