سؤال

أنا أبحث في كتابة قدرة تزامن بسيطة في تطبيقي وأحد المخاوف التي برزت هي مزامنة الوقت بين جهاز كمبيوتر بعيدين، ولكل منها ساعة خاصة بها (خاصة فيما يتعلق بتواريخ التعديل من الملفات / الكائنات).

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

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

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

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

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

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

المحلول

الاعتماد على NTP لتطبيقك لأن الآخرين قد أوصت به هو الهراء السهل. النهج الصحيح هو استخدام خوارزمية مزامنة الساعة الموزعة في Lamport. يتم شرحه في ورقته الكلاسيكية 1978 الوقت والساعات، وترتيب الأحداث في نظام موزعة.

نصائح أخرى

ينظر الى "بروتوكول وقت الشبكةمواصفات "(NTP).

يمكنك تجربة PTP، بروتوكول الوقت الدقيق (PTP) هو بروتوكول يستخدم لمزامنة الساعات عبر شبكة الكمبيوتر. في شبكة محلية، تحقق دقة على مدار الساعة في نطاق Sub-Microsecond، مما يجعلها مناسبة لأنظمة القياس والتحكم.http://en.wikipedia.org/wiki/precision_time_protocol.

بدلا من كتابة التعليمات البرمجية لمزامنة الساعات، لن يكون من الممكن تشغيل عميل NTP فقط على كلا الجهازين؟

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

مزامنة لهم مع NTP. بروتوكول وقت الشبكة.

اي الانظمة الاساسية تعتمد؟

مع NTP، يمكنك مزامنة وقت أجهزة الكمبيوتر الخاصة بك بالساعات الذرية واستخدم الوقت الرسمي للعالم.

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

1) لا تملك معرفة كافية الحوسبة لتكون قادرة على إعداد مزامنة وقت NTP

2) اضبط ساعة الكمبيوتر الخاصة بهم على مدار الساعة أو ساعة الهاتف المحمول غير صحيحة

3) في نظام التشغيل Windows XP تعطيل NTP Time مزامنة ولم نعرف كيفية تمكينه مرة أخرى، أو قم بإجراء تاريخ تشغيل الكمبيوتر الخاص به بشكل خاطئ، وفي هذه الحالة لا يعمل Windows NTP

4) لقد ذهبت بطارية BIOS الكمبيوتر ثابتة حتى يبدأ الكمبيوتر دائما في عام 1970!

5) يأخذ المستخدم الكمبيوتر المحمول الخاص بهم في الخارج ويحدد مؤقتا على مدار الساعة الكمبيوتر المحمول إلى التوقيت المحلي ولكن لا يغير المنطقة الزمنية، لذلك سيعود الكمبيوتر الآن وقت UTC غير صحيح !!!

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

دعنا نفترض اثنين من المستخدمين النهائيين تشغيل برامجك تحتاج إلى برامج القيام بشيء ما في نفس الوقت المطلق في المستقبل.

أقترح هذا المخطط، الذي يأخذ بعض الأفكار من Way Cron Jobs Work، سأكون سعيدا إذا كان بإمكان أي شخص أن يقترح تحسينات على الفكرة.

1) عندما يبدأ التطبيق الخاص بك، فإنه يتزامن وقت UTC الداخلي الخاص به إلى NTP عبر مكالمة الصابون إلى خادم طرف ثالث أو إلى خادم الوقت الخاص بك (الذي يمكنك أن تابعه في الوقت المحدد باستخدام NTP).

2) بعد ذلك يضيف الوقت المنقضي من ساعة النظام للحفاظ على الوقت. إذا كانت المتطلبات صارمة قد تحتاج إلى تكرار مزامنة NTP على فترات.

3) ينظر التطبيق ثم إلى قائمة الوظائف المستقبلية التي يجب القيام بها في الوقت المحدد. يحتاج إلى معرفة الوظيفة الأولى.

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

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

6) بمجرد أن يتم تشغيل المهمة (تشغيله في مؤشر ترابط آخر) يحسب مؤشر ترابط المراقبة الزمنية وقت المهمة التالية إلى الأمام ويضع نفسه للنوم مرة أخرى طوال المدة.

التحسينات إلى الفكرة:

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

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

3) لدعوة الصابون للحصول على الوقت في الحفاظ على ملاحظة عند إرسال الصابون وعندما يتم استلام الاستجابة. إذا كان وقت التحول طويلا جدا، فلا يمكنك الاعتماد في الوقت الحالي وقد تحتاج إلى تكرار المكالمة، أو يمكنك التنازل عنها. على سبيل المثال، إذا ذكرت الصابون أن ساعة الكمبيوتر سريعة 5 دقائق، ولكن استغرق مكالمة الصابون نفسها دقيقة للرد، ثم يمكنك أن تقول فقط من المؤكد أن ساعة الكمبيوتر سريعة على الأقل بسرعة 4 دقائق.

شيء واحد نفعله هو تفريغ جميع عمليات التوقيت إلى آلة "المضيف". على سبيل المثال، إذا كان لديك 20 خواسير تشترك كلها جميعا في DB، فاستخدم وقت DB. إذا كان لديك خادم مركزي وماكينات عميل مليون، فلا ينبغي أن تكون الآلات العميلة مسؤولة عن توقيت أي شيء؛ افعل كل ما تبذلونه من جانب المزامنة. في بيئة "موزعة" حقا، مثل شبكة P2P أو شيء ما، استخدم الجهاز الأكثر مباشرة "يملك" المورد المعني (الكمبيوتر الفعلي الذي تريد الكتابة) لتوصيف / التحكم في الوصول إلى الملف.

يجب استخدام أي آلة شبكية NTP. تتضمن جميع الأنظمة الحديثة طريقة سهلة لإعداد هذا. يجب أن تختار المشكلة الوحيدة خادم معين، إذا كنت بحاجة إلى دقة إضافية صغيرة؛ لكنها بالفعل في مجموعة millisecond، لذلك لا أهتم وعادة ما أشر فقط إلى pool.ntp.org

لا تستخدم NTP. NTP هو للحصول على التاريخ / الوقت فقط.

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

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

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