كيف يقوم Phusion Passenger بإعادة استخدام الخيوط والعمليات؟

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

سؤال

أقوم بإعداد خادم ويب Apache2 يقوم بتشغيل العديد من تطبيقات الويب Ruby on Rails باستخدام Phusion Passenger.أعلم أن Passenger يولد عمليات Ruby للتعامل مع الطلبات.لديك على الأسئلة التالية:

  • إذا كان لا بد من معالجة أكثر من طلب في نفس الوقت، فهل سينتج Passenger عمليات متعددة أو سلاسل رسائل متعددة (Ruby)؟كيف أقوم بتكوينه بحيث ينتج دائمًا عمليات ذات ترابط واحد؟
  • إذا كان لدي تطبيقان لـ Rails، تخيل أن طلب التطبيق A يذهب إلى العملية 1، ثم يصل طلب التطبيق B لاحقًا.هل من الممكن أن تتعامل العملية 1 مع هذا الطلب أيضًا؟متى وكيف يكون هذا ممكنا؟بمعنى آخر، هل يُسمح لعملية واحدة بمعالجة طلبات تطبيقات Rails المتعددة؟
  • لدي نفس تطبيق Rails الذي تم تصديره في عناوين URL متعددة ومضيفين افتراضيين متعددين (مثل http:// وhttps://).هل ستكون العملية نفسها قادرة على خدمة مضيفين افتراضيين مختلفين؟(يبدو أن الإجابة على هذا هي نعم، لقد قمت بتعيين متغير عام في الاستجابة لطلب المضيف الظاهري أ، وتمكنت من استرداد القيمة في المضيف الظاهري ب.)
هل كانت مفيدة؟

المحلول

بشكل عام، يولد Passenger عمليات جديدة عن طريق تفرع ApplicationSpawner، الذي يحتوي على إطار العمل ورمز التطبيق المحمل مسبقًا في الذاكرة، أو FrameworkSpawner، الذي يحتوي فقط على رمز إطار العمل.

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

إذا تم تكوين Passenger بطريقة معينة (أعتقد أنه من خلال اختيار طريقة النشر "الذكية")، فسيتم إنشاء FrameworkSpawner، الذي يقوم بتحميل كود Rails، ولكن بدون رمز التطبيق، والذي يمكن بعد ذلك تشعبه للتحميل والتطبيق باستخدام هذا الإصدار من القضبان.

لذلك للإجابة على أسئلتك:

  • سيخدمهم بشكل تسلسلي، ثم سينتج عمليات إضافية إذا قرر أن الحمل مرتفع بدرجة كافية.

  • لا.يمكن أن تنتمي عملية واحدة فقط إلى تطبيق Rails واحد.

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

يحرر:ذهبت وقرأت عن هذا قليلا.اتضح أنني كنت على حق في الغالب، لكن التفاصيل الفنية كانت مغلوطة بعض الشيء.انظر وثائق الركاب

نصائح أخرى

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

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