وصفت
مقابلة الترميز نموذجي في وقت سابق. بالإضافة إلى الترميز ، هناك دائمًا سؤال حول تصميم النظام. (كبير) تصميم النظام. في حالة المقابلات على SRE ، هذا وحش أكثر إثارة للاهتمام (بالنسبة لي) - NALSD. تصميم نظام كبير غير مجردة. الفرق الرئيسي بين SWE و SRE هو بالتحديد في هذه الأحرف "NA".

ما هو الفرق ، وكيف نستعد له؟ لنلقِ نظرة على مثال. على سبيل المثال ، سوف نأخذ شيئًا ماديًا للغاية ، شيء لن يطلبه أحد أبدًا لإجراء مقابلة حقيقية (في Google) :)
على سبيل المثال - دعنا نصمم مكتبة. للكتب الورقية ، المعتادة. تمت كتابة النص بأكمله أدناه في جلسة واحدة خلال ساعة تقريبًا لإظهار ما يمكنك فعله وما هو مهم تقريبًا. سامحني على هذا الفوضى ، لكني أعتقد ذلك (ومن ثمّ).
سؤال NALSD: تصميم مكتبة عامة.
أولاً ، نحن مهتمون بخصائص الحمل ، أو نفترض افتراضًا معقولًا. نظرًا لأن هذا سؤال حول نظام قابل للتطوير ، فهذه مدينة بحد أدنى مليون شخص. الأمر يستحق النظر في الخيارات - مبنى واحد كبير ، أو مكتبات المقاطعات بالإضافة إلى التخزين. يبدو لي أن الأخير أكثر منطقية. خاصة إن لم تكن مدينة ، لكن مدينة.
لذلك ، سوف نركز في الوقت الحالي على نظام مدينة واحدة (مع بعض التحفظات ، يمكننا تطبيق آلية مماثلة على مستوى أعلى للتحجيم إلى العديد من المدن). لذلك ، المدينة هي مليون شخص. نجمع الأرقام من أجل راحة التقديرات - فليكن هناك مليون قارئ محتمل. سوف يقرأ القراء في أي وقت بشكل مستقل عن بعضهم البعض. حتى نتمكن من معرفة ذلك باعتباره عملية بسيطة بواسون. لكن عملية "الفرار" عادة ما تكون صعبة ، لذا اتخذ خطوة تبسيط أخرى واتخاذ فقط 1٪ من القراء يريدون أخذ كتاب يوميًا. في المجموع ، للحصول على مزيد من الحسابات ، نأخذ 10000 كتاب يوميًا.
مهمتنا هي توفير إمكانية إصدار 10000 كتاب يوميًا (بالإضافة إلى إعادة 10000 كتاب في أي يوم آخر في المستقبل ، بالمناسبة) في مدينة المليون. في هذه المرحلة ، تتلاشى بالفعل مسألة المكتبة الأحادية أو المقاطعة (بالمناسبة ، لكي يصبح المليون شخص جميعهم من القراء المحتملين ، يجب أن يكونوا قادرين على الوصول إلى المكتبة في فترة زمنية معقولة ، وإلا فإن الرغبة في أخذ الكتاب ستنخفض بالتأكيد مع انتهاء المهلة المحددة). لذلك ، نحن بحاجة إلى تقييم قدرة كل مكتبة محلية. من الصواب القيام بذلك مع مراعاة الكثافة السكانية وسهولة الوصول إليها ، لكن بما أن هذا لا يؤثر بشكل كبير على النظام نفسه ، وبساطة الحسابات ، فلنتخيل أننا نضعها في وضع متساوٍ. ولكن هذا لا يزال لا يعني كيف يمكننا مشاركتها. من الواضح أن وضع 10000 مكتبة في كتاب واحد بالتساوي في جميع أنحاء المدينة أمر غير منطقي ، لذلك عليك أن تفهم ما المنطقي. نترك إلى المستوى أدناه.
لذلك ، مكتبة واحدة. لكي يكون له معنى ، يجب على معظم الذين يأتون العثور على الكتاب الذي يحتاجونه. هذا يعني أننا سنحتاج إلى الاحتفاظ بسجل وتوقعات لأكثر الاستعلامات شيوعًا والحفاظ على هذه الكتب جاهزة. ثم ، نحن بحاجة إلى الحفاظ على تشكيلة من حيث المبدأ. مرتجلاً ، أود أن أقول إن المكتبة المحلية يجب أن تضم ما لا يقل عن 1000 عنصر ، تتصدرها مجموعة كبيرة من النسخ ، وأكثرها نسخًا ، وأقلها نسخًا. تتم قراءة كتاب متوسط في مكتبتنا من 3 أيام إلى 2 أسابيع (في الواقع ، تعتمد السمة على الكتاب ، مطلوب تحليل منفصل هنا) ، ونحن نأخذها على قدم المساواة مع متوسط الأسبوع والمضي قدما. أي أن الكتاب الذي تم التقاطه مفقود لمدة أسبوع تقريبًا ، لذلك يجب تخزين الكتب الكبرى لمدة أسبوع (ثم يبدأون في التعافي من العائدات).
لنأخذ معدل تضخم متوسط قدره 6. لذلك تبدأ سعة التخزين عند 6000 كتاب. أقل يعني أن هذا ليس سوى قمة صغيرة ، والتي لا يزال من الممكن أن تساعد في بعض الحالات (على سبيل المثال ، جزيرة مع "الشفق" في سوبر ماركت بالقرب من غرفة لعب الأطفال) ، لكننا سنتركها في الخارج الآن.
في حالة "التوازن" ، يعودون ويأخذون يومًا متساويًا تقريبًا ، بالإضافة إلى أو ناقص الانتثار ، لكننا ما زلنا بحاجة إلى القدرة على قبول عدد متزايد من أرقام الذروة للعائدات (على سبيل المثال ، بسبب التزامن الخارجي مثل الأعياد أو تغيير الموضة). هذا صحيح - لمحاكاة. لكن هنا والآن سنأخذ ثلثًا كحاجز مؤقت. إجمالاً ، نحن ندعم 6000 كتاب متوفر للإصدار ، بالإضافة إلى مكان لـ 2000 كتاب احتياطي آخر.
لذلك ، نحن بحاجة إلى وحدة يمكنها تخزين 8000 كتاب. التجديد اليومي مكلف للغاية ، مما يعني أنه لمدة أسبوع أو أسبوعين. حوالي أسبوعين ، 6000 كتاب ، مع وجود تحيز في العائدات ، حوالي 300 كتاب يوميًا. في وقت الافتتاح ، يمكننا تسجيل جميع الكتب البالغ عددها 8000 من أجل إنشاء 2000 الأولي المتداول قبل أن يعود الأول. 2000 لمدة 3 أيام = حوالي 600 كتاب يوميًا ، بالإضافة إلى مخزن مؤقت = 800 كتاب يوميًا.
دعنا نقدر حدود النطاق الترددي والتخزين. كتاب واحد يأخذ في المتوسط 2 سم من المساحة الخطية ، 8000 كتاب - 160 متر. بدوره 4 مرات عموديا ، 40 مترا. نحن نقتحم حتى الرفوف التي يبلغ طولها 5 أمتار ، ونحصل على 8 رفوف من 4 أرفف بطول 5 أمتار. سيكون بمقدور أمين مكتبة (أو أمين مكتبة روبوت) العمل مع رفين ، واستخراج كتاب واحد سيستغرق ما يصل إلى 5 ثوان للوصول إليه ، و 5 ثوانٍ لإخراجه أو وضع الكتاب ، و 5 ثوانٍ للخلف ، وإجمالي 15 ثانية. سيوفر لنا 4 أمناء مكتبة حوالي 15 كتابًا في الدقيقة كحد أقصى ، أي 900 كتاب في الساعة من المستودع تقريبًا.
نضيف وقتًا لمعالجة الطلب (10s) ، والبحث (5s) ، والدخول في نظام الاستلام والإصدار (2s) => 400 كتاب في الساعة. لذلك يمكن للتخزين في ذروته إصدار 400 كتاب في الساعة ، وبالتالي يمكن الوصول إلى 800 كتاب في اليوم في ساعتين عمل.
الآن نعتبر الخصائص الأخرى: من أجل إعطاء 400 كتاب في الساعة من قبل 4 أشخاص ، من الضروري استيعاب 100 شخص في غرفة الانتظار في طابور أمام نافذة المعالجة ، وحتى لا يخلق هؤلاء الأشخاص حشودًا عند المدخل والخروج. أي أن مجموعة المدخل يجب أن تتجاوز 400 شخص في الساعة في كلا الاتجاهين. اتضح أن المحدد الرئيسي لن يكون حتى التخزين ، ولكن قدرة قاعة ومجموعة المدخل.
هذا يعني أنه سيكون من الممكن العثور على النسبة المثلى للتخزين والصالة مع حسابات أكثر دقة.
لذلك ، مع فرز الوحدة ، نعود إلى المستوى أعلاه. قدرنا إجمالي الحمل على المكتبة بحوالي 10000 كتاب يوميًا ، وحسبنا وحدة واحدة بواقع 800 كتاب يوميًا ، أي أننا نحتاج إلى 12.5 وحدة. مع التوزيع الجغرافي في جميع أنحاء المدينة ، سيتم الوصول إلى وحدة واحدة أو وحدتين بديلتين (على حدود المدينة) أو حتى 3-4 (من الداخل) لكل قارئ ، مما يسمح لك بتخفيف قمم حركة المرور قليلاً و / أو زيادة الطلب على مواقع محددة.
نعلم أيضًا أنه في أي لحظة يمكن إغلاق أي مكتبة (حريق أو تفتيش صحي أو طلاء مقابض الثلاجات أو أي شيء آخر) ، مع زيادة في عددها ، واحتمال سقوط اثنين من العمر ، وبالتالي نحتاج إلى وحدة احتياطية ل كل 5-6 وحدات. في المجموع ، يجب أن تضمن 15 وحدة الأداء المطلوب ، بشرط أن تحافظ على المخزون المقدر في مستودعاتها.
للحفاظ على المخزون المقدر ، سنحتاج إلى تحديث مرة واحدة في الأسبوع أو أسبوعين (كنا نظن أعلاه اثنين) حوالي نصف تشكيلة لمتابعة الاتجاهات وما إلى ذلك. وهذا يعني أن كل وحدة تحتاج إلى نقل وتصدير 4000 كتاب كل أسبوعين. مع كل عملية استيراد وتصدير ، يجب إزالة هذه الكتب البالغ عددها 4000 كتاب من المستودع ثم يتم وضع كتب أخرى هناك. في 400 كتاب في الساعة ، يستغرق تحديث المجموعة 10 ساعات كحد أقصى للحمل. والتي ، على ما يبدو ، ليست سيئة للغاية ، مرة أخرى ، مع التحميل الشامل ، سوف تسير العديد من الأشياء بشكل أسرع ، ومع ذلك ، فإن الحفاظ على التشكيلة يستغرق 5 مرات أكثر من العمل مع السكان.
يبلغ متوسط الكتاب (2 سم * 20 سم * 30 سم) حوالي 1.5 لتر ، أي 4000 كتاب = 6 أمتار مكعبة. تناسبها بسهولة في غزال واحد. يبلغ وزن المتر المكعب من الورق 600 كجم ، أي 6 أمتار مكعبة يبلغ 3.6 طن. القدرة الاستيعابية للغزال هي طن ونصف ، لذلك ستكون هناك حاجة إلى ثلاث غزال. بالإضافة إلى نسخة احتياطية واحدة. لدينا 15 وحدة ، يتم تحديثها كل أسبوعين ، مع توزيع متساوٍ عند الحد الأقصى ، يتعين علينا إضافة غزال آخر.
ولم يكن لدينا متسع من الوقت للتفكير في أين وأين تم نقل هذه الغزلان ، لذلك تظهر مستودعات الموردين ونقاط تفريغ الكتب التي فقدت أهميتها على الرسم البياني ...
لذلك انتهى الوقت. ما هو غير طبيعي في سؤال NALSD؟ قابلية التوسع يجب أن يكون في أي تصميم نظام كبير. الشيء الرئيسي هو
تماسك .
لقد قدمت الكثير من الافتراضات والافتراضات المذكورة أعلاه ، ولكن كانت جميع التقديرات اللاحقة تستند إلى تقديرات سابقة. بالنسبة للأرقام ، حاولت أيضًا إعطاء "كيفية التقييم بشكل صحيح" ، ومع ذلك ، فمن السهل جدًا أن تنسى القيام بذلك ، تتعب وتنسى. لا يزال من السهل للغاية التمسك ببعض الأرقام من الذاكرة ، دون تفسير ... ولكن نظرًا لأن التصميم ملموس ، إذا تبين أن أي من الافتراضات خاطئة ، فيمكن إصلاحها وإعادة سردها لاحقًا.
كما أتذكر الآن ، في مقابلتي مع التقديرات ، أخذت IOPS من قرص 600 ، وذلك ببساطة لأنني قمت بتحسينه مؤخرا وتتعامل مع مجموعة واحدة ، حيث أعطى _array_ 600 IOPS ... سألني الشخص الذي تمت مقابلته قليلاً - 600 IOPS على القرص؟ : دخلال المقابلة ، يستطيع القائم بإجراء المقابلة تصحيح أي من افتراضاتك. أو أضف نوعًا من القيود (التي لم تكن تعرفها أو لم تفكر فيها أو لم تسأل عنها أو فقط التغيير المعتاد للمعارف التقليدية أثناء الطيران). في الوقت نفسه ، نظرًا لأنك تعمل حصريًا بأرقام محددة ، فسيكون هذا مجرد تحديث تافه للأرقام.
إذا تسبب تعديل الافتراض في إعادة تصميم النظام ، فهذا إما خطأ في التصميم أو تعديل غير صحيح ، أو يتجاوز قابلية تطبيق النظام ، وهو أيضًا ليس موقفًا نادرًا في الحياة الحقيقية. من المهم عدم تفويت مثل هذه اللحظات وتقييم الأرقام المستلمة للواقع خلال مرحلة التصميم وأي تعديلات.
باعتبارها SRE ، نحن ملزمون بالتفكير فيما يتعلق بتوسيع نطاق الأنظمة الحقيقية في ظل القيود الحقيقية للأجهزة الحقيقية. قد تكون هناك
خوارزمية ممتازة تتبادل تكاليف الوقت الضخمة مقابل مقدار صغير من الذاكرة ... ولكن لا يزال ، لا يمكنك وضع وحدة تخزين صغيرة من ذاكرة الوصول العشوائي (RAM) على كور معالج واحد في ظروف حقيقية. لذا ، إذا كانت لدينا ذاكرة وصول عشوائي (RAM) ، فلدينا عشرة آلاف معالج على الأقل. او عشرين او ثلاثين. ويجب أن نبحث عن الأمثل ، وليس العالمي ، ولكن هنا والآن ، في ظل ظروف معينة.
لا تحتاج إلى تذكر الأرقام الدقيقة ، ولكن يجب أن يكون لديك فكرة عن الترتيب: نفس IOPS ، الذي يوجد به محرك الأقراص الصلبة حوالي مائة ، ويحتوي SSD على مئات الآلاف. لكن هذه مئات الآلاف تتماشى مع نسبة تكلفة تيرابايت من الأقراص الصلبة إلى تكلفة تيرابايت من محركات الأقراص الصلبة باعتبارها واحدة من ثلاثة إلى أربعة. وهذا لا يحسب التسخير - مكان في الحامل ، شفرات بالنسبة لهم ، منافذ على مفاتيح التبديل وغيرها من الأشياء التي تتوقف عن أن تكون فلسا واحدا عندما يذهب مشروع القانون إلى بيتابايت.
استرخ الآن قليلاً على مقعدك واسترخ وحاول تصميم نظام لتزويد بيض الدجاج الطازج عن طريق الاشتراك.
إذا كانت هناك رغبة في المشاركة مع الزملاء الناطقين باللغة الإنجليزية ، فهناك
خيار باللغة الإنجليزية (وكذلك في
مركز اللغة الإنجليزية ).