ما نمط التصميم لاستخدامه لطلبات API متعددة مختنفة؟

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

سؤال

أنا أكتب موقع ويب يستخدم خدمات ويب متعددة مع قيود الخانق. IE Amazon هو طلب واحد في الثانية ، والآخر هو 5000/يوم آخر هو x/دقيقة.

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

يجب أن يكون الحل مرنًا حتى أتمكن من إضافة/إزالة الخدمات بسهولة.

فكرت في نظام قائمة انتظار FIFO ، لكن بعض الطلبات اللاحقة قد تكون مؤهلة بالفعل للمعالجة قبل تلك السابقة.

أطلب نمط تصميم ، ولكن أي اقتراحات تقنية مناسبة مرحب بها للغاية ، خاصة .NET.

شكرًا!

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

المحلول 2

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

0:00:01 يأتي طلب Amazon -> الفتحة التالية المتاحة في ثانيتين (0:00:03)

0:00:02 X يأتي الطلب -> الفتحة التالية المتاحة لهذه الخدمة هي 5 ثوان (0:00:07)

0:00:03 يأتي طلب Amazon -> الفتحة التالية المتاحة في ثانيتين (0:00:05)

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

حتى الآن ، يبدو الأمر وكأنه قائمة انتظار FIFO لكل خدمة ، مع اختناقها الخاص ، يبدو وكأنه طريقة للمضي قدمًا.

نصائح أخرى

لست متأكدًا من أنني فهمت تمامًا المكان الذي ترى فيه المشكلة. من

قد تكون بعض الطلبات اللاحقة مؤهلة بالفعل للمعالجة قبل تلك السابقة.

استنتج أنك قلق بشأن طلبات التخزين المؤقت التي لا يمكن تصويرها الآن ولكن قد يتم العمل عليها قريبًا.

لقد تلقيت طلبًا مثل

 { Amazon, X }

وبسبب (على سبيل المثال) ، لا يمكن لخفق X أن يفسد هذا الطلب الآن.

سؤالي الأول هو ، هل الطلبات مستقلة ، وهو هل يمكنني معالجة طلب Amazon على الفور وقائمة الانتظار لطلب X؟ إذا كان الأمر كذلك ، فإن قائمة انتظار FIFO بسيطة لكل خدمة ستؤدي بالتأكيد المهمة. ربما ستحتاج إلى الحد الأقصى لحجم قائمة الانتظار (بالنظر إلى أن HTTP تطلب مهلة ، لا يمكنك الانتظار لساعات).

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

Amazon(3 per sec)
      09:05:31  -  request A, B, C
      09:05:32  -  request D, E, F
      09:05:33  -  request G  -  -  <=== slots available
      ---                           <=== times and slots available

X (2 per min)
      09:05     -  request M, N
      09:06     -  request O        <=== slot available

هنا {Amazon ، X} لديه فتحة متوفرة في 09:06

Amazon(3 per sec)
      09:05:31  -  request A, B, C
      09:05:32  -  request D, E, F
      09:05:33  -  request G  -  -  <=== slots available
      ---                           <=== times and slots available
      09:06:01  -  request P

 X (2 per min)
      09:05     -  request M, N
      09:06     -  request O, P

شخصياً ، سأبدأ بشيء أكثر بساطة: إذا كان لا يمكن تصوير الطلب في الوقت الحالي لأنه يتم الوصول إلى أي حد خدمة واحد ، فقط رفض الطلب.

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