سؤال

في Tomcat 6 لدي servlet يعمل بنظام openbluedragon، حيث يتم تجميع كل شيء وخوادمه بشكل سريع، باستثناء الصور، فهي تتأخر بشكل كبير.أي اقتراحات لتحسين عرض الصور؟

هنا هو server.xml الخاص بي:

    <Service name="Catalina">

      <Connector port="8009" protocol="AJP/1.3" />
      <Connector port="8080" maxThreads="100" protocol="HTTP/1.1" connectionTimeout="20000" />
      <Engine name="Standalone" defaultHost="hostname.whatever" jvmRoute="ajp13">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      <Host name="hostname.whatever"  appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
        ...context
      </Host>

    </Engine>
  </Service>
هل كانت مفيدة؟

المحلول

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

في نظام Unix، يعد وجود Apache كواجهة أمامية خيارًا جيدًا نظرًا لارتباطك بالمنفذ 80، غالبًا ما تضطر إلى تشغيله كجذر.يعرف Apache كيفية إسقاط أذونات الجذر بعد ربط المنفذ، لكن Tomcat لا يعرف ذلك.لا تريد أن يعمل الخادم كجذر في مواجهة الجمهور.

(هذا مشابه لإجابة الوكيل العكسي، ولكنه لا يتضمن وكيلًا ولكن mod_jk)

نصائح أخرى

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

إذا كان لديك الخيار، فيمكنك إضافة وكيل عكسي قبل التطبيق الخاص بك.لدي في العمل خادم ويب Apache يتلقى جميع اتصالات HTTP الواردة.واستنادًا إلى عنوان URL، فإنه إما يعيد توجيه الطلب إلى خادم آخر أو يقدم المحتوى نفسه.لقد استخدمت هذا الأسلوب لتسريع تقديم المحتوى الثابت لموقع Trac.تعد توجيهات ProxyPass وProxyPassReverse مكانًا جيدًا لبدء البحث عما إذا كنت تريد السير في هذا الطريق.

كمثال بسيط، إذا كان لديك دليل ظاهري يسمى /images، فيمكن لـ Apache تقديم أي طلب لشيء ما في هذا الدليل وإعادة توجيه كل شيء آخر إلى مثيل Tomcat الخاص بك.بناء الجملة شامل جدا.إذا كان هناك أي طريقة على الإطلاق للطريقة التي يتم بها تحديد المحتوى الثابت الخاص بك، فهذا هو الأسلوب الذي سينجح.

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

قد يكون هناك أيضًا وكلاء عكسيين للتخزين المؤقت يكتشفون ذلك لك تلقائيًا.أنا لست على دراية بأي منهم رغم ذلك.

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