VOL44: ElasticSearch - A Powerful Search and Query Engine
أهلًا وسهلا بكم في العدد الرابع والأربعين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الرابع والأربعين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Elasticsearch: A Powerful Search and Query Engine
How to Write Better Logs
Concurrency Building Blocks (Process)
Process Scheduling
The Future of Software Development with AI Agents Webinar
ElasticSearch: A Powerful Search and Query Engine
هنتكلم انهاردة عن ElasticSearch وهو محرك بحث مفتوح المصدر, يستخدم لتخزين، وبحث، وتحليل كميات كبيرة من البيانات في وقت شبه حقيقي (Realtime).
احنا بنحتاجه في عمليات البحث عن النصوص بالأساس لأن لو حاولنا نعمل البحث دا باستخدام قاعدة البيانات العادية فهتكون عملية بطيئة جدًا وغير فعالة, بينما ElasticSearch بيقوم بفهرسة البيانات الضخمة Pre-Indexing ثم البحث باستخدام الفهرس دا وكمان هو مخصص للبحث عن النصوص ولذلك بيدعم خصائص زي دعم المرادفات و الغلطات الإملائية وتحليل للنصوص وطبعًا كل ده بيقدملنا عمليات بحث أسرع بكثير مقارنة بقواعد البيانات التقليدية.
كمان بيعتمد على واجهة RESTful API، مما يجعل استخدامها مرنًا وسهلًا في العديد من التطبيقات.
المميزات
أداء سريع:
ودا لأنه بيعتمد على فهرسة البيانات Data Indexing لجعل عمليات البحث سريعة جدًا حتى مع كميات كبيرة من البيانات.
قابلية التوسع Scalable:
يمكن توزيع البيانات Horizontally عبر العديد من الـ (Nodes)، مما يتيح التعامل مع أحجام بيانات ضخمة.
دعم كامل للنصوص:
يمكنه التعامل مع لغات مختلفة، وفهم مصطلحات البحث المختلفة بفضل دعم تحليل النصوص.
التكامل السلس:
يتكامل مع الأدوات الأخرى مثل Kibana (للعرض والتحليل)، وLogstash (لتجميع البيانات)، مما يجعل العمل معه تجربة متكاملة.
RESTful API:
يوفر واجهة بسيطة للتفاعل معه باستخدام طلبات HTTP، مما يجعله مناسبًا لأي نوع من التطبيقات.
الاستخدامات
البحث عن النصوص الكاملة (Full-Text Search):
يعد أشهر استخدام له كمحرك بحث داخل المواقع والتطبيقات و بالأخص التي تتعامل مع كميات كبيرة من البيانات مثل منصات التجارة الالكترونية التي تحتوي علي ملايين المنتجات وغيرها.
تحليل البيانات والمتابعة (Analytics & Monitoring ):
ال (Logs) في الأنظمة الكبيرة بتكون بأحجام ضخمة وعشان كدا ElasticSearch يعتبر من أفضل الحلول للبحث السريع داخل ال Logs لتحليلها ومراقبة أداء النظام مع أدوات مثل Kibana و Logstash التي تتكامل معه في عملها.
أمثلة عملية لاستخدام Elasticsearch
محركات البحث داخل المواقع
البحث الجغرافي (Geo Search)
إدارة وتحليل ال Logs
How to Write Better Logs
ال logs من أساسيات شغلنا كمبرمجين بل تكاد تكون جزء يومي ولكنها من أهم الأمثلة على قاعدة "السهل الممتنع". فنعم كل المبرمجين بيستخدموها من أول الطلبة لل principles engineers لكن عدد قليل جدًا اللي قادر يوظفها ويكتبها بشكل فعّال.
أولاً لازم نعرف أننا بنتعامل يوميًا مع نوعين من الـ Logs:
الـ Infrastructure Logs: ودي اللي بينتجها الـserver or operating system or network devices
الـ Application Logs: ودا اللي هنتكلم عليه دايمًا لأنه كمبرمج بكتبه بشكل شبه يومي وأنا أول واحد ينتفع أو يٌضر بيه.
أهداف كتابة ال Logs
الهدف الأساسي لأي logs إنها تدينا Better observability أو رؤية أفضل على النظام بشكل عام وتمكنا من مراقبة ال events و المشاكل المهمة وتجميع معلومات عنها وبالتالي حلها أو تحسين أداء النظام.
ودا بنلجأ له لما بنشغل ال service علي آل production environment وقتها مش بنقدر نعملها debug وبالتالي متقدرش تتبع مسار البيانات وهي دخلت في انهي سيناريو داخل الكود وانهي لاء , وكذلك مش كل الناس عندها صلاحية دخول لل Codebase زي ال Tech support engineers مثلاً, في الحالات دي بيكون اعتمادنا على الـ logs -وأشياء أخري- عشان نقدر نتتبع رحلة البيانات داخل ال service ونستخدمها عشان نحل مشكلة أو سيناريو غير متوقع أو نحسن من ال service وأدائها.
فقبل ما أكتب أي Log line لازم أجاوب على السؤال: هل كتابة ال log line دا هتديني رؤية أفضل على سلوك التطبيق أو النظام؟
ما هي الـ Events التي يجب تسجيلها في ال Logs؟
ال application logs بنستخدمها عشان نتابع أداء النظام بشكل عام, ولكن أكيد هنكون مهتمين أكثر بأننا نعمل log لو حصل مشكلة فلذلك أغلب ال log lines بتكون مرتبطة ب Error من نوع ما, لكن كذلك بنستخدمها لتسجيل معلومات عشان نتأكد أن البيانات عدت بمراحل معينة من ال Processing
ودي قائمة بأمثلة عن ال events اللي من المفيد نعملها logging:
Application errors
Input and output validation failures
Authentication successes and failures
Authorization failures
Session management failures
Monitoring and performance improvement
Security and auditing
خصم يصل إلى 40% على جميع خطط الاشتراك السنوية لفترة محدودة، تقدروا دلوقتي تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات في كل ما يخص هندسة البرمجيات باللغة العربية والمحتوى المميز من ورقة وقلم ومدونات فطين اللي بيتميزوا بتصاميم ذات جودة عالية وكل ده بحرية كاملة وكمان مفاجآت اقرأ-تِك الجاية 🚀
وبرضو متاح الاشتراك من خلال InstaPay و VodafoneCash 🎁
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship واحنا بنرحب بجميع الشراكات مع المؤسسات والشركات وأصحاب الأعمال لبناء مجتمع عربي يشجع على القراءة والتعلم ومشاركة التجارب والخبرات العملية في هندسة البرمجيات.
دورك كشريك أو راعي هيكون محوري في دعم المحتوى وتوسيع نطاق تأثيره. فانضم لرحلتنا وكن جزءًا من صناعة مستقبل التكنولوجيا في المنطقة 🚀
تقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
Concurrency Building Blocks (Process)
الـ Concurrent Programming مبنية على فكرة إن يكون عندي الـ Application متكسر لـ Independent Tasks يعني مهام مستقلة أو Units اقدر اشتعل عليهم بشكل Concurrently.
وطبعًا الـ Abstraction Layer واللي بتسهلنا أغلب الشغل ده ألا وهو الـ OS قادر إنه يدير الـ Tasks دي ويعملهم Handling بشكل كويس من خلال إنه يوفر الـ Resources اللازمة بشكل كفء.
فنقدر نعتبر الـ Concurrent Programming هي مجموعة من الـ Abstractions اللي بتسمح للمطورين إنهم ينظموا التطبيق بتاعهم على شكل مهام صغيرة ومستقلة وينقلوها بعد كده للـ Runtime System واللي في الحالة دي هو الـ OS عشان يعملهم Handling بكفاءة.
وطبعا الـ Runtime System هيكون المسئول عن تنفيذهم وعملية الـ Orchestration اللي هتتم بينهم عشان يختار انهي Task اللي هيتم تنفيذها ويستغل الـ Resources بأفضل شكل ممكن.
وخلاصة الـ Abstractions اللي عمالين نتكلم عليها دي هي إن احنا عندنا بكل بساطة نوعين من الـ Abstractions كمطورين عشان نتعامل مع الـ Concurrent Programming والنوعين دول هم الـ Building Blocks اللي ممكن نعتمد عليهم عامة في تطبيق الـ Concurrency ألا وهم الـ Process والـ Threads.
الـ Process
التعريف اللي أغلبنا سمع عنه للـ Process هي إنها عبارة عن Running Program ، فأي تطبيق أو برنامج شغال ده بنسميه Process واللي أغلبنا يقدر يشوفه من خلال الـ Management Tools على أي OS طبعًا ويشوف الـ Processes اللي موجودة.
فأي برنامج في الأساس هو عبارة عن حاجة ملهاش قيمة ، مرمية على الـ Disk ، بتتكون من مجموعة أوامر مستنية إنها تتنفذ ، والـ OS الله يمسيه بالخير بياخد الأوامر أو الـ Instructions دي وينفذهم على الـ Hardware بتاعنا فيبدأ البرنامج يبقى ليه قيمة فعلية لما يشتغل ويتنفذ.
مثال من الواقع على الـ Process
طبعًا أمثلة ده كتير في الواقع بتاعنا ، وعشان نبسط الكلام بمثال: فالعربية هي عبارة عن مجموعة من الأجزاء الميكانيكية اللي طبعا ملهاش أي قيمة وهي مبتتحركش ، ولكن بمجرد ما بندور العربية ونشغلها والمحرك بتاعها يبدأ يشتغل والعربية تتحرك بتتحول لحاجة قيمة ومفيدة بتساعدك في حياتك انك تتنقل بيها.
فنقدر نعتبر الـ Source Code بتاعنا كـ Developers هو العربية دي بس بدل مهو عبارة عن Mechanical Parts أو أجزاء ميكانيكية ، فهو عبارة عن مجموعة من الأوامر اللي مستنية يبقى ليها قيمة فعلية ، وبيشتغل على Abstractions وده اللي بتيحه لغات البرمجة.
فأنت فعليا كـ Developer معندكش Memory تخزن فيها بيانات أو ملفات تقرأ وتكتب منها وعليها أو بعض الأجهزة اللي بتبعتلها Signals فعلية عشان تقوم بدور معين ، ولكن احنا كـ Developers بنستعمل Models مبنية على Abstractions بفضل لغات البرمجة اللي شغالين بيها والـ Runtime Environment اللي بتنفذ الكلام ده على الـ Hardware الفعلي بتاعنا.
فالـ Abstraction اللي بيوفره الـ OS للـ Running Program بتاعنا هو الـ Process وطبعا مفيش حاجة اسمها Process على Scope الـ Machine Instructions فهو مجرد Abstraction ليه دور مهم في عزل الـ Tasks أو المهام اللي مفروض تتنفذ ويكون ليها Hardware Resources عشان تتنفذ.
التفاصيل الداخلية للـ Process
زي ما قولنا، الـ process هو مجرد برنامج شغال. في أي وقت، ممكن نجمع الـ process عن طريق إننا نعمل قايمة بكل الأجزاء المختلفة في نظام الكمبيوتر اللي بتوصلها أو بتعدلها وقت التشغيل:
البيانات اللي الـ process بيقراها أو بيكتبها متخزنة في الـ memory. عشان كده، الذاكرة اللي الـ process بيشوفها أو بيوصلها (الـ address space) هي جزء من الـ process اللي شغال.
الـ executable file اللي بيتم تنيفذه بكل الـ machine instructions هو جزء من الـ process.
الـ process كمان محتاج حاجة تعرفه: اسم مميز نقدر نعرف بيه الـ process. وده بنسميه الـ process ID (PID).
أخيرا، البرامج غالبا بتوصل للـ disks، أو network resources، أو أجهزة تانية. المعلومات دي لازم تتضمن قايمة بالملفات المفتوحة حاليا بالـ process، واتصالات الشبكة المفتوحة، وأي معلومات تانية عن الـ resources اللي بيستخدمها.
فباختصار الـ process بيحتوي على حاجات كتير: الـ executable file، مجموعة الـ resources اللي بيستخدمها (ملفات، اتصالات، إلخ)، والـ address space بالمتغيرات الداخلية. كل ده بنسميه الـ execution context. عشان في حاجات كتير جوة الـ processes.
وعشان كده عملية إنشاء process جديد يعتبر حاجة تقيلة. عشان كده بنسميها أحيانا heavyweight processes.
Process Scheduling
الـ Scheduler في أنظمة التشغيل هو عبارة عن العنصر اللي بيحدد إزاي وإمتى المعالجات (CPUs) تستغل وقتها في تنفيذ البرامج المختلفة. يعني لو عندنا أكتر من برنامج شغال في نفس الوقت، الـ Scheduler هو اللي بيتحكم في توزيع وقت الـ CPU على البرامج دي.
خلينا نتخيل إننا قاعدين بنذاكر وفي نفس الوقت بنحاول نرد على رسايل مابعوتالنا في السوشيال ميديا وعاوزين نشغل حاجة نسمعها. عقلنا هنا بيقوم بدور الـ Scheduler فهو اللي بيحدد إزاي هيقسم وقتنا بين التلات حاجات دول. ممكن نذاكر شوية وبعدين نرد على الرسايل وبعدين نرجع تذاكر تاني ونشغل معاها حاجة. فنفس الموضوع بالظبط بالنسبة للـ CPU والبرامج اللي شغالة.
Process Scheduling
فيه عندنا 3 أنواع من الـ Process Schedulers اللي أنظمة التشغيل بتستخدمهم:
الـ Long-Term Scheduler (Job Scheduler): وده المسؤول عن إنه يقرر انهي برنامج يدخل الـ Ready Queue، اللي هو Queue البرامج بتستنى فيه لحد ما الـ CPU يبقى فاضي ويبدأ يشتغل عليها. ده زي ما بنكون كده بنقرر إيه المواد اللي هنذاكرها في يومنا قبل ما نبدأ فعليا في مذاكرتها.
الـ Short-Term Scheduler (CPU Scheduler): ده بيكون المسؤول عن إنه يقرر انهي البرامج الموجودة في الـ Ready Queue هياخد الـ CPU ويبدأ يشتغل عليه فعليًا. او بمعنى اصح يعني مين اللي عليه الدور دلوقتي ياخد وقت من دماغك.
الـ Medium-Term Scheduler: وده بيشتغل في بعض الأنظمة اللي بتستخدم تقنية الـ Swapping. فبيقرر إمتى يوقف برنامج من الشغل ويطلعه برا الذاكرة (RAM) عشان يدي امكانية لباقي البرامج انها تشتغل على الـ CPU. وبعدين لما يبقى فيه مكان فاضي يرجعه تاني.
مصطلحات خاصة بالـ CPU Scheduling
الـ Arrival Time: هو الوقت اللي الـ Process بتدخل فيه الـ Ready Queue وتكون مستنية يكون ليها وقت الـ CPU وتشتغل عليه.
الـ Completion Time: ده الوقت اللي فيه الـ Process بتخلص الـ Execution بتاعها أو بتكون خلاص اتنفذت.
الـ Burst Time: وده الوقت اللي بتحتاجه الـ Process عشان تتنفذ على الـ CPU.
الـ Turn-Around Time: وده فرق الوقت بين الـ Completion Time والـ Arrival Time
الـ Waiting Time: وده فرق الوقت بين الـ Turn-Around Time والـ Burst Time
The Future of Software Development with AI Agents Webinar
استلهم الأفكار، واتعلم أسرار استغلال AI Agents، واسمع قصص حقيقية عن إزاي الذكاء الاصطناعي بيغير عالم تطوير البرمجيات.
🎙️ الـ Host:
حنان شعبان، CTO في Code Quests
خبرة أكتر من 10 سنين في تطوير البرمجيات.
قصة نجاح حقيقية—من مطورة لحد ما وصلت لـ Program Manager
شغوفة بتمكين المطورين ورسم ملامح مستقبل الذكاء الاصطناعي في التكنولوجيا.
🎙️ الضيف الخاص:
محمد فؤاد، CTO في Tactful.ai
رائد في مجال الذكاء الاصطناعي من سنة 2016.
أكتر من 20 سنة خبرة في بناء حلول AI متطورة.
معروف برؤيته العميقة في تحويل الأفكار لتطبيقات عملية مدعومة بالذكاء الاصطناعي.
📅 الـ Webinar امتة؟ انهاردة!
⏰ الساعة؟ 1 ظهرًا
🌐 فين؟ https://lu.ma/w9vn9hm5
أجندة الـ Webinar
Introduction to AI in Software Development :
Overview of AI Agents and Copilots.
The evolution of AI in the software industry.
Transformative Power of AI in Development :
How AI accelerates idea generation, development, and deployment.
Examples of AI-augmented software projects and their outcomes.
Exploring Use Cases :
Real-life scenarios where these tools save time and effort.
الإصدار الأول - ورقة وقلم 🚀
في الإصدار ده جمعنا أكتر من 50 موضوع في مختلف مجالات هندسة البرمجيات بأكتر من 170 صفحة + تصاميم بجودة عالية وكل ده بالعربي وبشكل مميز ومتقسم لفصول سهل تنتقلوا من فصل وموضع للتاني بدون مشاكل 💎
تقدروا تشوفوا النسخة كاملة من هنا كـ E-Book ، وحاولنا نخليها بسعر رمزي يناسب الجميع 👇
ولو عندكوا أي مشكلة في الدفع ، تقدروا تتواصلوا معانا وهنكون مبسوطين باننا نوفر بدايل زي InstaPay و VodafoneCash 🎁
ولو عاوزين تعاينوا جودة الـ E-Book قبل ما تشتروه ، تقدروا تحملوا النسخة المجانية واللي بتضم حوالي 30 موضوع فيما لايزيد عن 100 صفحة من هنا 😉
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇