الالتزام الذري

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

تكمن مشكلة الالتزامات الذرية في أنها تتطلب التنسيق بين أنظمة متعددة. [ 1 ] ونظرًا لأن شبكات الحاسوب خدمات غير موثوقة، فهذا يعني أنه لا يمكن لأي خوارزمية التنسيق مع جميع الأنظمة، كما هو مُثبت في مسألة الجنرالين . ومع ازدياد توزيع قواعد البيانات، سيزداد هذا التنسيق صعوبةً في إجراء التزامات ذرية حقيقية. [ 2 ]

الاستخدام

تُعدّ عمليات الالتزام الذرية ضرورية لتحديثات البيانات متعددة الخطوات. ويمكن توضيح ذلك بوضوح من خلال مثال بسيط لتحويل الأموال بين حسابين جاريين. [ 3 ]

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

مع عمليات الالتزام الذرية، لا يمكن أن تحدث أي من هاتين الحالتين، ففي الحالة الأولى لفشل النظام، سيتم التراجع عن الالتزام الذري وإعادة الأموال إلى X. أما في الحالة الثانية، فلا يمكن طلب رصيد Y حتى يكتمل الالتزام الذري بالكامل.

أنظمة قواعد البيانات

تُحقق عمليات الالتزام الذرية في أنظمة قواعد البيانات اثنتين من الخصائص الرئيسية لـ ACID ، وهما الذرية والاتساق [ 4 ] . ولا يتحقق الاتساق إلا إذا كان كل تغيير في الالتزام الذري متسقًا.

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

يتطلب بروتوكول الالتزام ثنائي المرحلة وجود منسق للاحتفاظ بجميع المعلومات اللازمة لاستعادة الحالة الأصلية لقاعدة البيانات في حال حدوث أي خطأ. وكما يشير الاسم، يتكون البروتوكول من مرحلتين : التصويت والالتزام .

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

خلال مرحلة الالتزام ، يرسل المنسق رسالة التزام إلى كل عقدة لتسجيلها في سجلاتها الفردية. إلى حين إضافة هذه الرسالة إلى سجل العقدة، تُسجل أي تغييرات على أنها غير مكتملة. في حال أبلغت أي من العقد عن فشل، سيرسل المنسق رسالة تراجع. سيؤدي ذلك إلى إزالة أي تغييرات كتبتها العقد على القرص. [ 5 ] [ 6 ]

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

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

بعد استلام رسائل النجاح من كل عقدة في مرحلة التصويت، تبدأ مرحلة الاستعداد للتنفيذ . خلال هذه المرحلة، يرسل المنسق رسالة استعداد إلى كل عقدة. يجب على كل عقدة تأكيد استلام رسالة الاستعداد والرد عليها. في حال عدم تلقي أي رد أو إذا أفادت أي عقدة بأنها غير مستعدة، يرسل المنسق رسالة إلغاء. أي عقدة لا تستلم رسالة الاستعداد قبل انتهاء المهلة الزمنية تُلغي عملية التنفيذ.

بعد أن تستجيب جميع العُقد لرسالة التحضير، تبدأ مرحلة الالتزام . في هذه المرحلة، يُرسل المنسق رسالة التزام إلى كل عقدة. عندما تستلم كل عقدة هذه الرسالة، تُنفذ الالتزام الفعلي. إذا لم تصل رسالة الالتزام إلى عقدة ما بسبب فقدان الرسالة أو تعطل المنسق، فستُنفذ العقدة الالتزام عند انتهاء المهلة الزمنية. في حال تعطل المنسق، فإنه عند استعادته، يُرسل رسالة التزام إلى كل عقدة. [ 7 ]

في سجلات البيانات الموزعة اللامركزية، حيث تعمل العقد في بيئة معادية (بيزنطية)، تُؤدي بروتوكولات الالتزام ثنائية المرحلة القياسية إلى مخاطر التمركز ونقاط فشل وحيدة. ولمعالجة هذه المشكلة، اعتمدت الأنظمة ذات التجزئة الضخمة بروتوكولات الالتزام "المتشابكة". وكما تم تحليله في أبحاث قواعد البيانات الحديثة، تُحقق هذه البروتوكولات الذرية من خلال ضمان أن يكون التزام المعاملة في جزء واحد مُعتمدًا تشفيريًا على التزامها في جميع الأجزاء الأخرى ذات الصلة. يدمج هذا النهج بشكل فعال وجهات نظر الإجماع عبر الأقسام دون الحاجة إلى مُنسق مركزي، مما يُخفف من مشكلات الحيوية المتأصلة في آليات القفل التقليدية. [ 8 ]

التحكم في المراجعة

تُعدّ عمليات الالتزام الذرية ميزة شائعة في برامج التحكم في الإصدارات ، وهي ضرورية للحفاظ على حالة متسقة في المستودع. [ 9 ] لا تُطبّق معظم برامج التحكم في الإصدارات أي جزء من الالتزام الذي يفشل. ومن الاستثناءات البارزة CVS و VSS و IBM Rational ClearCase (عند استخدام وضع UCM). [ 10 ]

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

يمنع هذا المشروع بأكمله من الدخول في حالة معطلة بسبب مجموعة تغييرات مطبقة جزئياً، حيث يتم تثبيت ملف واحد من عملية التثبيت بنجاح، ولكن ملف آخر يحتوي على تغييرات تابعة يفشل. [ 11 ]

قد تشير عمليات الالتزام الذرية أيضًا إلى القدرة على إجراء تغييرات في وقت واحد عبر مشاريع متعددة باستخدام برامج التحكم في الإصدارات في عملية واحدة، باستخدام استراتيجية تطوير برامج التحكم في الإصدارات المعروفة باسم المستودع الأحادي . [ 9 ]

اتفاقية الالتزام الذري

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

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

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

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

انظر أيضاً

مراجع

  1. بوتشي، ويشيك (2004). حساب العمليات للالتزام الذري .
  2. غارسيا-مولينا، هيكتور؛ أولمان، جيف؛ ويدوم، جينيفر (2009). أنظمة قواعد البيانات: الكتاب الكامل . برنتيس هول. الصفحات 1008-1009 . ISBN  9780131873254.
  3. ↑ غارسيا-مولينا ، هيكتور؛ أولمان، جيف؛ ويدوم، جينيفر (2009). أنظمة قواعد البيانات: الكتاب الكامل . برنتيس هول. ص 299. ISBN  9780131873254.
  4. المصري، رامز (2006). أساسيات نظم قواعد البيانات، الطبعة الخامسة . أديسون ويسلي. ص 620. 
  5. المصري، رامز (2006). أساسيات نظم قواعد البيانات، الطبعة الخامسة . أديسون ويسلي. ص 688. 
  6. بيرنشتاين، فيليب أ.؛ هادزيلاكوس، فاسوس؛ غودمان، ناثان (1987). "الفصل 7". التحكم في التزامن والاسترداد في أنظمة قواعد البيانات . شركة أديسون ويسلي للنشر.
  7. ^ جادام، سرينيفاس ر. بروتوكول الالتزام ثلاثي المراحل .
  8. هيلينغز، جيلي؛ سادوغي، محمد (2021). "سيربيروس: معالجة معاملات بسيطة متعددة الأجزاء ومقاومة للأخطاء البيزنطية" (ملف PDF) . وقائع مؤسسة VLDB . 14 (11): 2230-2243 . doi : 10.14778/3476249.3476274 .
  9. 1 2 ليفنبرغ، راشيل بوتفين، جوش (يوليو 2016). "لماذا تخزن جوجل مليارات الأسطر من التعليمات البرمجية في مستودع واحد؟" . اتصالات جمعية آلات الحوسبة . تم الاسترجاع في 20 يوليو 2018 .{{cite web}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط )
  10. سمارت، جون فيرغسون (2008). أدوات جافا القوية . دار نشر أورايلي ميديا، ص 301. ISBN  9781491954546تم الاطلاع عليه بتاريخ 26 يوليو 2018 .
  11. فيسبيرمان، جينيفر (2009). دليل أساسيات سي في إس ( الطبعة الثانية). سيباستوبول: أورايلي ميديا، ص 7. ISBN   9780596551407إحدى الميزات التي تفتقر إليها CVS، والتي تُفضّلها العديد من الفرق، هي عمليات الالتزام الذرية. تضمن هذه الميزة أنه أثناء قيام شخص ما بإجراء تغييرات على المستودع، لا يستطيع أي شخص آخر القيام بذلك. وبالتالي ، تُعتبر كل عملية التزام عملية منفصلة، ​​ولا يكون المستودع أبدًا في حالة وجود ملفات غير متطابقة.
  12. "أفضل ممارسات التخريب" . أباتشي.
  13. بارني، بويزفيرت. الالتزامات الذرية للتحكم في الإصدار .
  14. "فوائد الالتزامات الصغيرة" . أنظمة الصنوبريات. مؤرشف من الأصل بتاريخ 2011-10-05 . تم الاسترجاع بتاريخ 2010-07-28 .