VOL:17 Uber's Journey to Modernizing Big Data Infrastructure to GCP
أهلًا وسهلا بكم في العدد السابع عشر من النشرة الأسبوعية لاقرأ-تِك 🎉
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد السابع عشر من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
API Authentication Methods
Lazy Evaluation in Java Streams
Linux Administration Notes
SQL Injection
أيام متبقية على انتهاء خصم الـ 50%
مشروع Mermaid وازاي بقينا نقدر نبني Diagrams بالـ Markdown
ماذا بعد الـ Interview ؟
Uber's Journey to Modernizing Big Data Infrastructure to Google Cloud Platform
اكتب معنا
اقتباسات
دقيقة لقلبك
API Authentication Methods
أثناء تعاملنا مع ال APIs بنحتاج نعمل User Authentication واللي هي عبارة عن عملية التحقق من هوية المستخدم اللي باعت ال Request, ودا جانب هام جدُا في حماية الـ API وكذلك خصوصية وأمان المستخدمين.
فورقة وقلم و تعالوا نتعرف على أشهر 5 طرق من ال User Authentication Methods 🚀
Basic Authentication
دا أبسط نوع وفيه بنبعت اسم المستخدم وكلمة المرور في ال Request في صيغة Base64 , طبعًا النوع دا منخفض الأمان ومش بنستخدمه في الـ Production Environment إلا علي HTTPS Connection, لأن ال Base64 Encoding بيتحل بأي Decoder على الإنترنت فلو ال Request اتعرض ل Eavesdrop Attack يقدر المهاجم بسهولة يعرف بيانات المستخدم.
الاستخدام المناسب:
مناسب للاستخدام في وقت التطوير أو الـ Testing
ممكن نستخدمه في التطبيقات الداخلية واللي ضامنين إنها على شبكة آمنة.
GET /protected-resource HTTP/1.1
Host: example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
API Key Authentication
ال API Keys عبارة عن مفاتيح أو "رموز تعريف" بيصدرها ال API لل Clients ودور ال Client أنه يبعتها مع كل Request لل API كوسيلة تحقق من هوية المستخدم. ال Client ممكن يبعتها ك Query String أو يحطها في ال Request Header أو حتي ك Cookie.
وزي ال Basic Authentication لازم نستخدمه علي HTTPS Connection لأن لو أي حد عرف ال API Key هيقدر ينتحل شخصية ال Client ويستعمل ال API باسمه.
الاستخدامات المناسبة:
بتكون في بيئات التطوير و الاختبار أو في التطبيقات الداخلية
ممكن نستخدمه في الـ Production ولكن مع وسائل أخري نزود بيها معامل الأمان.
ونلاحظ واحدة من أهم عيوب الـ API Key إنه مش بيدي User-Specific Permissions لأنه مصمم بالأساس عشان يستخدم بين ال Apps أو ال Services وبعضها.
Lazy Evaluation in Java Streams
لو نفتكر مع بعض الـ Java Stream اصلًا ظهرت مع الـ Java 8 , ووقتها عملت طفرة في طريقة التعامل مع الـ Collections والبيانات في الـ Java. والـ Streams جت في الأساس كأداة قوية بتوفر منظور مختلف و High-Level شوية من خلال استعمال منهجية الـ Declarative في التعامل مع البيانات ومعالجتها.
وأحد أشهر وأقوى مميزات الـ Streams واللي كتير ما يعرفوش عنها هي الـ Lazy Evaluation. فخلونا قبل ما نتكلم عن الـ Lazy Evaluation نراجع مع بعض سريعا على الـ Java Streams.
Java Streams
الـ Streams في الـ Java بتوفر طريقة نقدر نعالج بيها مجموعة من البيانات سواء كان ده بشكل Sequential أو Parallel لانها بتقدملنا برضو مميزات اننا نعالج البيانات بشكل Parallel أي على التوازي ونستغل الـ CPU Cores في معالجة البيانات.
فالـ Stream Pipeline وخلونا نقول عليه هنا Pipeline لانه اشبه بـ Pipeline من العمليات أو الـ Operations اللي بتتم على البيانات واحدة تلو الأخرى فهو زي الـ Pipeline بالظبط , بيكون عندنا مصدر للبيانات دي وهو بالطبع الـ Collections أو مجموعة البيانات اللي محتاجين نعالجها.
بيتبع مصدر البيانات ده عمليات وسيطة بنقول عليها Intermediate Operations وعمليات نهائية بنقول عليها Terminal Operations.
وعشان منتوهش خلونا نوضح العمليات الوسيطة والنهائية دي مع بعض بشكل أوضح.
Intermediate Operations
العمليات دي بتكون زي الـ Filter
والـ Map
واللي من خلالها بنغير من العناصر اللي موجودة في الـ Stream لشكل تاني , والعمليات دي بنقول عليها Lazy Evaluated وهنعرف يعني ايه كمان شوية.
Terminal Operations
العمليات دي زي الـ forEach والـ collect ودي عمليات بتدي نتيجة نهائية , فبعد العملية النهائية دي الـ Stream خلاص مينفعش يتم استعماله لانه طلع نتيجة نهائية.
المصطلح ده من اسمه فهو شارح نفسه شوية , وده معناه ان العمليات اللي بتتم على العناصر في الـ Stream هتتم فقط في حالة الضرورة , وعادة ده بيحصل في العمليات النهائية اللي هي الـ Terminal Operations. والكلام ده طبعا عكس طبيعة الـ Eager Evaluation واللي فيها العمليات بتتم بشكل لحظي وفوري على البيانات.
خلونا نبسط الموضوع أكتر , احنا دلوقتي لو عندنا Java Streams فالعمليات الوسيطة اللي هي الـ Intermediate Operations مش هتتم لغاية ما نوصل للـ Terminal Operations.
عاوزين نقرأ الجملة اللي فاتت دي تاني مع بعض ونركز فيها .. العمليات الوسيطة مش بتتم الا اما نوصل للعمليات النهائية , والكلام ده مهم في الواقع لانه بيحسن من الـ Performance خصوصا في التعامل مع الـ Datasets الكبيرة وده لانه بيقلل عدد الـ Iterations والحسابات اللي ممكن تتم على الـ Streams.
تعالوا نشوف مع بعض أمثلة عشان نفهم الموضوع أكتر ونشوف ازاي بيأثر في الـ Performance.
Example 1: Life Before Streams
في المثال ده احنا هنعمل List من الأعداد اللي هنعملها Generate , وبعدين هنطلع منهم الـ Even Numbers ونخزنهم عشان هنحتاج بعد كده نطلع منهم أول عدد Even , قد يبدوا المثال ساذج شوية , ولكن خلونا نكمل مع بعض , وهنفهم قوة الـ Streams هتفيدنا بايه
ده كده شكل الـ Code من غير استعمال الـ Streams طبعا مع الـ Large Datasets احنا متخيلين ومع وجود Logic Complex احنا بنحتاج عمليات Intermediary تتم وهنحتاج عشان نخزنهم Intermediate Data Structures واللي بالتالي كل ده هيتخزن في الـ Memory.
طب وجود الـ Streams هتفيد بايه ؟ خلونا نشوف.
SQL Injection Attack
أكيد سمعنا كتير عن ال SQL Injection وقرأنا عنه كتير ، فاحنا هنقدملكم انهاردة دليلكم المختصر والوافي عنه
فورقة وقلم وتعالوا نتكلم عن ايه هو وليه بنسمع عنه كتير وازاي كمبرمج احمي التطبيقات بتاعتي تجاه النوع دا من الهجمات.
SQL Injection
الـ SQL Injection هو من أشهر أنواع الهجمات الأمنية على تطبيقات الويب و دا لسببين:
شيوع ال SQL Injection vulnerabilities أو الثغرات من النوع دا في التطبيقات لأنه أي موقع Web بيتعامل مع قواعد البيانات بـ Code معين معرض ان الـ Code دا يكون فيه هذه الثغرات وما علي الـ Attacker أو المهاجم انه يلاقيها ويستغلها.
لأنه بيستهدف دايمًا قواعد البيانات واللي دايمًا بتشيل بيانات مهمة ممكن الـ Hacker يستغلها.
طريقة الـ SQL Injection
النوع دا من الهجمات معتمد علي ال dynamic sql queries اللي بستخدم String concatenation زي المثال دا
هنا اقدر كمهاجم ابعت sql query زي
'' OR '1'='1'
مكان ال customername والكود مش هيقدر يفرق لأنه الاتنين بالنسبة ليه Strings لكن وقت التنفيذ في قاعدة البيانات الquery ده هيتنفذ وهيرجع كل بيانات العملاء بدل ما يرجع عميل واحد!
Linux Administration Notes
الـ Linux Administration بيختص بإدارة وتشغيل نظام التشغيل Linux. النظام ده يعتبر من أكتر الأنظمة قوة ومرونة وكمان مفتوح المصدر، يعني أي حد يقدر يطوره ويعدل فيه.
في شغل الـ Linux Admin، بتكون مسئول عن تشغيل السيرفرات وحمايتها، إدارة المستخدمين والصلاحيات بتاعتهم، وكمان متابعة الأداء بتاع النظام وتحديثه بانتظام. بتتعامل مع حاجات زي إعداد الشبكات، إدارة قواعد البيانات، تشغيل التطبيقات، وأتمتة العمليات باستخدام السكربتات.
وفي السلسلة دي هشارك معاكوا بعض الملحوظات والـ Notes المرتبطة بالـ Linux Administration.
فاضل 5 أيام بس على انتهاء الخصم على الاشتراك السنوي فتقدروا دلوقتي تلحقوا خصم بنسبة 50% يعني بـ 30 جنيه بس 🚀 وخصم على خطط الاشتراك الشهري بنسبة 30% 🎉
تقدروا دلوقتي تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات في مواضيع مختلفة زي:
Data Structure & Algorithms , System Design , Distributed Systems , Micro-Services, Clean Code, Refactoring, Databases , Web Development, DevOps وغيرهم كتير باللغة العربية!
بالاضافة لمحتوى ورقة وقلم اللي بنشرح فيه مفاهيم برمجية بطريقة سهلة وباستعمال صور توضيحية بجودة عالية 🚀
ولو فيه مشاكل في الدفع الأونلاين فمتاح دلوقتي الاشتراك من خلال InstaPay و VodafoneCash 💪
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍
Mermaid
مرميد (Mermaid) هي مكتبة جافا سكريبت مفتوحة المصدر بتساعد في إنشاء الرسوم البيانية والمخططات بشكل بسيط وسهل باستخدام نصوص. المكتبة دي بتسهّل على الناس يعملوا الرسوم البيانية من غير ما يحتاجوا أدوات معقدة. كل اللي عليك تعمله هو كتابة شوية نصوص، ومرميد هتحولهم لرسوم بيانية جاهزة.
مميزات Mermaid
سهولة الاستخدام: أي حد حتى لو مش بيفهم في البرمجة يقدر يستخدم مرميد ويكتب النصوص لإنشاء الرسوم البيانية.
تكامل سلس: ممكن تدمج Mermaid بسهولة مع أدوات التوثيق والمنصات زي GitHub وMarkdown وJekyll وVSCode.
تنوع الرسوم البيانية: بتدعم أنواع كتير من الرسوم البيانية زي المخططات الانسيابية، ومخططات Gantt، والرسوم البيانية التسلسلية، ومخططات الفئات.
ازاي تستخدم مرميد
كل اللي عليك تعمله هو كتابة النصوص داخل كود Markdown أو في ملفات لوحدها. النصوص دايمًا بتبدأ بالكلمة المفتاحية graph
عشان تحدد نوع الرسم البياني اللي عاوزه. مثلاً، لو عايز تعمل مخطط انسيابي بسيط، ممكن تكتب النص ده:
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
أمثلة عملية
المخططات الانسيابية: بتستخدم لرسم العمليات والخطوات بشكل سهل وبسيط، وبتقدر تفهم منها الفكرة بسرعة.
ماذا بعد الـ Interview ؟
اتكلمنا عن الاستعداد والتواصل في الانترفيو سواء السلوكي أو التقني والحقيقة معظم الناس بتعمل مجهود كبير في الجزء دا وعندها خطوات واضحة ولكن أدام سؤال "اعمل ايه بعد الانترفيو؟" معظم الناس بتكون تايهة.
بعد نهاية الانترفيو مباشرة لازم تتدون في ملف عندك انطباعك عن الشركة وعن طريقتهم لأنك بتقيمهم زي ما بيقيموك وسهل تنسي التفاصيل اللي هتحتاجها وقت اتخاذ القرار.
ومن اللطيف أنك تبعت email بسيط خلال 24 ساعة لل interviewers بتشكرهم فيه علي وقتهم ومجهودهم و بترفق فيه ال Linkedin بتاعك عشان تكونوا علي تواصل وفي دائرة المعارف - دا لو حابب يعني -.
ولو ال hiring manager مكنش محدد هيردوا عليك امتي او ايه الخطوات الجاية فبردو بنبعتله ايميل بنشكره علي مجهوده في ترتيب الانترفيو و بنرفق الاسئلة دي.
وبس كدا متبعتلهمش أي إيميل تاني قبل أسبوعين واديهم مساحة للرد, معظم الناس اللي قابلتهم بيستعجلوا جدأ الرد وبيقلقوا لو اتأخر و بينسوا إن في حالات كتير في متقدمين تانيين لازم يعملولهم انترفيو قبل ما يردوا عليك بالرفض أو الايجاب وكذلك ال hiring process جوا الشركات بيشترك فيها أكتر من شخص فدا بيخلي القرار ياخد وقت وكل لما كانت الشركة أكبر غالبا الوقت بيطول لحد أسبوعين.
بعد الاسبوعين تقدر تبعتلهم ايميل استطلاعي عن ردهم بتسأل فيه عن ال updates وكذلك بتبين انك لازلت مهتم بالشركة ولو محتاجين اي معلومات ناقصة فأنت علي استعداد توفرها وغالبا هيجيلك رد سريع علي هذا الايميل. لو مجاش رد فهتستني اسبوع وتبعت ايميل تاني بتفكرهم انك عملت انترفيو معاهم في تاريخ كذا وتسأل فيه عن ال updates لو مردوش فتقدر تقفل ملف الشركة دا من عندك وتركز في فرص وانترفيوهات تانية.
Pro Tip: طبعأ تقدر تستغل chat-GPT في صياغة الايميلات الرسمية كلها
الرد بعد الانترفيو بيكون ليه 3 أشكال:
1- الايجاب وهنكمل للخطوة الجاية في الانترفيوهات
2- الايجاب وباعتين "عرض العمل" او هتحددوا وقت يعرضوا عليك عرض العمل
3- الرفض وموضحين الاسباب ولو مش موضحين فهتبعتلهم انك مهتم تعرف ايه النقاط اللي محتاج تتطورها وال feedback بتاعهم عشان تبقي فعلا استفدت من التجربة وبننقل علي الشركة اللي بعدها بكل سلاسة ^^
المرة الجاية باذن الله هنتكلم عن ازاي نرد علي ايميل ال Job Offer وخصوصا لو لسه بنعمل انترفيوهات مع شركات تانية وازاي نقارن بين عروض العمل المختلفة. 😍
Uber's Journey to Modernizing Big Data Infrastructure to GCP
أوبر كشفت عن استراتيجيتها لانها تـ Migrate Batch Data Analytics والـ Machine Learning (ML) إلى Google Cloud Platform (GCP). أوبر عندها واحدة من أكبر الـ Installations لـ Hadoop في العالم، بتدير أكتر من إكسا بايت من البيانات على عشرات الآلاف من السيرفرات في كل منطقة من منطقتين ليها. النظام البيئي للبيانات المفتوح المصدر، خصوصًا Hadoop، كان هو حجر الزاوية في منصة البيانات بتاعتهم.
الخطة الاستراتيجية للـ Migration بتتكون من خطوتين:
الـ Migration الأولية والاستفادة من خدمات الـ Cloud Native. استراتيجية أوبر الأولية تشمل الاستفادة من Object Store بتاع GCP لتخزين Data Lake أثناء الـ Migration لباقي نظام البيانات بتاعهم على Infrastructure as a Service (IaaS) بتاع GCP. النهج ده بيسمح بتسريع عملية الـ Migration مع أقل تعطيل ممكن للشغل القائم ، لأنهم يقدروا ينسخوا النسخ بالظبط بتاعة الـ Software Stack بتاعهم ، Engines، والـ Security Models على الـ IaaS.
بعد المرحلة دي، فريق الهندسة بتاع أوبر بيخططوا لتبني خدمات Platform as a Service (PaaS) بتاع GCP تدريجيًا، زي Dataproc و BigQuery، للاستفادة الكاملة من مرونة وأداء خدمات الـ Cloud Native.
Scope of migration (source: Uber's blog)
بعد ما يكملوا الهجرة الأولية، الفريق هيركز على دمج خدمات الـ Cloud Native لتحقيق أقصى أداء وقابلية للتوسع في بنية البيانات. النهج المتدرج ده بيضمن إن مستخدمي أوبر، من الـ Dashboard Owners لحد متدربي الـ ML، يمروا بانتقال سلس من غير ما يغيروا في الـ Workflow أو الخدمات الموجودة.
وعشان يضمنوا هجرة سلسة وفعالة، فريق أوبر حطوا شوية مبادئ توجيهية:
تقليل تعطيل الاستخدام: عن طريق نقل غالبية نظام الـ Batch Data Stack على الـ Cloud IaaS زي ما هو، وطبعا بيهدفوا لحماية المستخدمين من أي تغييرات في الأدوات أو الخدمات بتاعتهم. باستخدام الـ Abstractions والـ Open Standards عشان يوصلوا لـ Migration تكون شفافة قدر الإمكان.
الاعتماد على Cloud Storage Connector: اللي بينفذ واجهة Hadoop FileSystem على Google Cloud Storage، لضمان التوافق مع HDFS. عن طريق توحيد الـ Clients للـ Apache Hadoop HDFS بتوعهم، وبالتالي ده هيساعدهم يجردوا التفاصيل بتاعت تنفيذ HDFS في الـ On-Premises، وده هيسمح بتكامل سلس مع الـ Storage Layer بتاعت GCP.
تطوير Data Access Proxies: لـ Presto و Spark و Hive اللي بتجرد الـ Clusters بشكل Physically. الـ Proxies دي هتدعم توجيه الاختبارات للـ Clusters المبنية على الـ Cloud أثناء مرحلة الاختبار، وتوجيه الـ Queries والوظائف بالكامل للـ Cloud أثناء الـ Migration الكاملة.
الاستفادة من Cloud Agnostic Infrastructure: البيئة الحالية بتاعة الـ Containers والـ Computing Platform والـ Deployment Tools بتاعة أوبر مبنية عشان تكون محايدة بين الـ Cloud والـ On-Premises. والـ Platforms دي هتمكنهم من توسيع نظام الـ Batch Data كاملًا بسهولة على IaaS بتاع الـ Cloud.
بناء وتحسين خدمات إدارة البيانات الحالية: لدعم الخدمات السحابية المختارة والمعتمدة، لضمان إدارة بيانات قوية. الشركة تهدف للحفاظ على نفس مستويات الوصول المصرح به والأمان زي الـ On-Premises، مع دعم توثيق المستخدم السلس مع الـ Data Lake بتاع Object Store والخدمات السحابية الأخرى.
Pre and post-migration Uber's batch data stack (source:Uber's blog)
اكتب معنا
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇
First, solve the problem. Then, write the code. — The Elements of Programming Style by Brian W. Kernighan and P. J. Plauger
What should I do to understand what recursion is
😂 you must first understand recursion