VOL27: How Meta Leverages AI For Efficient Incident Response
أهلًا وسهلا بكم في العدد السابع والعشرين من النشرة الأسبوعية لاقرأ-تِك 🎉
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد السابع والعشرين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
How Meta Leverages AI For Efficient Incident Response
Linux Commands Cheatsheet
Materialized Views
Unit & Widget Testing in Flutter
ستجدون أيضًا في هذه النشرة:
الشراكات - Sponsorship
قناة التليجرام مجانية للجميع حتى يصلك كل مقال جديد
كيفية كتابة مقالات معنا في اقرأ-تِك: والمقالات تكون متاحة ومجانية للجميع ومحفوظة باسم الكاتب بكل تأكيد
كيفية الاشتراك في اقرأ-تِك من خلال InstaPay و VodafoneCash
How Meta Leverages AI For Efficient Incident Response
فريق المهندسين في Meta اشتغلوا على انهم يسرعوا من عملية التحقيق في مشاكل الـ System Reliability باستخدام نظام جديد مدعوم بالـ AI عشان يحددوا الـ Root Cause بتاع المشكلة.
النظام ده بيستخدم خليط ما بين "heuristic-based retrieval" و "large language model-based ranking" عشان يسرع عملية تحديد السبب الجذري أثناء التحقيقات. ومن خلال اختبار النظام، فريق المهندسين في Meta لقى إنه وصل لدقة بتوصل لـ 42% في تحديد الأسباب الجذرية للتحقيقات وقت ما بتبدأ علطول، خصوصًا المشاكل المتعلقة بالـ "web monorepo".
والـ الـ heuristic-based retrieval هو أسلوب بيستخدم قواعد وإرشادات معينة، أو ما يُسمى بالـ "heuristics"، عشان يسهل عملية البحث والتصفية في كميات كبيرة من البيانات أو التغييرات. الفكرة الأساسية في الـ "heuristics" هي إنها مش بتعتمد على الدقة المطلقة، ولكنها بتعتمد على تقنيات سريعة وفعالة لتقليل مساحة البحث بشكل كبير، حتى لو أدى ده لتقليل دقة بسيطة في النتائج.
فالتحقيق في المشاكل حاجة أساسية عشان نضمن استقرار النظام، وده ضروري عشان نحل المشاكل بسرعة. فعشان كده Meta بتستثمر في تطوير أدوات التحقيق بتاعتها زي أداة "Hawkeye" اللي بيستعملوها داخليًا عشان يعملوا "debugging" للـ Workflows الخاصة بالـ machine learning.
شكل الـ Investigations في Meta
كل تحقيق بيكون مختلف عن التاني، ولكن مما لاشك فيه أن تحديد السبب الجذري للمشكلة هو ضروري جدًا عشان نعرف نحل المشكلة بطريقة صحيحة وسليمة. فالتحقيق في المشاكل اللي بتحصل في أنظمة معتمدة على الـ "monolithic repositories" بيكون صعب من ناحية الـ Scalability بكل تأكيد، وده عشان بيبقى فيه عدد كبير من التغييرات من فرق مختلفة. بالإضافة لكده، الأشخاص اللي بيحلوا المشكلة محتاجين يبنوا فكرة عن المشكلة عشان يبدأوا يشتغلوا عليها، زي إيه اللي اتعطل، الأنظمة اللي متأثرة، والناس اللي ممكن تتأثر بالمشكلة. فلازم يكون معاهم Context واضح عشان يقدروا يفهموا طبيعة المشكلة اللي بيتعاملوا معاها.
التحديات دي بتخلي عملية التحقيق في الـ (anomalies) معقدة وممكن تاخد وقت طويل. فالـ AI بيوفر فرصة لتبسيط العملية دي، وتقليل الوقت اللي محتاجينه، وكمان مساعدة الأشخاص اللي بيحققوا في المشكلة يقدروا ياخدوا قرارات بشكل أفضل. فهم ركزوا على بناء نظام قادر على تحديد التغييرات في الكود اللي ممكن تكون السبب الجذري لمشكلة معينة.
Root Cause Isolation
النظام بيستخدم "heuristics-based retriever" جديد، قادر إنه يقلل مساحة البحث من آلاف التغييرات لعدد قليل من مئات التغييرات من غير ما يقلل الدقة بشكل كبير، زي مثلاً استخدام "code and directory ownership" أو استكشاف "runtime code graph" للأنظمة المتأثرة. فبعد ما بيقللوا مساحة البحث لعدد قليل من التغييرات المهمة للتحقيق الجاري، بيعتمدوا وقتها على نظام "LLM-based ranker" عشان يحدد السبب الجذري وسط التغييرات دي كلها ويختزلهم لعدد بسيط مكون من 5 Candidates يدوروا فيهم.
Linux Commands Cheatsheet
نظام التشغيل Linux بقى واحد من أكتر الأنظمة اللي بيستخدمها المطورين، خاصة في تطوير البرمجيات وإدارة الـ Servers والـ Cloud Infrastructure. وده لإن Linux نظام مفتوح المصدر ومرن، وبيدي للمطورين سيطرة كاملة على البيئة اللي بيشتغلوا فيها، فده بيخلي تعلمنا وفهمنا لأوامر الـ Linux حاجة أساسية لو عاوزين نبقى شغالين بكفاءة وفعالية أكتر.
الـ Linux بيعتمد بشكل كبير على الـ Command Line Interface أو زي ما بنقول عليها "Terminal"، واللي هي أداة قوية جدًا وبتسمح للمطورين يعملوا مهام كتيرة زي إدارة الملفات، مراقبة العمليات، تثبيت البرامج، وكمان التحكم في الأذونات.
لما نتعلم أوامر Linux، هنقدر اننا نـ Automate أغلب مهام الشغل اليومي بتاعتنا ونسهل حاجات كتير في شغلنا، وكمان هنقدر نتحكم في كل حاجة في النظام بتاعنا بسهولة.
فورقة وقلم وتعالوا نتكلم عن أكثر الـ Commands المستخدمة للمطورين 🚀
ls
ls -l /home/user
يعرض الملفات والمجلدات في الـ Directory المحدد (أو الـ Directory الحالي إذا لم يُحدد). والخيار -l
يعرض معلومات مفصلة مثل أذونات الملفات، الملكية، الحجم، وتاريخ التعديل.
cd
cd /var/logs
يغير الـ Directory الحالي إلى الـ Directory المحدد.
pwd
pwd
يعرض المسار الكامل للـ Directory الحالي.
mkdir
mkdir eqraatech
ينشئ مجلدًا جديدًا بالاسم المحدد.
rm
rm old_file.txt
يحذف الملف المحدد. واستخدم الـ Optioon rm -r
يستعمل أيضًا لحذف المجلدات ومحتوياتها بشكل متكرر.
cp
cp index.html /var/www/html/
ينسخ الملفات أو المجلدات من المصدر إلى الوجهة. واستخدم الـ Option cp -r
لنسخ المجلدات.
mv
mv old_name.txt new_name.txt
ينقل أو يعيد تسمية الملفات أو المجلدات.
الشراكات - Sponsorship
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship وتقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 🚀
لا تدع شيء يفوتك!
بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀
آملين بده اننا نفتح باب تاني لتحقيق رؤيتنا نحو إثراء المحتوى التقني باللغة العربية ، ومساعدة لكل متابعينا في انهم يوصلوا لجميع أخبار اقرأ-تِك من حيث المقالات ومحتوى ورقة وقلم والنشرة الأسبوعية وكل جديد بطريقة سريعة وسهلة
مستنينكوا تنورونا , وده رابط القناة 👇
Materialized Views
في عالم قواعد البيانات، دايمًا المشكلة بتكون في كيفية تحسين الـ Performance بتاعة الـ Queries اللي شغالين عليها وفيه أكتر من طريقة لتحسين الأداء وتسهيل الوصول للبيانات وكنا اتكلمنا عن بعضهم قبل كده.
واحدة من الطرق دي هي Views. فالـ View هو عبارة عن Query بتجيب البيانات من جدول أو أكتر وتقدمهالك كأنها جدول مستقل تماماً. يعني مثلاً، لو عندك جدول فيه الكتب وجدول تاني فيه المؤلفين، ممكن تعمل View يعرض لك البيانات المهمة من الجدولين دول مع بعض ويكون فيه بس الـ Columns اللي مجتاجها.
الـ View العادية ممتازة لما يكون عندك بيانات بتتغير بشكل مستمر، لأنها دايمًا بتجيب البيانات الأحدث. لكن المشكلة بتظهر امتة ؟ المشكلة بتظهر لو عندنا كمية كبيرة وضخمة من البيانات أو الـ Query معقدة شويتين فبالتالي هيبقى فيه بطء شديد في الأداء ككل. وهنا بيجي دور الـ Materialized Views كحل سحري يقدر يوفرلنا الأداء المطلوب.
الـ Materialized View مش مجرد Query بتتنفذ كل مرة زي الـ Views العادية. ولكن هي بتنفذ الـ Query مرة واحدة بس وتخزن النتيجة فعليًا في جدول جديد جوا الـ Database.
فالميزة الكبيرة هنا إننا لما نطلب البيانات دي تاني، مش هنحتاج الـ Query تتنفذ من الأول، وبالتالي السرعة بتبقى أفضل بكتير جدًا.
فلو بنتعامل مع قواعد بيانات كبيرة أو Queries معقدة شوية، وكان عندنا Query على سبيل المثال محتاجة بيانات من أكتر من جدول وبتنفذ عمليات حسابية معقدة، في الحالة دي كل مرة بنطلب فيها البيانات دي السيرفر هيستهلك وقت ومجهود كبير. ولكن مع الـ Materialized View، احنا بنخزن النتيجة مرة واحدة وبعد كده أي Query بتيجي للبيانات بيكون أسرع بكتير لاننا بس بنقرأ الجدول اكنه جدول جديد موجود في الـ Database.
طب الكلام ده جميل جدًا لحد كده ، ولكن احنا ناسيين نقطة مهمة .. ايه اللي هيحصل في الجدول ده لو الجداول القديمة فيها قيم اتغيرت أو بيانات اتحذفت أو بيانات جديدة انضافت ؟
على عكس الـ View الطبيعي اللي بيتغير لما البيانات الأصلية تتغير لانه بيعيد تنفيذ الـ Query من أول وجديد، الـ Materialized View مش هيتحدث تلقائيًا لوحده. وعشان كده، لازم نعمل تحديث للـ Materialized View بشكل دوري عشان نضمن إن البيانات اللي فيه دايمًا حديثة.
فيه طرق مختلفة للتحديث، أشهرها:
الـ Complete Refresh: وفي الطريقة دي كل اللي بنعمله اننا بنمسح البيانات المخزنة القديمة ونرجع بكل بساطة ننفذ الـ Query من أول وجديد عشان نجيب البيانات الحديثة كلها. فدي بتبقى مفيدة جدًا لو التغييرات على البيانات الأصلية بتبقى كبيرة.
الـ Incremental Refresh: وفي الطريقة دي كل اللي بنعمله اننا بنحدث بس البيانات اللي اتغيرت من آخر مرة عملنا فيها تحديث للـ Materialized View. يعني لو اتضافت أو اتعدلت بيانات جديدة، التحديث ده بس اللي هيضيفها أو يعدلها بس من غير ما يمسح أي بيانات القديمة.
Unit & Widget Testing in Flutter
الـ Testing في Flutter هو جزء مهم من عملية تطوير التطبيقات علشان تتأكد إن التطبيق بيشتغل زي ما هو مطلوب ومن غير مشاكل. الموضوع ده بيساعدك إنك تطلع منتج نهائي عالي الجودة وأقل أخطاء.
Flutter Testing
ايه هو الـFlutter Testing؟
في الاول خلينا متفقين ان كل ما عدد الـFeatures في التطبيق بتزيد كل ما بيبقى الـ Manual Test أصعب، فأحسن حل هو استخدام الـ Automated Test. في Flutter، بتتقسم لـ3 أنواع:
الـ Unit Test: بنختبر فيها الوحدات الصغيرة زي functions و classes. - هدفها تتأكد إن كل جزء في الكود بيشتغل صح.
الـ Widget Test: بنختبر فيها الـWidgets، وده بيتقال عليها في Frameworks تانية إنها Component Test. بنتأكد إن الـ Widgets بيشتغلوا صح في الـUI.
الـ Integration Test(End-to-End testing): بنختبر فيها الـ Application كله أو جزء كبير منه. هدفها تتأكد إن كل حاجه في التطبيق بتتفاعل مع بعضها صح.
Unit Testing in Flutter
ايه هو الـ Unit Testing؟
بنختبر فيها الوحدات الصغيرة زي functions و classes. هدفها تتأكد إن كل جزء في الكود بيشتغل صح. خلينا نفترض ان عندك simple class بيحسب شوية calculations زي انو يطرح او يجمع:
ازاي ممكن اطبق الـ Unit Testing هنا بحيث اتأكد من ان كل حاجه شغاله صح وان عمليه الجمع فعلا بتجمع مش مثلا بتقسم او بتطرح او بتقوم بمهام غير اللي معموله عشانها وهكذا.
في الأول ايه الـ packages المستخدمة؟
الـ "yaml"dev_dependencies: test: في الأول هتمسح الـ test file اللي موجود جوا الـ test folder لأن دا كان مثال بسيط للـ testing معمول للـ default demo application لما بننشئ project جديد فبالتالي انت مش محتاجه.
هتـ Create file جديد جوا الـ test folder وتسميه اسم معبر وبعد الاسم _test فمثال:
testing_app/lib/example_page.dart/test/example_unit_test.dart
بعدها هتحط الـ main function عشان دي هتبقا الـ entry point للـ tests بتاعتك. وبعد كدا عندك Three methods مهمين جدا:
الأولى (test method): ودي ال method اللي بنعرف فيها ال unit test لحاجه (واحده بس) ودي بتاخد Two Parameters، الأولى description String والتانية callback function اللي بحط فيها الـ test logic.
التانيه (group method): نفس الكلام ولكن الفرق انها بضم اكتر من test method ل أكتر من test case.
التالته (expect): ودي method موجوده جوا ال test بتضمنلك ان القيم اللي بتمررها بتتوافق مع القيم المتوقعه و هي دي اللي من خلالها لو كان الـ test صح بيطلعلك ان الـ test passed او هيديك exception.
وبما ان عندنا Two methods عايزين نختبرهم (add& subtract) ف هنعمل لكل واحده test جوا الـ group زي ما واضح في الصوره. بعد كده تقدر تـ run بالـ command دا:
flutter test (fileName)
وبعدها هيظهرلك ال Result سواء Test Passed OR Failed.
مشاركة من أحمد عطية في مجتمع اقرأ-تِك 😂
تقدروا دلوقتي تشتركوا في اقرأ-تِك بخصم الـ 20% وتنضموا لمجتمع مهتم بالقراءة في هندسة البرمجيات بـ 50 جنيه بس 🎉
وتستمتعوا بحرية كاملة في قراءة المقالات في مواضيع مختلفة بجودة عالية زي:
Data Structure & Algorithms , System Design , Distributed Systems , Micro-Services, Clean Code, Refactoring, Databases , Web Development, DevOps وغيرهم كتير باللغة العربية!
بالاضافة لمحتوى ورقة وقلم اللي بنشرح فيه مفاهيم برمجية بطريقة سهلة وباستعمال صور توضيحية 🚀
ولو فيه مشاكل في الدفع الأونلاين فمتاح دلوقتي الاشتراك من خلال InstaPay و VodafoneCash 💪
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇