كيف تعمل المعاملات الموزعة (على سبيل المثال.MSDTC)؟

StackOverflow https://stackoverflow.com/questions/55878

  •  09-06-2019
  •  | 
  •  

سؤال

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

كيف تعمل المعاملات الموزعة؟قرأت في بعض وثائق MS أنه يمكنك بطريقة ما إجراء معاملة عبر قواعد البيانات وأنظمة الملفات (من بين أشياء أخرى).

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

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

لقد قرأت http://blogs.msdn.com/florinlazar/archive/2004/03/04/84199.aspx, ، ولكن يبدو أنها مجرد بداية الشرح، ويجب توسيع هذه الخطوة 4 بشكل كبير.

يحرر: مما أجمع عليه http://en.wikipedia.org/wiki/Distributed_transaction, ، يمكن تحقيق ذلك عن طريق الالتزام على مرحلتين (http://en.wikipedia.org/wiki/Two-phase_commit).بعد قراءة هذا، ما زلت لا أفهم الطريقة بنسبة 100%، ويبدو أن هناك مجالًا كبيرًا للخطأ بين الخطوات.

هل كانت مفيدة؟

المحلول

حول "الخطوة 4":

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

وهذا بالطبع يتطلب من جميع المشاركين توفير الواجهات المناسبة والتطبيقات (الخالية من الأخطاء).تبدو الواجهة بشكل غامض كما يلي:

public interface ITransactionParticipant {
    bool WouldCommitWork();
    void Commit();
    void Rollback();
}

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top