سؤال

تم تصميم نظامنا للنشر في مناطق مع اتصالات شبكة غير موثوق بها و / أو غير كافية. نحن نبني خطأ في التسامح مع خدمات النسخ المتماثل البيانات التي تستخدم بت.

بسبب بعض متطلبات الأمن والصيانة، نفذنا خدمة تنزيل ملف ASP.NET الخاصة بنا على جانب الخادم، بدلا من مجرد ترك IIS يخدم الملفات. عندما يقوم عميل BITS بطلب تنزيل HTTP مع النطاق المحدد للملف، تسحب صفحة ASP.NET الخاصة بنا قطاع الملفات المطلوب في الذاكرة ويقدم ذلك كاستجابة HTTP. هذه هي النظرية. ؛) فشل هذه النظرية في سيناريوهات مختبر اصطناعية لكنني لن أترك النظام ينشر في سيناريوهات الحياة الحقيقية ما لم نتمكن من التغلب على ذلك.

سيناريو مختبر: لدي عميل بت و IIS على نفس آلة المطور، لذلك عمليا لدي شبكة هائلة "عرض النطاق الترددي" والبارات ذكية بما يكفي للكشف عن ذلك. نظرا لأن عميل BITS يكتشف النطاق الترددي غير المحدود، فإنه يحصل أكثر وأكثر "جشعا". في كل طلب HTTP، تريد البتات أن تفهم نطاقات ملف أكبر وأكثر وضوحا (نحن نتحدث عن تنزيل ملفات CD ISO ومقاطع الفيديو)، ومتطلبات 20-40 ميغابايت داخل طلب HTTP واحد، وحجم أنا لست مرتاحا لسحب الذاكرة جانب الخادم كما يذهب المرء. يمكنني التغلب على ذلك ببساطة عن طريق إعطاء أقل من المطالبة. هذا جيد.

ومع ذلك، BITS يحصل بالفعل على "واثق" و "متعجرف" الملفات المطالبة دون تحديد مدى التنزيل, ، أي أنها تريد الملف بأكمله في طلب واحد، وهذا هو المكان الذي تسوء الأمور. أنا لا أعرف كيفية الإجابة على هذا الرد في حالة ملف 600 ميغابايت. إذا قمت فقط بتزويد نطاق بدء تشغيل 1MB من الملف، فإن عميل BITS يحتفظ بإرسال طلبات HTTP لنفس الملف دون نطاق التنزيل للمتابعة، فإنه يطارد وجهة نظره التي تريد الملف بأكمله في إحدى المرء. نظرا لأنني متردد في توفير الملف بأكمله، فإن البتات يتخلى بعد العديد من التجارب والتقارير خطأ.

أي أفكار؟

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

المحلول

يبدو، يمكننا حل المشكلة. هناك العديد من الأشياء:

  • كنا بحاجة إلى السيطرة على كل طلب وارد، لذلك لم نتمكن من السماح للجميع التعامل مع الطلب وحده. ومع ذلك، لا يزال من الضروري عدم الضرورة سحب الملفات في الذاكرة فقط لتسهيل التنزيل: request.transferfile (...) في الواقع هل كل الرفع الثقيل دون سحب الملفات في الذاكرة، بينما ما زلنا نحافظ على التحكم في التعامل مع الطلب.
  • تطبيق BITS يبدو ذكيا للغاية كيفية التعامل مع الحالات المختلفة. لقد تعلمنا ما إذا كانت BITS تطلب الملف الكامل دون نطاق محدد، حتى لو كان العديد من جيجابايت، يمكننا فقط السماح له بذلك. بمجرد أن تتلقى حزم HTTP الأولى وأرقام أن هذا أكبر مما قد يبتلعه يلغي الطلب على الفور وإعادة طلبها مع النطاق المناسب.
  • يسمح البتات بتكوين الحد الأقصى للنطاق الترددي والجدول الزمني عندما يسمح باستخدام موارد الشبكة. في حين أن هذا التكوين ينطبق على جانب العميل، فلا بأس في حالتنا الخاصة.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top