ماذا يحدث في NFS إذا حاول 2 أو أكثر من الخادمين كتابة نفس الملف في وقت واحد؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أعمل على جهاز WebApp PHP يقوم بتغيير حجم الصور التلقائي للصور وأنا أفكر في تخزين النسخ المخزنة مؤقتًا على NAS NAS ، لذا من السهل علي مسح ذاكرة التخزين المؤقت عند تحديث الصور.

الشيء الوحيد الذي أشعر بالقلق هو ما يحدث بشكل عام مع NFS إذا كان 2 أو أكثر من الخوادم في الكتلة يحاولون إنشاء ملف ذاكرة التخزين المؤقت نفسه في نفس الوقت؟

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

أي شخص لديه خبرة في هذا؟

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

المحلول

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

This was the old contents
of the file
The first script added
The second script added
this line (script 1)
this line (script 2)

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

إذا قمت بفتح الملف في وضع "الكتابة" (قل أنك تريد إضافة محتوى إلى الوسط) ، فعليك بالفعل قفل الملف للقيام بذلك. سوف يرمي البرنامج النصي الثاني PHP خطأ يقول أنه لا يمكن فتح الملف.

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