خادم واحد متطور مع خادم تطبيق واحد أو خوادم تطبيق متعددة؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

إذا كان لدي خادم متطور ، على سبيل المثال مع ذاكرة 1T و CPU 8x4core ...

هل ستجلب المزيد من الأداء إذا قمت بتشغيل خادم تطبيق متعدد (على JVM مختلف) بدلاً من خادم تطبيق واحد فقط؟

على خادم التطبيق ، سأقوم بتشغيل بعض الخدمات (الفاصوليا التي تعتمد على الرسائل) التي تتبادل رسالة مع بعضها البعض.

راجع للشغل ، هل الآن جافا 64bit لم يعد هناك أي قيود على الذاكرة؟http://java.sun.com/products/hotspot/whitepaper.html#64

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

المحلول

هل ستجلب المزيد من الأداء إذا قمت بتشغيل خادم تطبيق متعدد (على JVM مختلف) بدلاً من خادم تطبيق واحد فقط؟

هناك العديد من الأشياء التي يجب مراعاتها:

  • خادم تطبيق واحد يعني نقطة فشل واحدة. بالنسبة للعديد من التطبيقات ، فإن هذا ليس خيارًا واستخدام التحجيم الأفقي والعمودي هو تكوين شائع (أي VMs متعددة لكل جهاز وآلات متعددة). وإضافة المزيد من الآلات من الواضح أنه أسهل/أرخص إذا كانت صغيرة.

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

لذلك ، لتجربتي ، فإن تشغيل آلات متعددة تستضيف JVM متعددة هو الخيار المعتاد (وعادة ما يكون أرخص من الوحش الضخم ويمنحك المزيد من المرونة).

نصائح أخرى

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

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

بالنظر إلى أن لديك JVM يمكنه الاستفادة من الأجهزة ، فأنت بحاجة إلى خادم تطبيق يمكنه توسيع نطاقه بشكل مناسب. عنق الزجاجة الشائع هذه الأيام هو مقدار طلبات الويب التي يمكن معالجتها في الثانية - يجب أن يكون الخادم الحديث قادرًا على معالجة 10000 طلب في الثانية (انظر http://www.kegel.com/c10k.html) ولكن لا يفعل كل شيء.

لذلك ، أولاً وقبل كل شيء ، حدد احتياجاتك الأكثر إلحاحًا (الاتصالات في الثانية؟ استخدام الذاكرة؟ عرض النطاق الترددي للشبكة؟) واستخدم ذلك لتحديد أفضل مجموعة من النظام الأساسي + JVM +. إذا كانت لديك احتياجات ملموسة ، فعادة ما يسعد البائعون بمساعدتك في إجراء بيع.

على الأرجح سوف تكسب عن طريق الجري JVMs متعددة مع أكوام أصغر بدلا من JVM كبيرة واحدة. هناك بضعة أسباب لذلك:

  1. أكوام أصغر يعني القمامة أقصر مجموعات

  2. المزيد من JVMs يعني منافسة أقل للموارد الداخلية داخل JVM مثل برك الخيوط وغيرها من الوصول المتزامن.

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

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

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