استخدام ناقل الرسائل في عميل مخصص على AWS. نحتاج إلى القليل من المساعدة، من فضلك :)

أولاً، أنا أدرك تماماً إعدادات Discourse الموصى بها، ولكن للأسف لا أستطيع التحكم فيها حالياً.

انتقل الآن إلى المشكلة. كان لدى عميل واجهة أمامية مخصصة مبنية باستخدام React تستخدم Discourse كخلفية للتطبيق. ورثت المشروع وهو في حالة سيئة، وقد حاول المطورون السابقون دمج ActionCable في Discourse بشكل غير مناسب. وبما أن Discourse يستخدم بالفعل Message bus للميزات الفورية، اعتقدت أنه يجب علينا محاولة استخدامه.

نجحنا في ذلك محلياً. فـ Message bus يعمل ‘بشكل سلس’، وتمكنا من الاشتراك في جميع قنوات Message bus الافتراضية في Discourse بالإضافة إلى إنشاء قنوات خاصة بنا.

المشكلة التي نواجهها تظهر في بيئاتنا البعيدة. نحن ننشر على مثيلات AWS EC2 خلف موازن حمل ALB، وقد قمنا ببناء البيئة بأنفسنا. كنت أود جداً اتباع نهج Docker، لكن العميل ببساطة لم يكن لديه الميزانية اللازمة لإنفاق الوقت على تغيير الأمور في هذه المرحلة من المشروع :sadpanda:

العرض الرئيسي هو أن Message bus يعاني من تأخير رهيب. لا شيء حقيقيًا فوريًا، لكننا نعلم أن إعدادات Message bus سليمة لأنها تعمل بشكل ممتاز محلياً، لذا يجب أن تكون المشكلة في شيء آخر.

أنا أستخدم إعدادات nginx الافتراضية لـ Discourse تقريباً. اعتقدت في البداية أن هذه هي المشكلة، حيث كان إعداد nginx الخاص بـ Message bus مفقوداً، ولكن بعد إضافته، لم يبدو أنه حل المشكلات التي نواجهها.

بعد فحص تبويب الشبكة في Chrome، من الواضح وجود مشكلة لأن طلباتنا /poll تنتظر لمدة 25 ثانية ثم تقوم بتحميل المحتوى خلال أجزاء من الثانية. وأنا أعلم أنه يجب أن يكون العكس، كما يحدث عندما أعمل محلياً أو كما يحدث على meta.

أدرك أن هذه قد تكون أيضاً مشكلة تتعلق بـ AWS ALB، لكنني حرفياً لا أعرف من أين أبدأ. كنت أتساءل عما إذا كان @sam لديه أي فكرة عن ماهية المشكلة، أو قادر على توجيهي في الاتجاه الصحيح.

كما هو معتاد، أي مساعدة كانت وستكون موضع تقدير كبير!

لدينا ناقل رسائل يعمل مع موازنات الحمل في طبقة التطبيقات (ALBs)، وفي الواقع تستضيف ميتا خدمتها على AWS.

أعتقد أن هناك somewhere في بنية النظام لديك تمكين التخزين المؤقت للطلبات، مما يتسبب في احتجازها لفترات طويلة.

من المرجح أن يكون السبب هو إعداد proxy_buffering في NGINX مضبوطًا على on بدلاً من off.

مرحبًا @sam

شكرًا لك على هذه المقترحات. يبدو أنها قد أصلحت المشكلة في لوحة الشبكة، أي أنها تظهر الآن المحتوى المُحمّل خلال 25 ثانية، والانتظار لمدة 35 مللي ثانية بمجرد اكتمال الطلب.

ومع ذلك، كنتُ أفهم أن الرسالة تُعالج فور استلامها. لا يزال تطبيقنا يبدو وكأنه ينتظر حتى ينتهي الاستطلاع قبل معالجة أي رسائل مستلمة.

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

هل لديك أي أفكار؟ شكرًا لك.