كيسي يشرح انقطاع AWS | الستاند أب

TThe PrimeTime
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00ستكون هذه الحلقة من البودكاست مميزة للغاية لأن كيسي سيقدم المقدمة.
00:00:05كيسي، عن ماذا سنتحدث اليوم؟ مرحباً بالجميع وأهلاً بكم في البودكاست.
00:00:14رقم 45، 6 أفضل بودكاست تقني على سبوتيفاي وفقاً لأحدث...
00:00:22شيء ما.
00:00:23حقيقي..
00:00:29على أي حال، آسف.
00:00:30اليوم في البودكاست، أردت تناول موضوع معين.
00:00:34سأتحدث عن انقطاع خدمة AWS الذي حدث في أكتوبر، لكنني أفعل ذلك لأنني أردت الحديث عن فكرة أكبر، وهي مفهوم الفهم الحقيقي لشيء ما مقابل مجرد القول بأنك تفهمه..
00:00:49أحد الأمور التي تحدث كثيراً، خاصة للأشخاص الذين هم في بداية مسيرتهم البرمجية، مثل المبرمجين المبتدئين أو ما شابه، عندما تبدأ في هذا المجال - وأعلم أن هذا كان ينطبق علي بالتأكيد - تريد أن تبدو كأنك تعرف الأشياء، أليس كذلك؟ لا تريد أن تبدو وكأنك لا تفهم ما يحدث.
00:01:11لذا هناك الكثير من الضغط الخارجي، سواء كان موجوداً فعلياً أم لا، تشعر بأنه يجب عليك أن تقول إنك فهمت شيئاً ما أو تتظاهر بفهمه، حتى لو كان غامضاً بعض الشيء أو لم تستوعبه تماماً..
00:01:26وحتى لو لم يكن خطأك، حتى لو لم يتم شرح الأمر بشكل صحيح أو لم يتضمن معلومات مهمة، فأنت لا تزال مدفوعاً للتصرف كما لو كنت تعرف ما هو، صحيح؟ لأن ذلك يجعلك تبدو أكثر ذكاءً أو على الأقل لا يجعلك تبدو مبتدئاً، أليس كذلك؟ ولذلك، أحد الأمور التي اكتشفتها على الأقل مع تقدمي في العمر والبرمجة، واكتساب المزيد من الخبرة البرمجية وما شابه ذلك، هو أنني الآن أطلب شرح الأشياء بشكل مبالغ فيه تقريباً.
00:02:00أنا لا أهتم إطلاقاً بأن أبدو غبياً..
00:02:03أقول مثلاً: انتظر لحظة، ارجع للوراء.
00:02:05لم أفهم ذلك الجزء.
00:02:06ماذا تقصد بهذا؟ أو ماذا يعني ذلك المصطلح أو ما إلى ذلك؟ لأنني الآن لا أهتم حقاً بذلك..
00:02:12لست قلقاً بشأن ذلك.
00:02:13وأريد أن أعرف فعلياً لأنني مررت بتجارب كثيرة في البرمجة اعتقدت فيها أنني أعرف شيئاً ما أو تظاهرت بمعرفته وعاد ليلدغني..
00:02:22أريد أن أعرف حقاً.
00:02:23أريد أن أكون متأكداً من أنه عندما يكون لدي تفسير لخلل ما أو أعتقد أنني أعرف سبب التباطؤ في الأداء، أفكر دائماً في خلفية ذهني: إذا لم أصل حقاً إلى جوهر المشكلة، فقد يكون شيئاً آخر.
00:02:38قد يكون السبب الحقيقي لا يزال مختبئاً هناك.
00:02:41وأنا لا أعلم لأنني لم أنظر إليه بالكامل.
00:02:44أنا فقط أتجاوزه لأنه مريح أو ما شابه ذلك..
00:02:48والسبب الذي جعلني أرغب في الحديث عن انقطاع DynamoDB هو أنه مؤخراً كانت هناك سلسلة من الانقطاعات البارزة.
00:02:57كان هناك انقطاع كبير أوقف Google واتضح أنه كان بسبب عدم معالجتهم لحقل فارغ، أليس كذلك؟ يعني في طريقة برمجتهم، كانوا يقولون حسناً، لدينا هذا الشيء.
00:03:08نحمّل بعض JSON وإذا لم يكن هناك شيء في JSON، فإننا نقوم بإلغاء الإشارة إلى مؤشر فارغ أو شيء من هذا القبيل، صحيح؟ كان الأمر حرفياً كذلك، أليس كذلك؟ وبعد ذلك كان هناك واحد مع CrowdStrike حيث أوقفوا العالم بأسره بشاشات زرقاء.
00:03:26وقدموا تفسيراً جيداً جداً له.
00:03:28قالوا إننا نقوم بأسلوب معين لتحديد حجم المصفوفة وكان لدينا قواعد كثيرة جداً، فتجاوزت المصفوفة حدها، أليس كذلك؟ وكانت هذه جيدة جداً عندما قدموا ما يسمونه تحليل السبب الجذري أو RCA، صحيح؟ عندما قالوا ها هو سبب توقفنا.
00:03:46عندما قرأتها، لم أشعر بأن هناك الكثير من الأسئلة التي لم تُجَب في ذهني.
00:03:51ربما لم أكن أعرف السطر الفعلي من الكود، لأنهم ربما لم ينشروا جزء الكود حرفياً، لكنهم أعطوني ما يكفي لأقول حسناً، أفهم كيف كتب شخص ما هذا الكود وأفهم الشيء الغبي الذي فعله، صحيح؟ يعني حسناً، لا تفعل ذلك الشيء.
00:04:08أفهم تماماً..
00:04:10مع انقطاع DynamoDB، لأنه طُرح في هذا البودكاست، صحيح؟ تحدثنا عنه عندما كان ذلك الشخص في متجر الجيتار، أليس كذلك؟ قال سمعت شخصاً يتحدث في الحانة، صحيح؟
00:04:24نعم.
00:04:25لا يُصدق.
00:04:25هنا نرى المبرمج بعيد المنال، مخلوق بسيط يقضي معظم وقته يعمل بمفرده، غالباً في الظلام، لكن ما هذا؟ شخص ما مخطئ على الإنترنت.
00:04:34يقفز المبرمج لدينا إلى العمل، ويصل إلى سرعات قصوى تبلغ 120 كلمة في الدقيقة قبل أن يومض موقع ويب بالوضع الفاتح..
00:04:42العدو الطبيعي لمحبي الأكواد هؤلاء يصدم صديقنا.
00:04:45توقفت المطاردة.
00:04:46سيتعين علينا الإمساك بهم في المرة القادمة.
00:04:48عندما لا يكونون على أجهزة الكمبيوتر الخاصة بهم، يمكنهم قضاء ساعات في رسم رموز بدائية، شيء يسمونه السبورات البيضاء.
00:04:55اكتشف الباحثون آلاف اللهجات غالباً مع استخدام أكثر من اثنتي عشرة لهجة في مكتب واحد.
00:05:00ومع ذلك، لم يفك أي لغوي شفرة الغرض منها بعد..
00:05:03مخلوقات مغرورة، تطورت أجسادهم على مر آلاف السنين لتكون قادرة على الجلوس في أوضاع غير عادية أثناء النظر إلى أنفسهم على الإنترنت.
00:05:12غالباً ما يستمر هذا لساعات عديدة باستخدام ذريعة أنهم ينتظرون مراجعة الكود، لكن عند السؤال عن سبب خمولهم الشديد.
00:05:20وأخيراً، بعد يوم طويل من إنجاز القليل جداً، فإن محاربي لوحة المفاتيح لدينا مستعدون للنوم.
00:05:27قراءة سريعة وينطفئ الضوء..
00:05:29تصبح على خير، أيها المبرمج الصغير.
00:05:30إذن كيف أنام بشكل جيد جداً في الليل؟ حسناً، لدي Sentry لمساعدتي في سحق تلك الأخطاء.
00:05:36ولا أتحدث عن أخطاء صغيرة جداً من ساوث داكوتا تموت في الشتاء.
00:05:41أتحدث عن أخطاء الغابة الكبيرة الشرسة.
00:05:44ولست خائفاً من أي منها، بالمناسبة، لكن يمكنني سحق تلك الأخطاء باستخدام Seer من Sentry.
00:05:51لذا كنت أكثر حماساً قليلاً بشأن هذا الموضوع للذهاب ورؤية مقدار المعلومات التي نشروها.
00:05:58وكنت قد قرأت بالفعل نوعاً ما بعد ذلك، كان لديهم ملخص حيث نشروا تحليل السبب الجذري وكان غامضاً جداً.
00:06:06كان تحليل السبب الجذري لا يشرح الكثير حقاً.
00:06:10ثم لاحظت أنهم نشروا عرضاً تقديمياً كاملاً في re:Invent في ديسمبر، أو أعتقد أنني لا أعرف إذا كان re:Invent في ديسمبر، لكن الفيديو ظهر في ديسمبر من عرض re:Invent التقديمي حيث غطوا هذا الانقطاع..
00:06:26لذا ذهبت وشاهدت كل ذلك.
00:06:28وبعد أن قرأت تحليل السبب الجذري بالكامل وشاهدت العرض التقديمي بالكامل، ما زلت أقول لا أرى تفسيراً فعلياً للخطأ هنا، أليس كذلك؟ كنت أحاول معرفة ما كان الخطأ الفعلي ولم يتم شرحه أبداً..
00:06:45لذا ما أردت فعله هو التحدث عن ذلك، وشرح لماذا لا أعتقد أنهم وضحوا ما كانت عليه المشكلة، واستخدام ذلك كمثال على أنني لا أعتقد أنه يجب على الناس أن يقولوا فقط: حسناً، فهمت ما كانت المشكلة.
00:06:57لأن الناس يردون علي ويقولون: دعني أشرح لك ما كانت المشكلة.
00:07:01ثم يشرحون نفس الأشياء فقط.
00:07:03وأنا أقول: هذه ليست المشكلة.
00:07:05صحيح؟ لذا الجميع لديهم حافز ليقولوا: أنا أفهمها، لأنني قرأتها.
00:07:09لكن لا، إذا لم تستطع إخباري ما كانت المشكلة الفعلية، فلم ننته بعد.
00:07:13صحيح؟
00:07:14يجب أن يكون لدينا ذلك الشرح الأكمل.
00:07:17إذن هل كل هذا منطقي؟ مثل ما أقوله؟ نعم.
00:07:19أولاً، أريد فقط أن أقول، لقد عرفت بالضبط ما كنت تقوله يا كيسي..
00:07:23من البداية مباشرة، صحيح؟ على الفور.
00:07:27كنت مثل: حسناً، أعرف، أعرف بالضبط ما تقوله.
00:07:32لا أسئلة من جانبي.
00:07:35لا عوائق.
00:07:36شكراً للجميع.
00:07:37أنا بخير..
00:07:39سأراكم يا رفاق غداً.
00:07:40تعلمون، لا مشكلة.
00:07:42أريد فقط أن أقول، أحب حقاً الاستماع إلى كيسي يتحدث في البودكاست عندما أستمع على سبوتيفاي، ولكن أيضاً الآن مباشرة، يمكنني الاستماع إليك تتحدث لمدة ساعة.
00:07:53تحية رائعة أيضاً لسبوتيفاي.
00:07:55كنت سأقول، كنت سأقول، خاصة عندما تستمع على سبوتيفاي، الجودة لا تصدق.
00:08:00تحصل أيضاً على الإضافات المجانية، صحيح؟ تحصل على كل الدردشة قبل وبعد الحلقة الفعلية.
00:08:06بدأنا ننشر نسخاً أطول وأطول على سبوتيفاي تحتوي على المزيد من الإضافات.
00:08:11نعم.
00:08:12محتوى أقل عن الموضوع الأساسي، لكن المزيد من الدردشة على سبوتيفاي لأن الجمهور المباشر يحصل على الدردشة..
00:08:19يمكنهم القدوم إلى هنا.
00:08:21يمكنهم سماع حديث عن تراش وإدمانه على البوكيمون، والذي ربما لا تعرف عنه حتى لأنك لم تكن، كنت تستمع لهذا على يوتيوب، صحيح؟ أنت لا، لن تحصل على سماع كل الأشياء الممتعة.
00:08:31هذا نوع من البيع الصعب لأول 10 دقائق من فيديو يوتيوب.
00:08:34إنه بيع صعب جداً لفيديو يوتيوب.
00:08:36مثل، سأشاهد أربعة رجال يتحدثون عن شيء لا أفهمه حتى.
00:08:39ويُسمى داينامو دي بي.
00:08:40نعم..
00:08:41بما أننا نبدأ البودكاست، ربما يجب علينا تقديم آدم.
00:08:43أوه نعم.
00:08:44هذه نقطة جيدة جداً..
00:08:45لم نفعل أي شيء على الإطلاق.
00:08:47مرحباً.
00:08:47أخبرنا قليلاً عن سبب وجودك في البودكاست اليوم..
00:08:50لأنني في منزل تي جي، السبب الأول، السبب الأول هو أن تي جي يطلب من جميع الأشخاص الذين يزورون منزله أن يكونوا في البودكاست.
00:09:02كان الأمر محرجاً في بضع مرات.
00:09:05نعم.
00:09:05يب.
00:09:06من أنت حقاً؟
00:09:07بخلاف كونك بطل AWS. أنا لست حتى كذلك، لم أكن بطل AWS. حسناً.
00:09:13طُردت من مجموعة الأبطال الخارقين.
00:09:15كيف يعمل ذلك؟ أنت فقط لا تحصل على التجديد..
00:09:18كنت بطلاً لفترة واحدة وقرروا، أوه، أنت، هل هو مثل شيء مدفوع؟ تدفع لتكون بطلاً؟
00:09:24لا، لا، أنا فقط، لم أعد أهتم بذلك حقاً.
00:09:27أتحدث عنه أبداً.
00:09:28لذلك قالوا، ربما هو لم يعد بطلاً بعد الآن.
00:09:31الآن هو شرير.
00:09:32كيسي يبدو وكأنه جزء من لغز جريمة قتل.
00:09:34إنه واقف هناك.
00:09:35يا صاح.
00:09:36نحن على وشك الحصول على، أه، مثل، أه، ما هو؟ نيك هيل.
00:09:40ما هو الشخص الذي يرسم على اللوحة.
00:09:42ثم يظهر.
00:09:42كيسي موراتوري.
00:09:43هذا هو الذي تفكر فيه.
00:09:45موراتوري.
00:09:46هل هو موراتوري أم موراتوري؟ يا إلهي.
00:09:48أنت على وشك القيام بمرئيات.
00:09:50أليس كذلك؟ لذا أعلم أن هذا هو أفضل بودكاست..
00:09:54حرفياً، هذا هو الأفضل للمشاركة فيه.
00:09:57أه، يُنطق موراتوري من قبل عائلتي.
00:10:00تقريباً كما لو كان هناك حرف Y هناك مثل موراتوري، لكن هذا صحيح.
00:10:05إنه لا معنى له حقاً لأنه بالإيطالية، إنه اسم إيطالي.
00:10:09وبالإيطالية، سيكون موراتوري أو موراتوري..
00:10:13لا معنى له.
00:10:14إذن لماذا، كيف أصبح مور ليس لدي أي فكرة.
00:10:18كان ذلك شيئاً إيطالياً أمريكياً مثل شيء المهاجرين الذي حدث.
00:10:23أعتقد.
00:10:24لا أعرف.
00:10:25حسناً.
00:10:25إذن هذا فعلياً ما قالوه..
00:10:28لديهم هذه الأشياء التي تسمى نقاط نهاية API، لكنهم يسمونها كذلك.
00:10:33وهذه هي عناوين النطاق.
00:10:35كما لو أنك تبحث في DNS، فهو الاسم الذي ستبحث عنه لمعرفة من من المفترض أن ترسل إليه طلبات DynamoDB الخاصة بك.
00:10:44وأعتقد أن هذه الأشياء تبدو هكذا..
00:10:47وآدم يمكنه على الأرجح تأكيد ذلك لأنه بطل، أو كان بطلاً.
00:10:53تبدو مثل، أوه، إنها متأخرة.
00:10:55نعم.
00:10:56نحن متأخرون ببضع ثوانٍ.
00:10:58لأن الفيديو اختفى على ريفر.
00:11:00أوه، ها نحن ذا.
00:11:01إذن تبدو مثل dynamodb.use-east-1.api.aws أو شيء من هذا القبيل.
00:11:06وأعتقد أن الأمر يعتمد على ما إذا كنت تستخدم IPv6 أو IPv4.
00:11:10لديهم أسماء مختلفة حسب الأشياء أو ما إذا كنت تستخدم شيئاً محدداً، مثل تحدثوا عن أن الحكومات تستخدم واحداً مختلفاً أو ما شابه.
00:11:20لذا فإن هذه الأسماء هي في الأساس أسماء تقوم بترميزها بشكل ثابت، على ما أعتقد، في تطبيقك حيث تقول، عندما أحتاج إلى فعل شيء مع DynamoDB، سأطلب هذا.
00:11:31هل هذا منطقي؟ وهل يبدو ذلك صحيحاً؟ يا آدم، لأنني لا أستخدم أدوات AWS.
00:11:36نعم.
00:11:37نعم.
00:11:37نعم.
00:11:38هذا صحيح..
00:11:38إذن، كما تعلم، أنت تطلب شيئاً كهذا وستقوم بإرساله بشكل مثالي.
00:11:42أعني، أنا أعرف ما يقوله.
00:11:44نعم.
00:11:45ثم سيعيد توجيهك إلى مكان ما لأنه من الواضح أنه لا توجد آلة واحدة ستتعامل مع كل حركة مرور DynamoDB في الكون بأكمله.
00:11:55حتى لو قسمتها حسب المنطقة، وهو ما يمكنك رؤيته هنا، من المفترض أن تختار منطقة.
00:12:01أعتقد أنك لا ترسلها إلى عنوان رئيسي ما.
00:12:05أنت ترسلها إلى عنوان إقليمي أو ربما يوجد عنوان رئيسي يمكنك استخدامه سيكتشف الأمر.
00:12:12لا أعرف..
00:12:13لكن على أي حال، في مرحلة ما تتحدث مع هذا وهذا يحتاج إلى الإشارة بشكل فعال إلى نظام موازنة تحميل.
00:12:21لذا من المفترض أن يشير هذا الشيء بشكل فعال إلى ما أسموه شجرة DNS..
00:12:27على الرغم من أنهم لم يشرحوا أبداً طبيعة الشجرة على الإطلاق.
00:12:31بدا الأمر أشبه بمصفوفة موزونة، إن شئت، حيث تقول ببساطة، إليك مجموعة من الآلات وستختار تلك الآلات بناءً على الأوزان التي نحددها حتى نتمكن من موازنة الحمل، أليس كذلك؟ لذا إذا تأخرت آلة، ربما نخفض وزنها.
00:12:46وإذا بدت آلة فارغة نوعاً ما، نرفع وزنها.
00:12:49لذا أسموها شجرة.
00:12:50لذلك أفترض أنها شجرة.
00:12:51لم يشرحوا أبداً ما هو جزء الشجرة منها، لكن هذا الاسم من المفترض أن يشير.
00:12:57هل يمكنني المقاطعة لثانية واحدة فقط؟
00:13:00بالمناسبة، حصل شخص ما بالفعل على ترقيته إلى المستوى السادس بناءً على تلك الشجرة.
00:13:05لذا أعتقد أنه في المرة القادمة يجب أن تكتشف ما هي تلك الشجرة.
00:13:08لأن ذلك كان يعني الكثير لشخص ما.
00:13:10حسناً.
00:13:11كان هناك حزمة وحدث مهندسون.
00:13:13أنا أوافق.
00:13:13الشجرة ربما مهمة.
00:13:14إنها فقط ليست مهمة للخلل.
00:13:16وحتى ذلك، سأقول لم تكن هناك حاجة لهم لشرح الشجرة..
00:13:19لذا أنا موافق على أنهم تخطوا ما تفعله الشجرة.
00:13:23لكن لدي سؤال سريع أيضاً..
00:13:25نعم. هل تسمى شجرة لأنها تحليل السبب الجذري أم لا؟
00:13:29لا مزيد من النكات.
00:13:30نحن خارج الموضوع كثيراً.
00:13:32أنا آسف.
00:13:33أنا آسف.
00:13:33إذن على أي حال، من المفترض أن يشير هذا إلى ذلك..
00:13:37وهذا، هذا النوع من، هذا النظام لموازنة الحمل أساساً من إدخالات DNS والطريقة التي وصفوا بها هذا في عرضهم التقديمي هي أنهم سيستخدمون شيئاً مثل سأقول plan one 45 dot dynamo DB، مثل DDB dot AWS، أليس كذلك؟ الآن هذا هو جذر تلك الشجرة، أعتقد، ليس تحليل السبب الجذري، ولكن مثل هذه الشجرة، سيحتوي هذا على، هذا هو السجل الأعلى لمجموعة من السجلات التي تسمح له بإجراء موازنة الحمل.
00:14:03وأفترض أن route 53 لديه نوعاً ما قدرة موازنة الحمل هذه.
00:14:07أنا أقرأ ما بين السطور من العرض التقديمي.
00:14:09لم يقولوا ذلك صراحة، ولكنني أفترض أن route 53، الذي يقوم بكل هذا من خلاله، كما تعلم، وهو نظام DNS الخاص بهم، يسمح بحدوث موازنة الحمل هذه بمجرد إعداد الأشياء هنا التي تقول كيف يجب أن تعمل موازنة الحمل بشكل صحيح الآن.
00:14:24وبعد ذلك سيختار الجهاز الصحيح بناءً على نوع من العشوائية في الأوزان أو أياً كان.
00:14:30الآن، ما قالوه هو أن هذا الاسم، الذي يوجد بالفعل.
00:14:33ويبدو أن هناك شجرة أو شيء من هذا القبيل.
00:14:36هذا الاسم هو واحد استخدموه فقط نوعاً ما للعرض التقديمي.
00:14:40لم يستخدموا أبداً اسماً قابلاً للقراءة البشرية لهذه الخطة، مثل one 45 الذي كتبته هنا أو أياً كان.
00:14:46كان حقاً تجزئة لشيء ما.
00:14:48لذا سيكون حقاً مثل، كما تعلم، zero a F E one، two، كما تعلم، nine a أو شيء من هذا القبيل، أليس كذلك؟ هذا في الواقع ما سيكون هناك.
00:14:57لذا إذا ذهبت ونظرت، لن ترى اسماً قابلاً للقراءة البشرية، أو على الأقل في ذلك الوقت، لن ترى، أعتقد أنك لن ترى مثل plan one 45.
00:15:06سترى ذلك فقط.
00:15:07وهكذا كانت الفكرة، حسناً، مستخدم يذهب لاستخدامه.
00:15:10يستعلمون عن هذا الاسم route 53 سيوجههم مثل إلى هنا.
00:15:13وهذا الشيء هو نوع من شجرة موازنة الحمل التي يمكن لـ route 53 استخدامها والتي ستسمح لك بالوصول إلى المكان الذي تحتاج إلى الذهاب إليه.
00:15:22صحيح.
00:15:23سيعطونك جهازاً فعلياً يمكنك إرسال حركة المرور إليه في النهاية.
00:15:27مرة أخرى، لم يصفوا أياً من ذلك.
00:15:29لذا ليس لدي أي فكرة عن كيفية عمل أي من ذلك.
00:15:32لم أمس أو أستخدم route 53 أبداً.
00:15:35لذا ليس لدي أي فكرة، لكننا سنفترض فقط أن ذلك يحدث لأنه لا يهم لهذا الخطأ..
00:15:41لدينا بطل AWS.
00:15:42لذا إذا كنت، إذا كنت مرتبكاً، يمكنك دائماً أن تسأل Adam وقد يكون لديه رؤى إضافية.
00:15:49أعني، نعم، تفضل..
00:15:50حسناً، route 53 لديه بالفعل الكثير من الطرق المختلفة التي يمكنك من خلالها تقسيم حركة المرور.
00:15:54لذا نعم، weighted هو واحد منهم.
00:15:56وهذا يبدو مثل ما وصفوه..
00:15:57إذاً بطريقة ما قاموا بإعداد هذه السجلات بذلك.
00:15:59ولم يقولوا كيف، لكن شيئاً ما، شيئاً ما بتنسيق شجرة فعل ذلك.
00:16:02تخميني هو أن هناك مثل weighted، مثل الشجرة لديها مثل weighted مثل هناك زوجين من الأوزان في الأعلى تتفرع إلى المزيد من الأوزان أو شيء من هذا القبيل، لأن ذلك أسهل لها للتعامل معه لأن هناك الكثير منها أو شيء من هذا القبيل..
00:16:14من يدري؟ على أي حال، ليس لدي أي فكرة.
00:16:16الأمر المهم هو أن هذا ما يفترض أن يحدث بشكل طبيعي..
00:16:20الآن، السبب في أن هذا يسمى plan 145 هنا، على الرغم من أنه كان في الواقع سيكون بعض رمز التجزئة، لكنهم يشيرون إليه على أنه مثل plan 145 هو موازنة الحمل، كما قد تتخيل، يجب أن تكون نوعاً ما مستمرة لأن أجهزة DynamoDB مثل تقوم بأشياء طوال الوقت.
00:16:37إنها تصبح أكثر تحميلاً.
00:16:39هناك أجهزة تتعطل أو تتحطم أو من يدري ماذا، أليس كذلك؟
00:16:43قد يكون هذا يحدث، يتم إخراجها من الخدمة.
00:16:46يمكن إضافة سعة جديدة.
00:16:48ولذلك يجب تحديث هذه الأشياء باستمرار، طوال الوقت.
00:16:52لذا فإن نقطة النهاية الرئيسية لواجهة برمجة التطبيقات التي تتصل بها، يجب أن يتم تعديل الشجرة التي تشير إليها باستمرار.
00:17:01والطريقة التي يفعلون بها ذلك هي أنهم يُنشئون شجرة أخرى، الشجرة التي سينتقلون إليها، أليس كذلك؟ يُنشئون مثلاً، كما تعلم، الخطة 146 أو ما شابه.
00:17:13ويصنعون الشجرة بأكملها هنا.
00:17:15وعندما يكونون مستعدين، أي عندما تكتمل هذه الشجرة، يأخذون هذا، كما تعلم، هذا السجل هنا، وبدلاً من أن يشير إلى ذاك، يجعلونه يشير إلى هذا، أليس كذلك؟ إذن تصنع الشجرة الجديدة، وينتقلون إليها بمجرد تغيير ذلك الاسم.
00:17:32الآن، لسبب ما، وهذا السبب لم يتم شرحه حقاً..
00:17:36الطريقة التي أعدوا بها هذه العملية هي أنهم قسموها إلى جزأين.
00:17:41هناك شيء يُسمى المُخطط، والذي يحدد في الأساس كيف يجب أن تبدو الشجرة الجديدة.
00:17:47لذا يمكنك أن تتخيل أن هناك آلة ما تُسمى المُخطط.
00:17:51ولا أعرف إذا كانت آلة فعلية أم أنها مجرد عملية تعمل على آلة ما تشغل أشياء أخرى، من يدري.
00:17:58لكن هناك شيء يُسمى المُخطط.
00:18:00وبحسب ما استطعت فهمه، هناك واحد فقط، أعني أن هناك مُخططاً واحداً فقط يجلس هناك ويحدد كيف يجب أن تبدو الخطة الجديدة التي سننتقل إليها..
00:18:13وهو يفعل هذا باستمرار.
00:18:15لذا ينتج الخطة 145، ثم ينتج الخطة 146، ثم ينتج 147، 148، 9، 10، كما تعلم، إلى آخره، أليس كذلك؟ ويستمر في إخراج الخطط إلى الأبد، لأن هذا هو عمله.
00:18:31الآن، يبدو أنه لا يُنشئها فعلياً أبداً.
00:18:36مهمته ليست أن يصنعها في Route 53 مطلقاً.
00:18:40مهمته فقط أن يحدد كيف ستكون لو أن أحداً ما وضعها في Route 53.
00:18:47ثم لديهم ثلاثة منفذين..
00:18:50هؤلاء المنفذون يحصلون على الخطة من المُخطط، ويضعونها في Route 53.
00:19:06هل هذا منطقي؟ الآن، مُخطط واحد، بحسب ما أفهم من الشرح، وثلاثة منفذين.
00:19:11لم يكن هناك تفسير لماذا سيكون الحال هكذا.
00:19:14قالوا إن السبب في وجود ثلاثة منفذين هو أنه من المفترض أن يكون متسامحاً مع الأعطال، مثل إذا تعطل أحدهم أو ما شابه.
00:19:23لكنهم لم يشرحوا أبداً لماذا لن تحتاج بعد ذلك إلى ثلاثة مُخططين، لأنه إذا تعطل المُخطط، فلن يكون لدى المنفذين شيء لتنفيذه.
00:19:31لذا لم يكن الأمر منطقياً حقاً.
00:19:34لذلك لم يكن هناك تفسير في الموضوع عن سبب وجود هذا الهيكل بهذا الشكل.
00:19:39ليس من المهم حقاً للخلل أن يبدو بهذا الشكل، على الرغم من أنه نوعاً ما كذلك، كما سنرى لاحقاً.
00:19:45لذا كنت مرتبكاً قليلاً من حقيقة أنهم لم يبرروا هذا، لكن لا بأس.
00:19:50لذا آمل أن يكون هذا منطقياً.
00:19:52لدينا مُخطط واحد.
00:19:53ولدينا ثلاثة منفذين.
00:19:55المنفذون الثلاثة جميعهم يحاولون تنفيذ هذه الخطة.
00:19:58الآن، ما يحدث هنا هو أنه لأسباب، مرة أخرى، الشيء الوحيد الذي قالوه في العرض التقديمي هو أنه يجعل التفكير في الأمر أسهل.
00:20:07هذه هي المعلومة الوحيدة حول الموضوع.
00:20:09قالوا إنه يجعل التفكير في الأمر أسهل.
00:20:12ولأنه يجعل التفكير في الأمر أسهل، يستخدم هؤلاء المنفذون التسلسل.
00:20:17لذا بدلاً من مجرد محاولتهم إنشاء السجلات، وإذا كانت السجلات موجودة بالفعل، فلا يقومون بإنشائها أو شيء من هذا القبيل، بعبارة أخرى، لدي ثلاثة أشخاص يعملون..
00:20:29كلنا نريد إنشاء، كما تعلم، لنقل هذا السجل العلوي، plan146.ddb.aws، أليس كذلك؟
00:20:36كلنا نحاول القيام بذلك.
00:20:38أحدنا يفعله أولاً.
00:20:39الشخص التالي يحاول القيام به، لكنه موجود بالفعل أو شيء من هذا القبيل، أليس كذلك؟ كلنا نحاول إنشاء نفس السجل.
00:20:48لذا نظرياً، يمكن أن يكون لدينا ثلاثة أشخاص يعملون عشوائياً على أي جزء من الخطة يحاولون العمل عليه، ونظرياً يجب أن ينجح الأمر بطريقة ما، أليس كذلك؟ وقد شعرت نوعاً ما، رغم أنه لم يصرح بذلك مباشرة، شعرت من المتحدث أنه سيوافق على ما قلته للتو، أي أنه كان بإمكانهم ببساطة تشغيلها بشكل عشوائي وكان من المفترض أن يكون ذلك جيداً.
00:21:14لكنه قال إنهم يستخدمون التسلسل لتسهيل الاستيعاب.
00:21:18ما يعنيه ذلك هو أنه بدلاً من أن تعمل هذه المنفذات بهذه الطريقة، ما يفعلونه بدلاً من ذلك هو محاولة الحصول على قفل لنقطة النهاية التي يحاولون تحديثها.
00:21:30بعبارة أخرى، إذا كان هذا الشخص يحاول تحديث أحد هذه الأشياء، وقد شعرت أن الأمر كان إذا كنت تحاول تحديث هذا، لكن كان يمكن أن يكون إذا كنت تحاول تحديث هذا، أو كان يمكن أن يكون على كليهما.
00:21:44لم يحددوا أبداً بنسبة 100%، إذا كنت أتذكر بشكل صحيح، أين كان القفل يحدث بالضبط.
00:21:51لكن القفل يحدث من خلال قولهم، حسناً، سأنشئ قفلاً يكون عبارة عن سجل DNS.
00:21:57وباستخدام حقيقة أن Route 53 لديه فكرة العملية الذرية، أي، كما تعلم، يمكنني القيام بشيئين وإذا لم ينجح كلاهما، فلن ينفذ أياً منهما..
00:22:08لقد صنعوا في الأساس نظام قفل يعمل عبر Route 53.
00:22:12إذن سجلات DNS الخاصة بـ Route 53 هي في الواقع سجل القفل، إذا كان ذلك مفهوماً.
00:22:18هل يمكنني طرح سؤال سريع؟ نعم.
00:22:20قلت إنه يفعل ذلك من خلال التسلسل؟ لا أفهم تماماً ما يعنيه ذلك.
00:22:25لأنني اعتقدت أن التسلسل هو مجرد تحويل من ذاكرة إلى تمثيل ذاكرة مختلف لبعض.
00:22:31آسف، تسلسل مختلف.
00:22:32نعم، هذا هو التسلسل.
00:22:33في هذه الحالة، نعني حرفياً التسلسل الزمني، أي أنهم أرادوا أن يكون لهذه المنفذات نوع من الطريقة التي ستنظم بها سلوكها في ترتيب معين بدلاً من أن تكون عشوائية فقط.
00:22:46والطريقة التي فعلوا بها ذلك كانت القفل.
00:22:49لذا ما سيحدث هو، بدلاً من أن يقوم هذا الشخص بفعل ما سيفعله فقط، مثل، حسناً، سأقوم بـ، انتهيت من هذا، سأوجه هذا الشخص إلى الخطة 146 الآن.
00:22:59بدلاً من القيام بذلك، يحاول الحصول على قفل على هذا، أليس كذلك؟ وإذا لم يحصل على القفل، فلن يجري التغيير.
00:23:07لذا يمكن لواحد فقط من هذه المنفذات أن يكون في عملية تحديث هذا في أي وقت معين.
00:23:13هل هذا مفهوم؟ مم همم.
00:23:15الآن مرة أخرى، لم يتم شرح بالضبط ما كانوا يحاولون القيام به.
00:23:19لقد قالوا فقط إنه يجعل الأمر أسهل للاستيعاب وتركوه عند ذلك.
00:23:24لذا لا أعرف لماذا اعتقدوا أن هذا كان تحسيناً.
00:23:27والمضحك أنه ما ينتهي به الأمر إلى الكشف عن الخطأ.
00:23:31لذا لم يكن تحسيناً.
00:23:33إذا كان هناك أي شيء، فمن المحتمل أنه كان سيئاً.
00:23:36لكن يا كيسي، هل تقول إنه ليس لديهم مثل، ليس لديهم سبب وجيه لأنهم يقولون سنجعل المنفذات تعمل تقريباً واحداً تلو الآخر؟ لماذا لديهم، لماذا لديهم ثلاثة منفذات؟ لا أفهم.
00:23:49لماذا لا يكون لديهم واحد فقط؟ إنهم لا يقولون ذلك فقط.
00:23:53لا نعرف لماذا.
00:23:54ولم يشرحوا تماماً، مثل، لم أسمع حقاً تفسيراً لكيفية وجود ثلاثة منفذات متزامنة.
00:24:00تتوقع أن تكون قادرة على التعطل، وهذا هو السبب في أن لديك ثلاثة..
00:24:07صحيح.
00:24:08لكنهم يأخذون قفلاً.
00:24:09إذن ماذا يحدث إذا أخذ هذا الشخص القفل ثم تعطل؟
00:24:13يعني، لم أسمع تفسيراً لذلك أيضاً.
00:24:16فكان الأمر برمته محيّراً جداً بالنسبة لي.
00:24:19أنا لا أشتكي من هذا كجزء مما نتحدث عنه هنا، لأنه ليس مهماً للموضوع بالنسبة لي.
00:24:25لكن كعرض تقديمي، كان لديّ الكثير من الأسئلة.
00:24:29كنت أشعر وكأنني لا أفهم لماذا فعلتم أياً من هذا بصراحة تامة.
00:24:33صحيح.
00:24:34وربما يكون ذلك، مرة أخرى، جزء من السبب قد يكون ببساطة أنني لا أستخدم خدمات AWS.
00:24:40قد يكون بعض هذه الأشياء واضحاً إذا كنت شخصاً يستخدم Route 53 بانتظام أو شيء من هذا القبيل، فستقول، آه، ذلك لأن الأقفال يمكن ضبطها على مهلة زمنية أو أعني، لا أعرف.
00:24:52صحيح.
00:24:53لكن على أي حال، نعم، إذاً هم يفعلون ذلك.
00:24:56وما ينتهي بحدوثه في هذا الأمر، الشيء الذي يكشف الخلل هو أن ما ينتهي بحدوثه هو أن هؤلاء المنفّذين، عندما لا يحصلون على القفل، يقومون فقط بالتراجع، أليس كذلك؟ سيقولون ببساطة، حسناً، دعني أنتظر وسأحاول مجدداً.
00:25:12إذاً المنفّذ، هذا المنفّذ يحاول الحصول على القفل، لكن شخصاً آخر يمتلك القفل بالفعل.
00:25:18فينتظر قليلاً ثم يحاول الحصول على القفل مرة أخرى.
00:25:22هذا ما سيحدث.
00:25:23صحيح.
00:25:24وما قالوا إنه حدث هو أنهم وصلوا إلى حالة مَرَضية، بين قوسين، حيث أحد المنفّذين، كما تعلم، قد نفّذ خطة ما.
00:25:32وتلك الخطة، لنقل كانت قديمة جداً.
00:25:34أعتقد أنهم استخدموا 110 كمثال.
00:25:37إذاً نفّذ الخطة 110.
00:25:38ويريد توجيه، كما تعلم، كأنه يقول، يجب أن أضبط الـ API لتشير إلى خطتي 110، يحاول الحصول على القفل لتحديث dynamodb.use.one أو أياً كان، ويفشل لأن شخصاً آخر ينفّذ الخطة 111 أو شيء من هذا القبيل.
00:25:53صحيح.
00:25:53أو ربما كانت الخطة 109 خطة سابقة.
00:25:56إذاً المنفّذون الآخرون يفعلون ذلك.
00:25:59لا يستطيع فعله.
00:26:00يتراجع.
00:26:00صحيح..
00:26:02وتذكّر أن هذا المنفّذ هنا، نحن على الخطة 110.
00:26:05إنه يحاول، يريد حقاً تنفيذها..
00:26:07يحاول مجدداً.
00:26:08شخص آخر يمتلك القفل.
00:26:09يحاول مرة أخرى، لا يزال مقفلاً.
00:26:11هذا الشخص عالق على الخطة 110، يحاول بيأس تنفيذها.
00:26:15لا يستطيع فعل ذلك.
00:26:16يبدو أن هذا حدث مرات كثيرة لدرجة أن المنفّذين الآخرين والمخطط يواصل إنتاج خطط جديدة طوال هذا الوقت.
00:26:22صحيح..
00:26:23المنفّذون الآخرون، يصلون إلى شيء مثل 145 أو نحو ذلك، ثم 146، إنهم ينفّذون خططاً متقدمة جداً عن الخطة 110.
00:26:31صحيح.
00:26:32وهذا الشخص لا يزال عالقاً لأنه لم يحصل على القفل بسبب سوء الحظ.
00:26:37صحيح.
00:26:37أخيراً، في مرحلة ما بعد أن تم بالفعل تنفيذ الخطة 145 وتم التوجيه إليها بواسطة منفّذ آخر وكل تلك الأمور، الخطة 110، هذا المنفّذ الذي لا يزال يحاول تنفيذها يحصل أخيراً على القفل.
00:26:51أعني، نعم.
00:26:52فيقول إذاً، حسناً، نحن نشير الآن إلى الخطة 110.
00:26:55نعم.
00:26:56صحيح..
00:26:58إذاً الآن الخطة قديمة جداً وبالية، لكن هذا فعلياً لا يجب أن يكون مشكلة.
00:27:02صحيح..
00:27:03لأنه في النهاية في المرة القادمة التي يكون فيها لدى أي منفّذ شيء ما، ستكون خطة أحدث بكثير.
00:27:07سينفّذون فقط الخطة، كما تعلم، 146 أو 147 أو 148 أو أياً كان.
00:27:11وسنعيد التوجيه إلى هذا وسنعود إلى خطة حديثة.
00:27:13إذاً الجميع سيعانون فقط من توزيع حمل سيئ لبضع دقائق، لكن بعد ذلك سيكون الأمر على ما يرام.
00:27:19صحيح.
00:27:19لقد عانوا بالفعل من توزيع حمل سيئ لبضع دقائق على الأقل..
00:27:22صحيح.
00:27:23نعم.
00:27:23حسناً، الأمر أسوأ من ذلك بكثير.
00:27:26هذا ما كان من المفترض أن يحدث.
00:27:29صحيح..
00:27:30بمعنى أن هذا كيف كانوا يتوقعون أن يعمل هذا أيضاً.
00:27:34حسناً.
00:27:34المشكلة هي أنهم أيضاً لم يريدوا أن يصبح Route 53 مكتظاً بكل هذه السجلات.
00:27:40لأنهم إذا تركوها موجودة، في النهاية بعد، كما تعلم، ثلاثة أشهر، سيكون لديك حوالي 8 مليارات سجل حشرتها في Route 53 لكل، كما تعلم، بضع دقائق تضع فيها هذه الشجرة الكبيرة من الأوزان وما إلى ذلك.
00:27:55كانوا يفكرون، حسناً، في مرحلة ما يجب أن ننظّف هذه الخطط فقط..
00:28:00لذا فإن المُنفذين يبحثون أيضًا عن الخطط الأقدم من فترة زمنية معينة.
00:28:06وإذا كانت أقدم من فترة معينة، فسيقومون بحذفها.
00:28:10لذا ما حدث هو أنهم أشاروا إلى الخطة 110.
00:28:13هذا المُنفذ يحصل أخيرًا على القفل.
00:28:16إنه يشير إلى 110.
00:28:18مُنفذ آخر يقول، أوه، واو، 110، يا رجل، هذا قديم جدًا.
00:28:22يجب أن نتخلص من ذلك ويحذفه.
00:28:24لذا الآن DynamoDB us-east-1.api.aws يشير إلى سجل لا يمكن حله.
00:28:30صحيح.
00:28:30إنه مجرد شيء، في الواقع، مرة أخرى، لن يبدو مثل الخطة 110.
00:28:35سيبدو مثل OAFE129A، بعض التجزئة، نقطة، صحيح، DDB.aws.
00:28:40لكنه يشير إلى هذا الاسم.
00:28:42وإذا سألت عن هذا الاسم، لن تحصل على شيء..
00:28:46لذا ما كان سيحدث في تلك المرحلة هو أن كل من كان يحاول الحصول على نقطة نهاية لإرسال الأشياء إليها سيحصل على اسم لا يمكن حله، في الأساس.
00:28:55صحيح.
00:28:56وأنا حقًا لا أعرف ماذا يحدث في Route 53 عندما يحدث ذلك، لكنك ستحصل بشكل أساسي على شيء إما لا يمكنك استخدامه أو مجرد كلام فارغ كعنوان IP، من يدري.
00:29:06لكن مهما كان، إذا حاولت فعليًا استخدامه، لن تحصل على استجابة.
00:29:10صحيح..
00:29:10مثير للاهتمام.
00:29:11هل هذا لأن AWS لا تستخدم Rust بما فيه الكفاية لأن هذا واضح أنه خطأ استخدام بعد التحرير؟ وبالتالي أعتقد أن Rust كان سيحل ذلك، صحيح؟ لو أعدت كتابة Route 53 بالكامل في Rust، من الواضح أن كل هذه المشاكل لن تكون موجودة.
00:29:27لا، لأكون محددًا، أعتقد أنه في العرض التقديمي، قالوا، ليس عن Rust، لكنهم قالوا ما الذي سيحدث تحديدًا، وهو أعتقد عندما طلبت هذا الشيء أو إما هذا الشيء أو ذاك الشيء، لا أعرف إلى أيهما كانوا يشيرون، لأنني لا أستطيع التذكر تمامًا، ستحصل فقط على شيء يقول لم يتم العثور على سجلات.
00:29:47لذا هذه هي النتيجة النهائية لما سيحدث، سواء كان من السؤال عن هذا أو السؤال عن ذاك، لست متأكدًا، لكن ستحصل فقط على لم يتم العثور على سجلات.
00:29:57هذا ما كنت ستتلقاه عندما كنت تحاول استدعاء تلك الـ API.
00:30:01لذا أيًا كانت المكتبة التي كنت تستخدمها لاستخدام DynamoDB، ستقول فقط، مرحبًا، لم يتم العثور على سجلات، يا أخي.
00:30:09آسف.
00:30:09صحيح.
00:30:10لذا هذا، إذا سألت أي شخص على الإنترنت، صحيح، جميعهم مثل، نعم، لقد شرحوا الخطأ.
00:30:15هذا هو الخطأ.
00:30:16الخطأ هو أنه كان هناك حالة سباق، صحيح؟ الجميع، لأن الجميع، بمجرد أن تقول حالة سباق، تنطفئ أدمغة الجميع.
00:30:24يقولون، أوه، حسنًا، كانت حالة سباق.
00:30:26انتهى.
00:30:27لا شيء لنراه هنا، صحيح؟ لذا يقولون، إنها حالة سباق.
00:30:30يشرحونها.
00:30:31الأمر مثل، لا، لم يشرحوها.
00:30:33لأنه إذا فكرت في ما سيحدث هنا، فورًا بعد ذلك، الجميع يحصلون على هذا، إنه مُنفذ جديد.
00:30:39مُنفذ جديد سينفذ واحدًا جديدًا، صحيح؟ وهكذا الخطأ، صحيح، هو لماذا لم يحدث ذلك؟ هذا هو تحليل السبب الجذري الفعلي الذي أردت رؤيته وهو لماذا لم يأت المُنفذ التالي ويصلحه؟ هل يمكنني طرح شيء آخر؟ ألن يكون أيضًا خطأ؟ مثل لماذا تكتب سجلًا قديمًا جدًا لدرجة أنه يجب حذفه على الفور؟ حسنًا، لم يكن كذلك، كان لأنه كان هذا الشخص قد كتبه منذ وقت طويل جدًا.
00:31:04وكان...
00:31:04حسنًا، أعني، إذا كنت تسأل، لماذا لم يكتبوا مُنفذًا بكود أفضل؟ نعم، هذا رائع جدًا..
00:31:11حسنًا، عادل.
00:31:12يبدو أنه إذا كنت تقوم بالتحديث إلى شيء يجب حذفه على الفور، أليس مثل ذلك...
00:31:17هذا يبدو وكأنه المشكلة تمامًا هناك.
00:31:19لقد فعلت شيئًا خاطئًا قبل وقت طويل.
00:31:21نعم، على الرغم من أنه لا يصلح حقًا البنية النظرية لهذا الشيء، فإن فحصًا بسيطًا في هذا الشخص عندما ينتهي من التراجع على القفل، ربما يجب عليه التحقق لمعرفة ما إذا كان على وشك ضبط هذا على شيء كان سيحذفه إذا كان يشغل كود الحذف الخاص به هو على الأرجح إجراء أمان جيد.
00:31:38لكن نعم، لذا أوافق بنسبة 100% معه.
00:31:40حسنًا، لكن المُنفذ عمل بجد حقًا، حقًا للحصول على هذا السجل.
00:31:44انتظار لفترة طويلة.
00:31:45أوه، سيحصل على بطاقات البوكيمون الخاصة به..
00:31:49أي شخص انتظر على الإطلاق.
00:31:51لذا دعه فقط يكتب السجل.
00:31:53حسنًا.
00:31:53لذا، أريد أن أسمع عن ذلك..
00:31:56لسوء الحظ، إذا نظرت إلى العرض التقديمي، ونظرت إلى تحليل السبب الجذري، فلن تجده في أي مكان.
00:32:03العرض التقديمي على الأقل يحتوي على مقطع صغير واحد مدته 12 ثانية يوضح تقريباً أين قد يكون الخلل.
00:32:14لذا دعني أشرح ما هو ذلك.
00:32:17يبدو أن ما يحدث جنباً إلى جنب مع هذا، عندما تستخدم DynamoDB في المنطقة الشرقية الأولى، ولكن عندما توجهه إلى خطتك، تقوم أيضاً بعملية أخرى في نفس الوقت.
00:32:33وتلك العملية هي لتعيين التراجع..
00:32:40أعتقد أنه DD.
00:32:42هل هو DDB.rollback.AWS؟ لا أتذكر بالضبط ما هو هنا..
00:32:49هناك سجل للتراجع.
00:32:50يقوم بتعيين ذلك السجل إلى أي خطة قديمة كانت.
00:32:54لذا إذا كنا هنا نشير إلى 145، والآن سنشير إلى 110، صحيح، هذا المُفعِّل القديم، مثل أنني أنتقل إلى 110، يحاول تعيينه، أخذ أياً كان هذا الاسم، صحيح حالياً، ونقل ذلك الاسم الجديد، والذي كان سيكون الخطة 145، نقل ذلك بحيث يشير عنوان التراجع إلى الخطة القديمة..
00:33:18صحيح.
00:33:18وهذا فقط لأغراض التصحيح.
00:33:20أو، كما تعلم، هو في الأساس فقط لتسهيل عمل المشغل، صحيح؟
00:33:24إذا أرادوا التراجع إلى الخطة السابقة أو شيء من هذا القبيل، أو إذا كنت تريد فقط معرفة ما كانت عليه الخطة السابقة، يمكنك رؤيتها هنا، صحيح؟ هذا هو الجزء الأول من كيفية ما قالوه عن الفشل، أود أن أشير إلى شيء واحد هنا لم يكن منطقياً بالنسبة لي أيضاً.
00:33:41لأنني كنت مثل، حسناً، أنت تخبرني أن هذه الأشياء تتحدث كل دقيقة أو نحو ذلك.
00:33:46ما الفائدة من وجود واحدة من هذه؟ مثل، بحلول الوقت الذي سجلت فيه الدخول حتى، تم تحديثها من تلك التي أردت التراجع إليها إلى شيء جديد.
00:33:55تلك هي في الواقع الخطة التي لا تريدها لأن كل شيء تعطل، صحيح؟ مثل، إنها، صحيح؟ إذا أنت لا تريد هذا، أنت فقط تريد هذه الأسماء في قائمة.
00:34:04حتى تتمكن من أن تكون مثل، ماذا كانت في الساعة 12:30؟ مثل تلك، صحيح؟ لذلك هذا لم يكن منطقياً بالنسبة لي.
00:34:11ليس لدي فعلياً أي فكرة لماذا سيكون هذا جيداً، صحيح؟ لم يبدو أنه سيفعل الشيء الذي تريده فعلاً، وهو أن تكون قادراً على تحديد نقطة زمنية وتقول، نحتاج إلى العودة إلى الساعة 1 مساءً لأن كل شيء انهار بعد ذلك، صحيح؟
00:34:26على أي حال، لذلك لم يكن ذلك منطقياً بالنسبة لي.
00:34:29لكن مرة أخرى، ليس هناك بالضبط الخلل.
00:34:32لذا لم أسأل لماذا، أنا فقط أقول، حسناً، هذا ما كان يجب عليه فعله.
00:34:36ويمكنه فقط التراجع عن إصدار واحد هو ما تقوله.
00:34:39نعم، على الرغم من أن الأشجار الأخرى موجودة.
00:34:42لذلك يمكنك بسهولة عن طريق معرفة الاسم فقط.
00:34:44كل هذا هو، هو وضع اسم قابل للقراءة البشرية على شيء على الأرجح لا تهتم به.
00:34:49صحيح.
00:34:50لكنهم لا يستطيعون حقاً، لا يمكنهم حقاً تخزين الكثير من الأشياء..
00:34:54كيسي، لا أعتقد أنهم يستطيعون حقاً وضع مثل، لا أعرف، آدم، مثل هذا، ليس لديهم الكثير من السعة هناك، صحيح؟ مثل، هذا الكثير من الأسطر.
00:35:02لو كنت أنا، لكنت فقط جعلت هذا طابعاً زمنياً.
00:35:05إذا كان ذلك ما أردته، صحيح؟ كنت سأقول، متى قام المخطط أو متى أشار هذا الشخص إلى هذا الشيء؟ مثل عندما حصلت على القفل، تقوم بتغيير هذا الاسم إلى الطابع الزمني، وتحديث هذا في عملية ذرية واحدة.
00:35:18لذا ستعرف فقط إذا أردت التراجع إلى الساعة 1 مساءً، أبحث فقط عن أيهما كان له الطابع الزمني، فقط كما تعلم، الطابع الزمني الأقدم، ليس بعد ذلك الوقت..
00:35:28وهذا ما كنا نشغله في ذلك الوقت.
00:35:30هذا ما كنت سأفعله.
00:35:31صحيح.
00:35:31لكنني لا أعرف.
00:35:32لذا ليس لدي أي فكرة لماذا فعلوا هذا.
00:35:34فعلوا ما فعلوه.
00:35:34أنا كما تعلم، ربما قد يكون منطقياً تماماً.
00:35:37مرة أخرى، ليس لدي أي معرفة بنظامهم.
00:35:38كل هذه الأشياء، قد تكون منطقية تماماً..
00:35:41لذا أنا لست حقاً، أنا فقط أقول أنني لا أفهمها.
00:35:43لا أعرف، قد لا تكون أفكاراً سيئة، صحيح؟
00:35:45قد تكون أفكاراً جيدة، إذا فهمت بقية النظام.
00:35:48على أي حال، ما يقولونه، وهذا كل ما نحصل عليه هو هذه العملية، أي تعيين التراجع للإشارة إلى الخطة القديمة التي كانت كما تعلم، والتي في هذه الحالة كانت في الواقع أحدث في بعض الحالات، صحيح؟ لذا ليست حقاً الخطة المشار إليها سابقاً، والتي قد تكون أقدم، قد تكون أحدث.
00:36:09القيام بذلك النشاط..
00:36:11إذا لم تعد تلك الخطة موجودة، بمعنى أنها حُذفت على هذا النحو، فإن المُنفِّذ يتوقف بشكل دائم.
00:36:19لذا في كل مرة، أي بمجرد أن تصل إلى حالة حيث dynamodb.usc هي تلك الحالة، صحيح؟ نقوم بتسلسل الخطوات الكامل الذي ذكرناه هنا.
00:36:29تُحذف هذه الخطة..
00:36:31الآن هذا يشير إلى اسم غير صالح أو لا يمكن تحليله، لا يمكننا تحليل plan dash 110، وهو في الواقع رمز سداسي عشري.
00:36:38لكن مهما كان ذلك، لم يعد بإمكاننا تحليله بعد الآن..
00:36:41بمجرد أن تصبح تلك الحالة صحيحة، في المرة التالية التي يأتي فيها منفِّذ ويحاول جعلها تشير إلى خطة جديدة، مهما كانت تلك الخطة الجديدة، لا يستطيع - عندما يصل فعلياً إلى هذه النقطة ويحاول تعيين التراجع، سيتعطل بشكل دائم.
00:37:00لذلك، سيتوقف المنفِّذون الثلاثة جميعاً الآن لأن كلاً منهم في النهاية سيحاول تنفيذ خطة جديدة.
00:37:08سيحاولون أولاً تعيين التراجع ليشير إلى الخطة القديمة أياً كانت، ليجدوا أنه لا توجد خطة هناك.
00:37:16وهذا على ما يبدو مجرد عطل كامل.
00:37:18يا إلهي، هذا جنون.
00:37:20كنت أعتقد أن المنفِّذين الثلاثة كان من المفترض أن يوفروا التكرار.
00:37:26مرة أخرى، هذا هو السبب في أنني أصبح منزعجاً من الناس على الإنترنت الذين يردون قائلين: كانت حالة تنافس.
00:37:34لم تكن حالة تنافس.
00:37:36حالة التنافس ليست ضرورية لهذا.
00:37:39حالة التنافس هي فقط السبب في أن ينتهي بك الأمر بجعل هذا الاسم غير قابل للتحليل.
00:37:45ولكن إذا لم يكن لديك أي كود فعل هذا بشكل سيئ، لكان قد عمل فحسب..
00:37:52لم تكن لتعرف أبداً.
00:37:53كان من الممكن أن تواجه انقطاعاً مؤقتاً لمدة دقيقة في DynamoDB أو شيء من هذا القبيل، لكنني أخمن أن هناك انقطاعات بسيطة في DynamoDB من وقت لآخر.
00:38:03هذا ليس خبراً عالمياً..
00:38:04ما هو خبر عالمي هو إسقاطه بشكل دائم، وهو ما حدث هنا.
00:38:08وحتى يأتي إنسان فعلي ويكتشف هذا الأمر، ويعيد ضبطه، ويجعل هؤلاء المنفِّذين يعملون مرة أخرى، فإنه يكون معطلاً تماماً.
00:38:15إنه معطل بشكل دائم.
00:38:16لذا ربما ساعات.
00:38:17وكان طويلاً بما يكفي، على ما أعتقد، في هذه الحالة ليؤدي بعد ذلك إلى أعطال متتالية.
00:38:23لم تكن لتواجه ذلك أبداً.
00:38:24إنه مجرد انقطاع مؤقت.
00:38:26إذا حصل بعض الأشخاص مؤقتاً على اسم غير قابل للتحليل أو لا توجد سجلات، فإنهم سيحاولون مرة أخرى فحسب.
00:38:32هذا عادة مثل DNS، مثل هاتفك، مررت عبر نفق.
00:38:35هذا كل ما كان سيحدث..
00:38:37لذا أريد أن أعرف كيف كان الكود هنا؟ كيف كتبت شيئاً يجعل الأمر، إذا لم يكن هذا اسماً صالحاً، والذي لن يكون حتى عند بدء التشغيل، بمعنى إذا كنت تبدأ هذا النظام ولم يكن المشغِّل قد قام بتهيئته مسبقاً، فلن يشير إلى أي شيء.
00:38:54هذه هي الحالة الافتراضية التي تعتقد أنك ستبدأ بها.
00:38:58لذا إذا كنت ستفعل هذا، فستعتقد أنك ستتعامل مع تلك الحالة فحسب لأن عنوان التراجع قد لا يشير إلى أي شيء.
00:39:06فقط خذ أياً كان هذا.
00:39:08إذا لم يكن شيئاً، اضبط عنوان التراجع على لا شيء..
00:39:12تم.
00:39:12إذن هناك شيء غريب حقاً في الطريقة التي كتبوا بها هذا الكود.
00:39:16وهذا ما كان يجب أن يكون في تحليل السبب الجذري.
00:39:20هذا هو الخلل برمته بالنسبة لي.
00:39:22هذا مجرد ديكور لكيفية انتهاء الأمر بجعل هذا الشيء يشير إلى لا شيء.
00:39:26نفس الخلل كان سيحدث لو أن شخصاً ما قد حذف هذا السجل عن طريق الخطأ.
00:39:31مثل أن مشغِّلاً ما قال فقط، أوه، تباً، ضبطته على لا شيء..
00:39:35نفس الخلل كان سيحدث وفقاً للعرض التقديمي.
00:39:38لذا السبب الجذري ليس حالة التنافس.
00:39:41حالة التنافس هي مسألة جانبية.
00:39:43هل هذا منطقي؟ سؤال سريع.
00:39:45إذن أنا فعلياً أفكر في هذا.
00:39:47وهذا يعني أن الشيء الذي يضبط التراجع ربما يفترض وجود نوع من البنية مع مجموعة من الذاكرة أو شيء ما تم تمريره، يقوم بنوع من الوصول.
00:39:57ينفجر.
00:39:58أم تعتقد أن هذا هو نفس نوع الخلل، وهو السطر الواحد الذي أسقط Cloudflare، حيث يفترضون فقط أنه موجود ويفكونه..
00:40:07إنه في Rust. إنه Rust آمن من ناحية الذاكرة. يفكونه، ينفجر.
00:40:13أنا حقاً لا أعرف.
00:40:14تخميني، في رأسي، كنت أفكر، ما هو الشيء الذي أرى الناس يفعلونه كثيراً وأتساءل دائماً، لماذا تفعل هذا؟ ولكن السبب فقط أن هذه هي الطريقة التي تعلموا بها البرمجة.
00:40:25وكنت أفكر، لو كنت تكتب بإحدى هذه اللغات التي تحب رمي الاستثناءات عند حدوث أخطاء، فهذا سيكون مثالاً رائعاً على ذلك.
00:40:34لو كان لديك شيء تقول فيه، حسناً، ذهبت للحصول على سجل DNS الذي يشير إليه هذا الشيء..
00:40:40وعادةً في بيئة برمجة عاقلة، لا أحد يرمي استثناءً هناك.
00:40:44إذا لم يحصلوا على شيء، فإنهم ببساطة يُرجعون لا شيء.
00:40:47وعندما يذهب الشخص لتعيين ddb.robot.js، فإنهم ببساطة يعيّنونه إلى لا شيء، وهو السلوك الصحيح.
00:40:53مثل لا شيء يتدفق، حرفياً القيمة
00:40:55"لا شيء"
00:40:56تتدفق بشكل صحيح عبر هذا التدفق.
00:40:58لذلك إذا كنت تكتبه ليكون، بما أنه خدمة أساسية جوهرية، بافتراض أنك كنت تحاول كتابة شيء متسامح مع الأخطاء، فلن تفعل أبداً شيئاً مثل رمي استثناء.
00:41:07لذا في عقلي، أفكر، أراهن أن ما يحدث هنا هو عندما تطلب هذا السجل، فإنهم يستخدمون فقط استدعاء مكتبة أو شيء من هذا القبيل يرمي استثناءً عندما لا يكون السجل موجوداً.
00:41:17وقد رمى استثناءً للتو وانتهى الممثل.
00:41:20هذا تخميني.
00:41:20وقد أكون مخطئاً جداً في ذلك لأنني مجرد تخمين جامح.
00:41:24لكن هذا هو السبب في أنني أريد أن أرى تحليل السبب الجذري.
00:41:27ماذا كان؟ قد يكون بالضبط ما كان يتحدث عنه تراش.
00:41:30أعني، قد يكون ما كان يتحدث عنه برايم.
00:41:33قد يكون ما قلته للتو.
00:41:34قد يكون أي شيء.
00:41:35وأريد أن أعرف لأن هذا هو المكان الذي سيكون فيه التعليم الفعلي هنا.
00:41:39تجنب حالة السباق هذه غير مهم تماماً.
00:41:42كان من الممكن أن تعيش حالة السباق هذه هناك.
00:41:45وبينما كان من المهم في النهاية إصلاحها، لتجنب تلك الانقطاعات الغريبة مرة واحدة في السنة لمدة خمس ثوانٍ أو نحو ذلك، فإنها ليست في الواقع الشيء الذي نريد أن نتعلمه أكثر.
00:41:55ما نريد أن نتعلمه أكثر هو لا تكتب هذا الشيء.
00:41:58ونحن لا نعرف حتى ما كان هذا الشيء.
00:42:01فكيف لا نكتبه؟ هذا هو السبب في أنني أعتقد أنه كان تحليل سبب جذري سيء.
00:42:05هل هذا منطقي؟ نعم.
00:42:06نعم.
00:42:07حسناً.
00:42:07بأي لغة مكتوبة معظم خدمات AWS، آدم؟.
00:42:11كانت Java.
00:42:12كنت على وشك أن أقول شخص من الدردشة قال Scala.
00:42:16قالوا إنهم عملوا في AWS لمدة سبع سنوات وقالوا إن معظمها مكتوب بلغة Scala.
00:42:23حسناً، هذه تقنياً Java مع خطوات إضافية.
00:42:26وهذا سيغضبهم جميعاً بلا نهاية.
00:42:29لذا هذا كل شيء بالنسبة لي حقاً..
00:42:34كان هذا شيئاً حيث كنت أقول، لا أشعر أنني رأيت التفسير.
00:42:37وأشعر في الواقع أنه من المهم سماعه لأن كانت هناك ممارسة برمجية سيئة في أسفل هذا الصيف.
00:42:42وأريد أن أعرف ماذا كانت، خاصةً لأنها تساعد أشخاصاً مثلي عندما، كما تعلم، لا أقوم حقاً بالكثير من تعليم الهندسة المعمارية الآن، لكن في مرحلة ما ربما أرغب في القيام ببعض من ذلك لأنني أعتقد أن هناك الكثير من الهندسة المعمارية السيئة هناك.
00:42:55ولذا أحاول نوعاً ما أن أنتبه لهذه الأشياء.
00:42:57مثل ما هي أنواع الأخطاء المعمارية التي يرتكبها الناس؟ وأراهن أن هذا كان واحداً منها.
00:43:02صحيح.
00:43:02ولذلك أود أن أعرف.
00:43:03أود أن أعرف..
00:43:04نعم.
00:43:05أعتقد أن ما أتوقعه هو على الأقل مثال بسيط واحد قابل للتكرار يوضح لماذا انفجر الأمر برمته، مثل مقتطف صغير من الكود.
00:43:13وهذا شيء أثرته سابقاً، وهو نوعاً ما كيفية تعاملنا مع هذا النوع من الأمور.
00:43:18إذا كنت أراجع كود شخص ما ورأيت شيئاً يبدو غريباً، سأبذل قصارى جهدي دائماً لإنشاء بيئة اختبار صغيرة خاصة بي وإثبات نظريتي.
00:43:27ثم أريهم الكود فعلياً وأقول: هذا هو السبب في أن هذا خاطئ على الأرجح.
00:43:32إليك مثال بسيط وقابل للتكرار.
00:43:34لذلك أتوقع شيئاً من هذا القبيل.
00:43:36وهذا يساعدني أيضاً على الفهم الحقيقي.
00:43:39لأن الكثير من الناس، كما قلت، يرون شيئاً يبدو مضحكاً، لكنهم لا يعرفون لماذا يبدو مضحكاً، لكنني لا أستطيع التوقف عند هذا الحد.
00:43:48يجب أن أبنيه فعلياً ثم أفهمه.
00:43:50هذا ما أتوقعه.
00:43:51وكما قلت، أعتقد أن حالات انقطاع CrowdStrike وGoogle كانت أفضل، مجرد إخبارك بأنها كانت مثل: انظر، كان هناك إلغاء مرجع مؤشر فارغ هنا، أو كان هناك تجاوز لحدود المصفوفة لأننا اعتقدنا أنه سيكون هناك 20 فقط ووضعنا 21 في ملف التكوين.
00:44:07صحيح.
00:44:08وهكذا، أعرف بالضبط نوع الكود الذي يسبب هذا النوع من المشاكل.
00:44:12وعلاوة على ذلك، بالنسبة لتعليق سابق، حرفياً، حسب علمي، كل من يبرمج بلغة Rust يفعل ذلك فقط حتى يتمكن أحياناً عندما يرى شيئاً كهذا من أن يقول: حسناً، لو كانوا قد كتبوه بلغة Rust، لما حدث هذا.
00:44:25لم يُعطوا معلومات كافية حتى لإبداء هذا التعليق..
00:44:29ربما أبدوه على أي حال، لنكون منصفين، لكنهم لم يُعطوا المعلومات.
00:44:34لذلك يجب أن تعطي قاعدة واحدة يجب اتباعها في تحليلات السبب الجذري وهي أنه يجب أن تعطي مبرمجي Rust معلومات كافية حتى يتمكنوا، إذا اختاروا ذلك، من القول بشكل صحيح أن ذلك كان سيُمنع في Rust..
00:44:46وفي هذه الحالة، ليس لدينا ذلك.
00:44:48لا نعرف ما إذا كان هذا كان سيُمنع في Rust..
00:44:51ليس لدينا أي فكرة.
00:44:53ربما لم يكن ليُمنع، لكننا لا نعرف.
00:44:55حسناً، كيسي، لدينا فرصة جيدة لأنه على الأرجح لم يكن ليتم إطلاقه أبداً.
00:45:01لذلك كان سيمنعه..
00:45:03صحيح.
00:45:03سيكون لدينا صفر ممثلين لأننا سنظل نصمم مجموعة الممثلين.
00:45:09نعم..
00:45:09CloudFlare تقوم بعمل رائع حقاً في هذا الأمر أيضاً.
00:45:12يدخلون ويُظهرون الكثير من أسطر الكود ويقولون: هذا بالضبط ما يحدث.
00:45:17هذا، كما تعلم، على الرغم من أن المشكلة موجودة هنا، هذا هو السطر الذي انفجر بسبب كل هذه الشروط السابقة.
00:45:23كان ذلك أنا أسخر من Rust مع unwrap، والذي لم يكن في الواقع المشكلة الحقيقية.
00:45:28لكن كما تعلم، كل هذه الأشياء تحدث نوعاً ما.
00:45:31لذا فهم يقومون بعمل رائع حقاً.
00:45:32أنا مندهش من مدى سوء العمل الذي قامت به AWS في هذه الحالة.
00:45:36حسناً، والشيء الآخر أيضاً هو أنه كان من تلك الأشياء التي تجعلني الآن، يجعلني مرتاباً منك بشكل غير ضروري، أليس كذلك؟
00:45:44عندما أقرأ هذا، أشعر وكأنك تخفي شيئاً ما.
00:45:46هل لم تكتشف حقاً ما هو الخلل؟ لقد تحدثت كثيراً عن حالة التسابق هذه، ولكن حتى من عرضك التقديمي، يمكنني أن أستنتج أن حالة التسابق لم تكن مهمة حقاً.
00:45:55كانت مجرد ما أدى إلى تعيين السجل على لا شيء، ولكن من يهتم، أليس كذلك؟ هذا شيء من الجميل وضعه في تقرير تحليل السبب الجذري كتفسير لسبب حدوث هذا الخلل الآن، بدلاً من وقت آخر، لكنه ليس الخلل نفسه.
00:46:06لذا الأمر غريب بالنسبة لي.
00:46:08عندما أرى تقرير تحليل سبب جذري لا يتحدث عن الخلل، أصبح مرتاباً.
00:46:11وبشكل غير ضروري، لأنك إذا اكتشفته فعلاً، فقط أخبرني، وحينها سأعلم أنك اكتشفته.
00:46:16أعتقد أنه أيضاً يعزز الثقة للأشخاص الذين ينظرون من الخارج ويريدون معرفة ما إذا كان بإمكانهم الوثوق بهذا الشيء المسمى DynamoDB.
00:46:23إذا بدا أنك اكتشفت الخلل فعلاً، تزداد ثقتي بك قليلاً.
00:46:27أما إذا بدا أنه ليس لديك أدنى فكرة عن ماهية الخلل، أو لا تبدو وكأنك تفهم ماهية الخلل، فهذا يثير قلقي أكثر.
00:46:33لذا أعتقد أن هذا سبب آخر لفعل ذلك في تقرير تحليل السبب الجذري..
00:46:37إنه يوفر الثقة لعملائك.
00:46:39ربما هذا هو السبب في طرد آدم أيضاً كبطل من AWS..
00:46:43ربما كل شيء مرتبط ببعضه.
00:46:44يمكن أن يكون.
00:46:45لم يريدوه أن يكشف هذه الأسرار القذرة..
00:46:48نعم.
00:46:48كان يعرف الكثير.
00:46:49كان يعرف الكثير.
00:46:51هل يمكنك تقديم ملخص سريع لمدة ثلاث دقائق عن متجر الغيتار؟ ماذا كان يكشف؟ لأنني أحاول أن أتذكر ما كان، لأنه تضمن نقطة فشل واحدة، رجل كان خارج الخدمة عند حدوث هذا الفشل أيضاً.
00:47:03لذا لا أعرف كيف أوفق بين الأمرين.
00:47:05وبالطبع ليس لدينا أي فكرة.
00:47:07ليس لدينا أي فكرة عما إذا كان أي منهما يخبرنا بالحقيقة الآن، أليس كذلك؟ لأن تقرير تحليل السبب الجذري هذا كان سيئاً للغاية، ليس لدي أي فكرة عما إذا كان صحيحاً أم لا، لكن نعم، كانت كلمة المرور wishbone 12، على ما أعتقد..
00:47:22ها أنت ذا. دائماً تحاول قتلي. هذا ما أتذكره على أي حال.
00:47:26نعم، تلك القصة كانت أنه كان هناك شيء مصمم لنسخ التكوينات.
00:47:31وذلك الشيء أصبح خارجاً عن السيطرة ولم يكن من الممكن إيقافه.
00:47:36كان ببساطة ينسخ التكوينات بشكل خاطئ تماماً وكان بحاجة إلى الإصلاح أو الترميم أو شيء من هذا القبيل.
00:47:45وليس لدينا أي معلومات إضافية لأنها كانت محادثة تم سماعها بالصدفة.
00:47:51وهل يتوافق هذا مع ما نحن بصدده؟ حسناً، قليلاً، لأن تلك المُنفِّذات تبدو وكأنها النوع من الأشياء التي قد تقوم بتشغيل نسخ تكوين، ولكن من ناحية أخرى، ليست حقاً تكويناً للأجهزة.
00:48:06إدخال DNS هو إدخال DNS.
00:48:08إنه ليس حقاً تكويناً.
00:48:10لذا أقول إن القصتين لا تتطابقان بشكل جيد..
00:48:14وهذا سبب آخر جعلني آمل أن يكون تقرير تحليل السبب الجذري هذا أكثر مصداقية قليلاً لأنني أردت أن أعرف على وجه اليقين أن القصة كانت زائفة.
00:48:24ولا أزال لا أعرف حقاً بناءً على مدى سوء تقرير تحليل السبب الجذري هذا.
00:48:29ماذا لو، ماذا لو كانت الأداة التي كتبها الرجل لنسخ التكوينات هي حرفياً المُنفِّذ؟ وكأنهم أنتجوها وهو، ولم يغيروها منذ سبع سنوات.
00:48:38كانت تلك طريقتي في ربط النقاط.
00:48:40كان مثل: يا رفاق، لقد كتبت ذلك كوسيلة لي لاختبار الأشياء في بيئتي المحلية.
00:48:45وأنتم قررتم فقط إنشاء ثلاثة مُنفِّذات ووضعها بجانب بعضها في الإنتاج.
00:48:50لا أعرف، كيف حدث هذا؟ لا أعرف..
00:48:53لدي أسئلة بديلة.
00:48:54نعم.
00:48:54أو بدلاً من ذلك، هل هو التراجع؟ لأن ذلك هو الذي قام بالنسخ مثل، مرحبًا، إليك السابق.
00:49:00صحيح.
00:49:00وهكذا سأقوم بنسخ السابق.
00:49:02ثم يصبح مثل مشكلة القيمة الفارغة هذه.
00:49:04وكأن السكريبت لم يواجه أو يعرف شيئًا فقط يصبح غير مسيطر عليه ويبدأ في الكتابة مرارًا وتكرارًا وتكرارًا وتكرارًا لدرجة أنك لا تستطيع، لا تستطيع فعل أي شيء.
00:49:14لا أعلم.
00:49:15كل ما أعرفه هو أنه، بقدر ما أستطيع أن أستنتج من تفسيرهم، بالاعتماد فقط على ما كانوا يقدمونه، ما زلت لا أعتقد أن ظروف التسابق ذات صلة حتى لأنه مرة أخرى، حرفيًا تحديث عرضي لنقطة النهاية في Route 53 كان سيُسقط جميع الثلاثة والفاعلين على الفور.
00:49:30لأنه وفقًا لهم، كل ما هو مطلوب لإيقافهم هو إذا كانت نقطة النهاية تشير إلى اسم لا يمكن حله، هذا كل ما تحتاجه.
00:49:37وإذا كان هذا صحيحًا حقًا، فإن خطأ مشغل حرفيًا كان يمكن أن يُسقط كل هذا، دون الحاجة إلى شرط تسابق.
00:49:44صحيح.
00:49:44ولذلك مرة أخرى، تحليل السبب الجذري لا يقوم بعمل جيد في إقناعي بأنكم تحدثتم عن الخلل الحقيقي، لأنني أستطيع التفكير في العديد من الطرق التي كان يمكنكم بها تشغيل نفس الشيء بالضبط التي لا تتضمن شرط التسابق هذا الذي قضيتم تحليل السبب الجذري بأكمله تخبرونني أنه كان الخلل، لكنني لا أعتقد أنه كذلك.
00:50:03لذا شكرًا لك، كيسي، على تقديم هذا العرض المذهل.
00:50:06أنا في الواقع غرينوود حقيقي، بغيرة محمومة على أيًا كانت أداة الكتابة تلك.
00:50:11يجب أن أكتشف كيفية إعداد ما لديك.
00:50:13هذا الشيء رائع..
00:50:15شكرًا للجميع على المشاهدة.
00:50:16أنا، آه، لأولئك الذين شاهدوها مباشرةً، آمل أن تكونوا قد استمتعتم بالدردشة التمهيدية وربما قليلاً من الدردشة اللاحقة.
00:50:22إذا كنتم تودون سماع النسخة الموسعة وجميع التفاعلات الممتعة، التي ليست جزءًا من القصة الرئيسية، توجهوا إلى Spotify للحصول على البودكاست الكامل، وهو فقط نحن نثرثر عن، لا أعرف عن أي هراء يأكله الآخرون والوجبات الخفيفة وما شابه ذلك من أسماء المزيد من الثرثرة، المزيد من الثرثرة مرة أخرى، وأيضًا كيسي وتي جي وتراش..
00:50:42أخطاء على شاشتي، قهوة طرفية وأعيش الحلم.

Key Takeaway

يؤكد كيسي أن الفهم الحقيقي للأعطال التقنية يتطلب تجاوز التفسيرات السطحية مثل 'حالة السباق' للوصول إلى العيوب المعمارية والبرمجية التي تجعل النظام هشاً وغير قابل للتعافي ذاتياً.

Highlights

الفرق بين التظاهر بالفهم والوصول إلى الفهم الحقيقي لجوهر المشاكل التقنية.

تحليل كيسي لانقطاع خدمة AWS DynamoDB وتفنيد فكرة أن 'حالة السباق' هي السبب الجذري الوحيد.

أهمية تقديم تقارير تحليل السبب الجذري (RCA) شفافة ومفصلة لتعزيز ثقة العملاء والمبرمجين.

انتقاد بنية النظام التي تسمح لخطأ في سجلات DNS بإيقاف جميع المنفذين (Executors) بشكل دائم.

المقارنة بين شفافية تقارير شركات مثل Google وCrowdStrike وCloudflare مقابل غموض تقرير AWS.

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

Timeline

مقدمة عن الفهم الحقيقي مقابل التظاهر بالمعرفة

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

مقارنة بين تقارير RCA لشركات التقنية الكبرى

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

هيكل نظام موازنة الحمل في AWS DynamoDB

ينتقل النقاش إلى انقطاع DynamoDB، حيث يبحث كيسي في المعلومات المتاحة من عرض re:Invent التقديمي. يشرح النظام الذي يعتمد على نقاط نهاية API وعناوين النطاق (Domain Names) التي توجه الطلبات عبر نظام DNS الخاص بـ Route 53. يذكر مصطلح 'شجرة DNS' الذي استخدمته AWS لوصف موازنة الحمل الموزونة، رغم انتقاده لعدم شرحهم لطبيعة هذه الشجرة فعلياً. يشارك في النقاش 'آدم'، بطل AWS السابق، لتأكيد بعض الجوانب التقنية حول كيفية تقسيم حركة المرور في المنطقة الشرقية (use-east-1).

آلية عمل المخطط والمنفذين ونظام الأقفال

يغوص كيسي في تفاصيل العملية، موضحاً وجود 'مخطط' (Planner) واحد يقوم بإنتاج خطط موازنة حمل جديدة باستمرار، وثلاثة 'منفذين' (Executors) يطبقون هذه الخطط. يشرح كيسي أن النظام يستخدم 'التسلسل الزمني' عبر أقفال تعتمد على سجلات DNS في Route 53 لضمان عدم حدوث تداخل بين المنفذين. ينتقد كيسي هذا التصميم متسائلاً عن الجدوى من وجود ثلاثة منفذين إذا كان عليهم العمل بشكل متسلسل وبأقفال قد تؤدي لتعطلهم. هذا الجزء يوضح كيف يمكن للتعقيد المعماري الزائد أن يخلق نقاط فشل خفية بدلاً من توفير التكرار المطلوب.

تحليل 'حالة السباق' المزعومة وتوقف النظام

يشرح كيسي كيف أدى تأخر أحد المنفذين في الحصول على القفل إلى محاولته تطبيق خطة قديمة جداً (مثل الخطة 110) في حين أن المنفذين الآخرين وصلوا لخطط أحدث. المشكلة الكبرى حدثت عندما قام منفذ آخر بحذف السجلات القديمة لتنظيف نظام DNS، مما جعل نقطة النهاية تشير إلى سجل غير موجود. يوضح كيسي أن هذا أدى إلى حالة 'لم يتم العثور على سجلات'، مما تسبب في فشل طلبات API بالكامل. يجادل كيسي بأن 'حالة السباق' كانت مجرد محفز، لكن العيب الحقيقي يكمن في كيفية استجابة الكود لهذا الموقف.

نقد الكود البرمجي وغياب الشفافية في التقرير

في القسم الختامي، يحلل كيسي لماذا يعتبر تعطل المنفذين بشكل دائم هو الفشل الحقيقي، حيث كان من المفترض أن يتجاوز الكود السجلات المفقودة ببساطة. يخمن كيسي أن الكود (ربما بلغة Java أو Scala) كان يرمي استثناءات (Exceptions) غير معالجة عند فشل البحث في DNS، مما أدى لموت العمليات. ينتقد AWS لعدم تقديم مقتطفات كود توضح الخطأ الفعلي كما تفعل Cloudflare، مما يقلل من الثقة التعليمية في التقرير. ينتهي الفيديو بالتأكيد على أن الشفافية في تقارير الأعطال هي ما يبني ثقة العملاء ويساعد المبرمجين على تجنب تكرار نفس الأخطاء المعمارية.

Community Posts

View all posts