English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

ضيف
1 / ?

اثنين من اتجاهات المرور، خادم واحد

الترحيب

معظم الرسوم المتعلقة بالتصميمات تظهر مرور المرور في اتجاه واحد: العميل في الأعلى والخادم في الأسفل وضبط النقط في الأسفل. يحتوي الواقع على مرور في كلا الاتجاهين.

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

الخروج: يصل خدماتك إلى خدمات خارجية عبر هذا المسار. استدعاء معالج دفع API، استدعاء هدف webhook، إرسال طلب إلى شريك. عادةً من خلال خادم العكس أو بوابة NAT مع قائمة разреш.

تبدأ العديد من المخططات بمحول يعمل على كلا الجانبين. يعمل بشكل جيد، حتى يوم يفشل. يظهر نمط الفشل بشكل خفي، لا يظهر إلا بعد وجود كافٍ من الخدمات الداخلية، وتعلم دروسًا مهمة في فصل القضايا.

في نهاية هذا الدرس ستفهم:

- لماذا يمثل الانزلاق والخروج أنماط مرور مختلفة أساسًا مع محاور نمو مختلفة ومواقف فشل مختلفة

- NAT Hairpin و لماذا يحاول خادم العكس الاتصال بنفسه فشل

- الانقسام المعماري: يصبح الخادم واحد يصبح اثنين، وما يمتلك كل منها حصريًا

- مكاسب التجزئة الأمنية: يمكن لكل جانب تثبيت نفسه على أصدقائه الحقيقيين

- كيف يمكنك تحديد عندما يكون تصميمك البنائي الواحد قد عبر عن الحاجة إلى الانقسام

لماذا تتطلب الاتجاهات أدوات مختلفة

عملين مختلفين في حدود الشبكة

خصائص مرور الإنزلاق:

- يبدأ من قبل الأطراف الخارجية (الإنترنت الكبير)

- الحجم يتزايد مع قاعدة المستخدمين

- إلغاء TLS، توجيه الطلبات، تثبيت الحد الأقصى لكل مصدر

- مخاوف الأمن العميق: DDoS، الإساءة، التطفل

- يجب على IP العامة قبول الاتصالات من أي شخص

خصائص مرور الخروج:

- يبدأ من قبل خدماتك الخاصة (مجموعة صغيرة ومعروفة من العملاء)

- الحجم يتزايد مع الأنماط التواصل بين الخدمات والاستدعاء API الخارجي

- قائمة الأرقام IP المصدر المسموح بها في نقاط الوصول البعيدة (لديك IP خروجية ثابتة واحدة تثق بها الشركاء)

- مخاوح الدفاع في العمق: سرقة البيانات، الخدمات الداخلية المخترقة التي تستدعى

- يجب رفض الاتصالات من أي شخص غير خدماتك الخاصة

الاختلاف الرئيسي: الدخول يقبل المرور من العالم؛ الخروج يقبل المرور فقط من خدماتك. وضعهم على نفس الجهاز يعني أن الجهاز يجب أن يكون متاحًا من العالم (لدخول) ومتاح فقط من خدماتك (لخروج). القواعد الحدودية التي تفي بأحدها تعمل ضد الأخرى.

مسار النمو: يمكن لبعثة صغيرة إخفاء كليهما وراء IP واحد وآلة واحدة، لأن حجمها الصغير والقائمة القصيرة من IP الشريك مسموح بها. عندما يزداد حجم المشروع، يزداد الاحتكاك بين الأدوار، وعندما يأتي يومًا فشل نمط محدد (NAT hairpin) يضطر إلى التقسيم.

دخول مقابل خروج: مصادر مختلفة، وجهات مختلفة، متطلبات مختلفة

تشغيل شركة صغيرة كل شيء (محول العكس للإنزلاق، ومحول العكس / بوابة NAT الداخلية الخدمات) على وحدة واحدة مع IP عامة واحدة. يبدو هذا جيدًا لهم في وقت مبكر. اسمي نوعين محددين من مواقف الفشل أو الألم التشغيلي التي ستعاني منها هذه التصميم كلما نمت، وبالتالي توضيح السبب الكامن لكل منها.

الخطأ الذي يُجبر على التقسيم

قصة انقطاع الخدمة المنسوخة

صورة على تصميم تقسيم حقيقي يحدث في مجتمعات الإنتاج. تم تغيير الأسماء أدناه؛ الشكل هو متطابق تمامًا مع ما يضرب فرق في البرية.

تدير المنظمة جهاز برокси واحد في 203.0.113.5. يتعامل مع الدخول (منفذ 443 للعملاء) و الخروج (منفذ 1080 SOCKS5 للخدمات الداخلية التي تستدعى خارجًا). تعيش الخدمات الداخلية في مجتمعات خاصة وتصرف جميع المرور الخارجي عبر برокси SOCKS5 على 203.0.113.5:1080.

توجد إحدى الخدمات المضيفة وراء نفس 203.0.113.5 هي api.example.com. تقوم DNS العامة بتحويل api.example.com إلى 203.0.113.5.

الآن خدمة داخلية أخرى تحتاج إلى استدعاء api.example.com. مسارها الخارجي:

1. الخدمة الداخلية تتحول api.example.com203.0.113.5

2. الخدمة الداخلية ترسل الطلب عبر برокси SOCKS5 للخروج على 203.0.113.5:1080

3. ي попыт نفسه البرокси في فتح اتصال من نفسه إلى 203.0.113.5:443

4. رفض الاتصال. يجب أن يخرج ويعود إلى نفس NAT، الذي يرفض معظم أنظمة الشبكة هذا. لا يمكن للبرокси الاتصال بنفسه عبر IP العامة الخاصة به.

هذه هي NAT العمودية: باケット يخرج من NAT ويحتاج إلى دخول نفس NAT لوصوله إلى الوجهة. بدون دعم خاص بالطبقة العريضة، يتم حذف الباقة.

لماذا يظهر في وقت لاحق

في بداية مشروع الحياة، كل خدمة داخلية تتحدث إلى خدمات داخلية أخرى بواسطة اسم مستعار خاص (internal-api.local) أو لا تستدعى خدماتها العامة العامة. لم يكن هناك مسار عمودي.

ثم طُلب من خدمة أ تطلب api.example.com (اسم مستعار عام). نشأت مسار العمودي. رفض الاتصال. انقطاع الخدمة.

صقل الحل العرضي (جعل المولّد يمنح api.example.com عنوان IP خاص بدلاً من عام). السبب الرئيسي: كانت هناك جهة واحدة تقوم بمهام متعددة.

NAT العمودية: الباقة تخرج ولاتستطيع دخول نفس NAT

الفرع المعماري

تصبح جهة واحدة جهتين

الحل النظيف: فصل المقدم إلى جهتين.

الخادم المدخل (IP عامة 203.0.113.5):

- كادي / عكس الربط على منافذ 80، 443

- تسجيلات DNS العامة ت指 هنا

- استضافة api.example.com، app.example.com، إلخ

الخادم الخروج (IP عامة مختلفة 203.0.113.99):

- SOCKS5 / عكس الربط على منفذ 1080

- يقيّد جدار الحماية الوصول إلى الاتصالات الواردة إلى أرقام IP داخلية فقط

- تسير جميع الطلبات الخارجية من الخدمات الداخلية عبر هذا العنوان

ماذا يكتسب هذا:

1. العمودي تم حلها. خدمة داخلية تطلب api.example.com تسير خارجياً عبر 203.0.113.99 (خروج)، ثم تتصل بشكل طبيعي مع 203.0.113.5 (مدخل، IP مختلفة). يختفي حلقة NAT لأن الأرقام IP تعيش على أجهزة مختلفة.

2. عزل الأمن. يمكن أن يقفل جهاز الخروج للجدار الحمائي إلى مجموعة صغيرة من أرقام IP داخلية. يظل جدار الحماية للخادم المدخل مفتوحًا للعالم. مجموعتين من القواعد، كل منها يعبر عن دور واحد بشكل صريح.

3. تكبير مستقل. يمكن تكبير عرض المدخل حسب مستخدمي الموقع؛ يمكن تكبير عرض الخروج حسب نشاط الخدمات الداخلية. تحديث واحد دون الاتصال بالآخر.

4. عزل الأخطاء. لا يؤدي تكوين خروج غير صحيح إلى كسر الموقع العام. لا يؤدي هجوم DDoS ضد الموقع العام إلى جعل مساحة الخروج مزدحمة.

5. نموذج ذهني أكثر وضوحًا. لكل جهاز وظيفة واحدة. يفكر المهندسون حول القضايا المتعلقة بالدخول دون التفكير في الخروج، وعكس ذلك.

بعد الانقسام، تحتاج خدمة داخلية إلى استدعاء `api.example.com`. مرر بباقة جديدة من الخدمة الداخلية إلى الخادم الخلفي للخدمة. احتو على: أي IP يصل الخدمة الداخلية إلى أولاً، ما يفعله ذلك الجهاز مع الطلب، أي IP يرسله إلى التالي، ومنذ أين يذهب الرد.

خمسين محور، ومختارات التكبير والتصغير

التكبير المستقل

قبل الانقسام، كانت النمو في أي اتجاه يؤثر على نفس الجهاز. بعد الانقسام، تم توفير كل اتجاه بموارد خاصة به.

تكبير الدخول: يتكبر مع مستخدمي الموقع. تتخذ قرارات القدرة على التكبير في الطبقة التي تواجه المستخدمين (مزيد من أفراد استرجاع العكس، وأكوام أكبر من VMs، و CDN أمامها). يتم حساب ميزانية الباندويث ضد حركة المرور الخاصة بالمستخدمين في ذروتها.

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

عزل الفشل: هجوم DDoS ضده للدخول العام لا يأكل الباندويث للخروج (يستمر استدعاء معامل الدفع). انهيار خادم الخروج لا يؤدي إلى إغلاق الموقع العام (المستخدمون يستمرون في الوصول إلى الموقع؛ فقط استدعاءات الخروج الخارجية تفشل).

متطلبات جودة الخدمة المختلفة: توفر الخروج العام مهمة للمستخدمين (انقطاع التيار الظاهر للموقع); توفر الخروج مهمة للمشغلين (خلفيات الفشل التي قد تأخذ وقتًا أطول للكشف عنها). يمكن لكل جانب حمل متطلبات جودة الخدمة الخاصة به.

خادمات الخروج المتعددة

عندما تصبح دور الخروج جهازًا مستقلًا، يأتي الخطوة التالية الواضحة هي تشغيل عدة أجهزة خروج خلف ماسح الشحن للتوافق. لكل خدمة داخلية جديدة، يتم تحديد اسم الخادم الخاص بالخروج (الذي يُحول إلى مجموعة الماسح الشامل) بدلاً من تحديد IP واحدة.

درس مشابه للنظم المتوزعة: بمجرد أن تصبح الطبقة بلا حالة وتمتلك دورًا خاصًا بها، يمكن تكرارها بسهولة.

شريك جديد لدمج

تدير مؤسستك الانقسام بين الدخول والخروج كما هو مصمم. يحتوي خادم الخروج على IP عامة ثابتة (203.0.113.99) التي تم السماح بها مع ثلاثة APIs الشركات الحالية (معامل دفع، جسر SMS، مقدم خدمات البريد الإلكتروني).

فريق منتج يرغب في إضافة تكامل رابع: نظام توصيل ويب هوكي يُدعى إلى نقاط الوصول للمستخدمين في جميع أنحاء العالم. توقعات الحجم: 10,000 مكالمة في الدقيقة، مع انفجارات إلى 30,000.

تقرر: هل ينتمي هذا الدمج الجديد إلى خادم الخروج الحالي، أم أنه يحتاج إلى مسار خروج مستقل؟ تفكر في الباندويث، وعزل الفشل، وعندما يكون الأمر كذلك، هل تحتاج إلى تحديث القوائم المسموح بها مع الشركاء في أي حالة؟

تصميم حدود شبكة للخدمة المتزايدة

التجميع

لقد تعلمت لماذا تتطلب الدخول والخروج أدوات مختلفة، وفشل NAT hairpin الذي يضطر الكلام في الأساطيل الفعلية، وكيف تتراكم التجزئة المستقلة، الأمن التجزئي، والتجزئة الفشلة بمجرد وصول الانقسام إلى الهدف.

استخدم الأربعة جميعها.

تدير شركة سaaS متوسطة الحجم ثلاث مناطق فرعية للمنتجات (app، api، admin) ل مستخدميها، بالإضافة إلى أربعة انتماءات خروجية (Stripe، Twilio، SendGrid، نظام توصيل ويب هوكي للعملاء). يعيش كل شيء وراء جهاز مراقب واحد في IP عامة واحدة. بدأت في تلقي تقارير عن فشل hairpin المتقطع عندما يحاول الخدمات الداخلية الاتصال بـ api.example.com. يرغبون في تصميم حل دائم.

اقترح تركيبية الدخول / الخروج لهذه الشركة. قم بمناقشة: عدد الماكينات، أي IP تخدم أدوارًا، حيث تُوجه كل منطقة فرعية DNS، التي تُشترك في مسار الخروج للانتماءات الخارجية (والتي يجب فصلها)، وشرح قلق مراقبة واضح جديد يتيح التصميم الجديد ولم يكن متاحًا في التصميم القديم.

أين يذهب هذا الدورة التالية

أين يذهب هذا الدورة التالية

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

درس القادم (cs_distsys_failure_modes_and_blast_radius) يمتد جدول الأعمال للتجزئة الفشلة. ستراقي تقرير DNS-SERVFAIL المنسق، وتحدد نمط الفشل المتسلسل، وكتابة أعمال بدون مسؤولية تargets أنظمة بدلاً من الأشخاص.

درس المرافق: geometry_of_ingress_egress_separation يقوم بتحويل القسمة كرسوم بارتيتية وتحليل النقاط المقطعة والانشطار في الشبكة ومتى ما يخبرك نظرية الرسم البياني بالحدود الشبكية.

جيد جدا. سيرًا على الورق.