تلميحات لخدمة ويب ذات حركة مرور عالية، C# asp.net sql2000

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

  •  09-06-2019
  •  | 
  •  

سؤال

أقوم بتطوير خدمة ويب سيتم استدعاء أساليبها من "شعار ديناميكي" سيُظهر نوعًا من قائمة انتظار الرسائل المقروءة من جدول خادم SQL.

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

الآن:لا أريد أن تؤدي كل هذه الحركة إلى توجيه الاستعلامات إلى قاعدة البيانات في كل مرة يتم فيها تحميل الشعار، لذلك أفكر في استخدام ذاكرة التخزين المؤقت لـ asp.net (أي .HttpRuntime.Cache[cacheKey]) للحد من الوصول إلى قاعدة البيانات؛سأحاول تحديث ذاكرة التخزين المؤقت كل دقيقة أو نحو ذلك.

من الواضح أنني سأحاول تقليل عدد الرسائل قدر الإمكان للحد من حركة المرور.

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

الحل هو خدمة الويب c#، asp.net 3.5، sql server 2000.

أي تلميح؟طرق أخرى؟

شكرًا

أندريا

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

المحلول

تعتمد على أمور كثيرة:

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

نصائح أخرى

أعتقد أن التخزين المؤقت هو أسلوب معقول ويمكنك أن تخطو خطوة إلى الأمام وتضيف تبعية SQL إليه.

التخزين المؤقت لـ ASP.NET:تبعية ذاكرة التخزين المؤقت لـ SQL مع SQL Server 2000

إذا ذهبت إلى مسار الملف، ضع ذلك في الاعتبار.

http://petesbloggerama.blogspot.com/2008/02/aspnet-writing-files-vs-application.html

تعد كتابة ملف حلاً أفضل IMHO - يتم تقديمه بواسطة كود IIS kernel، بدون الحمل الضخم asp.net ويمكنك نسخ الملف إلى شبكات CDN لاحقًا.

لا يعد صرف تبعية AFAIK فعالاً للغاية مع SQL Server 2000.

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

شكرًا لكم جميعًا، نظرًا لأن البيانات صغيرة الحجم، ولكن الجداول الأساسية ستتغير، أعتقد أنني سأتبع طريقة HttpCache:أحتاج في الواقع إلى طريقة لتقليل الوصول إلى قاعدة البيانات، حتى لو كانت البيانات تتغير (وهذا هو سبب عدم استخدام تبعية Sql مباشرة كما اقترح @Bloodhound).

أعتقد أنني سأجري بعض اختبارات التحمل قبل الإعلان عن الأمر.

شكرا مرة أخرى جميعا.

بالطبع يمكنك (ينبغي) أيضًا استخدام ميزات التخزين المؤقت في ملف مكتبة SixPack .

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

مزيد من المعلومات على الصفحة الرئيسية لمكتبة SixPack.لاحظ أنه يتم اختبار التحميل (خاصة ذاكرة التخزين المؤقت الأمامية).

فيما يلي مثال للتخزين المؤقت البسيط:

    [Cached]
    public class MyTime : ContextBoundObject
    {
            [CachedMethod(1)]
            public DateTime Get()
            {
                    Console.WriteLine("Get invoked.");
                    return DateTime.Now;
            }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top