سؤال

أنا أكتب خدمة Windows تحتاج إلى تنفيذ مهمة (التي تتصل بخادم مركزي) كل 30 يوما + - 5 أيام (يجب أن تكون عشوائيا). سيتم تشغيل الخدمة في 2000+ آلات عميل، لذلك تهدف العشوائية إلى مستوىها حتى لا يتم تحميل الخادم.

ما هي أفضل طريقة للقيام بذلك؟ حاليا، أختار وقتا عشوائيا بين 25 و 35 يوما منذ هرب المهمة واستخدام ذلك.

هل لدى أي شخص طريقة أفضل؟ هل هناك طريقة أفضل؟

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

المحلول

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

بديل آخر هو أنه يمكنك طرح الخادم المركزي للحصول على "فتحة" مناسبة - بهذه الطريقة يمكن أن تتجنب التحميل الزائد (على افتراض أن كل شيء يتصرف نفسه).

نصائح أخرى

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

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

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

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

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