كيف تعلمت أن تأخذ أقسامًا معمارية

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



خطة



من المهم جدا الحصول عليها. حتى لو ارتكبت خطأ في مكان ما ووجهت الطريق الخطأ في تفكيرك ، فإن النهج المنظم العام سوف يلعب في يديك. في البداية ، يمكنك الصراحة بشكل معتدل وسؤال الضيف عن التفاصيل ، ولكن بدءًا من نقطة معينة (والتي تتوافق في خطتي أدناه مع النقطة 3) يجب أن تكون لديك المبادرة تمامًا ومن الأفضل عدم التخلي عنها حتى النهاية. كانت خطتي مثل هذا:



  1. اجمع قائمة بالميزات الرئيسية واكتبها في زاوية اللوحة. ستساعدك هذه الحيلة البسيطة على تذكر قيد أو افتراض مهم.
  2. افهم الخصائص التقنية التي يجب أن يتمتع بها النظام: RPS المتوقعة ، نطاق أوقات الاستجابة المقبولة ، التوقعات من حيث الاتساق والموثوقية.
  3. قم ببناء أبسط حل لجهاز واحد يعمل بطريقة ما. لست بحاجة إلى البدء بـ 20 مركزًا للبيانات حول العالم ، فمن الأفضل كثيرًا أن تبدأ في هذا الأمر تدريجيًا.
  4. ابحث عن نقطة فشل واحدة أو عنق زجاجة في الأداء.
  5. قدم خيارًا واحدًا أو أكثر لحل المشكلة ، واشرح بوضوح إيجابيات وسلبيات كل منها
  6. اختر أحد الخيارات وانتقل إلى الخطوة 4 ، إذا كان لا يزال هناك وقت ، وإذا انتهى ، فانتقل إلى العنصر التالي
  7. قم بتقدير حجم التخزين ، وعدد الخوادم ، وعرض النطاق الترددي للشبكة ، واكتبها كلها بعناية
  8. المكافأة: تحدث عن الميزات الإضافية ، وتنفيذ ML ، ومقاييس المنتج ، والتجارب


التحكم في الوقت مهم جدا. حاولت قضاء 5-10 دقائق في أول نقطتين و 5 دقائق في آخر نقطتين.



المفاضلات



يجب التحدث بها ، حتى لو بدت واضحة. بعد تقديم أي جزء جديد ، من المهم أن تقول شيئًا مثل "أضفنا عنصرًا جديدًا ، وهذا سيحل كذا وكذا مشكلة ، لكننا سندفع مقابل ذلك". يمكن أن تكون المقايضات شيئًا مثل هذا:



  1. أي مكونات نظام جديدة أو زيادة في عدد قطع الغيار الموجودة تحل مشكلة سرعة التحميل / الاستجابة ، ولكن تضيف الصداع مع الدعم والنشر.
  2. تعمل المشاركة على حل قيود التحميل والمساحة ، ولكنها تضيف مشاكل إعادة التجزئة في المستقبل.
  3. يحل التخزين المتماثل مشكلة الحمل والموثوقية ، ولكن في حالة النسخ المتماثلة للقراءة والكتابة ، فإنه يجعلك تفكر في القيم الفاسدة ومعارضة التوافر والاتساق
  4. تحل ذاكرة التخزين المؤقت مشكلة التحميل ، ولكنها تجعلك تفكر في القيم الفاسدة وتماسك ذاكرة التخزين المؤقت.
  5. يمكن تعديل الحل الخاص بك بسهولة وتحسينه وفقًا لاحتياجاتك ، ولكن عليك كتابته أولاً.
  6. الشيء الجيد في الحل الحالي هو أنه موجود بالفعل ، لكن عليك اكتشافه.


أعداد



يعلم الجميع بأرقام الكمون التي يجب على كل مبرمج معرفتها ، لكن الأرقام الموجودة على الرابط ، في رأيي ، ليست منظمة بالطريقة الأكثر ملاءمة وقمت بإعادة تنسيقها أثناء التحضير لسهولة الحفظ.



في النهاية ، ما يلي مهم:



  1. تعرف على الوقت الذي تقضيه في قراءة البيانات من مستويات مختلفة من ذاكرات التخزين المؤقت للمعالج والذاكرة و SSD و HDD والشبكة.
  2. تذكر وقت الرحلات ذهابًا وإيابًا داخل مركز البيانات وحول العالم ، بالإضافة إلى الحد الأدنى من زمن الوصول الذي يعتبره الشخص متأخرًا (حوالي 100 مللي ثانية).
  3. لكي أكون قادرًا على تحويل البايت بسرعة إلى غيغا بايت ، والنانو ثانية إلى ثوان ، وما إلى ذلك ، فقد طورت هذه المهارة في حد ذاتها في عملية التدريب.


ممارسة



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



  1. بحث (يفضل مع القدرة على تحديث الفهرس في الوقت الحقيقي)
  2. (gfs, haystack)
  3. kv- (cassandra, dynamo)
  4. Message queue pub-sub (kafka)
  5. (twitter, instagram, facebook)
  6. , , - (whatsapp, telegram, battle.net)
  7. , - (skype, twitch, youtube)




  1. Grokking the system design interview. , , .
  2. System design primer. , .
  3. ( ). . , , .
  4. مجموعة كبيرة من قابلية التوسع العالية
  5. حسنًا ، أهم مورد هو أصدقاؤك ومعارفك الذين يعرفون كيف تعمل أنظمتهم ويمكنهم إخبارك عنها.


العديد من مقاطع الفيديو والقنوات الجيدة



1. قابلية التوسع

2. مقدمة لمقابلات تصميم النظم والنظم

3. أربعة أنماط معمارية للأنظمة الموزعة

4. Dropbox في 2012

5. Slack

6. Twitter

7. Reddit

8. Instagram

9. Youtube في عام 2007

10. قناة حول تصميم النظام من أحد المواطنين

11 . قناة أخرى

12. وقناة أخرى



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



All Articles