قفص الوصول عن بعد نظام الملفات

غرض النظام


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


مجالات التطبيق


وظيفة النظام فعالة في الحالات التالية:

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

هيكل


يشتمل نظام Cage (هناك تطبيق - إصدار تجريبي على Python 3.7 في نظام التشغيل Windows OS) على جزأين رئيسيين:

  1. Cageserver - برنامج خادم ملفات (حزمة من الوظائف) يعمل على أجهزة الكمبيوتر على الشبكة التي تحتاج إلى الوصول عن بعد إلى الملفات ؛
  2. قم بفصل القفص مع مكتبة طرق لبرنامج العميل الذي يبسط تشفير تفاعلات الخادم.

باستخدام النظام من جانب العميل


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


بمعنى آخر ، لا يعمل المبرمج مع أساليب كائنات "file" (فئة _io في Python) ، ولكن مع أساليب فئة Cage.


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


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


يمكن لكائن Cage واحد تبادل البيانات مع ملفات متعددة على خوادم متعددة. يتم تعيين معلمات الاتصال (عنوان IP أو خادم DNS والمنفذ الرئيسي للترخيص والمسار واسم الملف) عند إنشاء الكائن.


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


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


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


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


قفص حوالي 3600 سطر من التعليمات البرمجية.


مبادئ بناء الخوادم


يمكن تشغيل خوادم ملفات Cageserver بعدد اعتباطي من المنافذ ، واحد منها ("الرئيسي") يستخدم فقط لترخيص جميع العملاء ، والباقي لتبادل البيانات. يتطلب برنامج خادم Cage Python فقط. بالتوازي ، يمكن لجهاز كمبيوتر مزود بخادم ملفات القيام بأي عمل آخر.


يبدأ الخادم في البداية كمزيج من عمليتين رئيسيتين:

  1. "الاتصالات" - عملية لإجراء عمليات إقامة اتصالات مع العملاء وإنهائها بمبادرة الخادم ؛
  2. "العمليات" - عملية لإكمال المهام (العمليات) للعملاء بشأن العمل مع الملفات ، وكذلك لإغلاق جلسات التواصل على أوامر العميل.

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


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

تتم معالجة أوامر إنشاء / حذف / فتح / إغلاق الملفات على الخادم في عملية "العمليات" بشكل متسلسل بدقة باستخدام النظام الفرعي للملف لنظام تشغيل الخادم.


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


تراقب عملية "العمليات" نشاط العملاء وتوقف خدمتهم عن طريق أوامرهم وعند تجاوز مهلة الخمول.


لضمان الموثوقية ، تسجل Cageserver جميع المعاملات. تحتوي مجلة عامة واحدة على نسخ من الرسائل من العملاء الذين لديهم مهام لإنشاء / فتح / إعادة تسمية / حذف الملفات. يتم إنشاء سجل منفصل لكل ملف عمل ، حيث تتم كتابة نسخ من الرسائل مع مهام لقراءة وكتابة البيانات في ملف العمل هذا ، وكذلك صفائف من البيانات (الجديدة) المسجلة وصفائف البيانات التي تم تدميرها عند الكتابة فوق (كتابة بيانات جديدة "قديمة" ).


توفر هذه السجلات فرصة لاستعادة التغييرات الجديدة في النسخ الاحتياطية ، وكذلك "التراجع" من المحتوى الحالي إلى اللحظة المناسبة في الماضي.


Cageserver حوالي 3،100 سطر من التعليمات البرمجية.


صورة

بدء تشغيل برنامج خادم ملفات Cageserver


عند البدء في مربع الحوار ، تحتاج إلى تحديد:
- الميناء الرئيسي للترخيص ؛
- عدد المنافذ لتبادل المعاملات مع العملاء المعتمدين (من 1 أو أكثر ، يبدأ تجمع الأرقام بالعدد التالي بعد رقم المنفذ الرئيسي).


باستخدام قفص الفئة


قفص الطبقة . Cage ( cage_name = "" ، pageize = 0 ، numpages = 0 ، maxstrlen = 0 ، server_ip = {} ، انتظر = 0 ، استيقظ = False ، cache_file = "" )


من هذه الفئة ، يتم إنشاء الكائنات التي تتفاعل مع خوادم الملفات وتحتوي على ذاكرة مؤقتة.


المعلمات


  • cage_name ( str ) - الاسم الشرطي للكائن الذي يتم استخدامه لتعريف العملاء على جانب الخادم
  • pageize ( int ) - حجم صفحة واحدة من ذاكرة التخزين المؤقت (بالبايت)
  • numpages ( int ) - عدد صفحات الذاكرة المؤقتة
  • maxstrlen ( int ) - الحد الأقصى لطول سلسلة البايت في عمليات الكتابة والقراءة
  • server_ip ( dict ) - قاموس يحتوي على عناوين الخوادم المستخدمة ، حيث يكون المفتاح هو الاسم الشرطي للخادم (معرف الخادم داخل التطبيق) ، وتكون القيمة عبارة عن سلسلة مع العنوان: "عنوان IP: port" أو "DNS: port" (مطابقة الأسماء والعناوين الحقيقية مؤقتة) ، يمكن تغييرها)
  • انتظر ( int ) - وقت انتظار استجابة من الخادم عند تلقي المنافذ (بالثواني)
  • استيقظ ( منطقي ) - إشارة إلى طريقة إنشاء الكائن ( خطأ - إذا تم إنشاء كائن جديد ، صحيح - إذا تم إنشاء الكائن من كائن "تم تصغيره" سابقًا - باستخدام عملية "الإسبات" ، افتراضيًا خطأ)
  • cache_file ( str ) - اسم ملف الإسبات

طرق


القفص. file_create ( الخادم ، المسار ) - إنشاء ملف جديد


القفص. file_rename ( الخادم ، المسار ، new_name ) - إعادة تسمية الملف


القفص. file_remove ( الخادم ، المسار ) - احذف الملف


القفص. فتح ( الخادم ، المسار ، وزارة الدفاع ) - ملف مفتوح


إرجاع رقم قناة fchannel . المعلمة mod هي الوضع المفتوح للملف: "wm" خاص (للقراءة / الكتابة) ، "rs" للقراءة فقط ، ومشاركتها فقط من قبل عملاء آخرين ، ws للقراءة / الكتابة ، وتتم مشاركتها فقط من قبل عملاء آخرين.


القفص. إغلاق ( fchannel ) - إغلاق الملف


القفص. الكتابة ( fchannel ، البدء ، البيانات ) - كتابة سلسلة بايت إلى ملف


القفص. قراءة ( fchannel ، ابدأ ، len_data ) - قراءة سلسلة بايت من ملف


القفص. put_pages ( fchannel ) - "يدفع" من المخزن المؤقت إلى الخادم جميع صفحات القناة المحددة التي تم تعديلها. يتم استخدامه في تلك النقاط في الخوارزمية عندما تحتاج إلى التأكد من تخزين جميع العمليات على القناة فعليًا في ملف على الخادم.


القفص. push_all () - "يدفع" من المخزن المؤقت إلى الخادم جميع صفحات جميع القنوات لمثيل فئة Cage التي تم تعديلها. يتم استخدامه عندما تحتاج إلى التأكد من تخزين جميع العمليات على جميع القنوات على الخادم.

Source: https://habr.com/ru/post/ar463085/


All Articles