سؤال

أنا أستخدم التنفيذ المتزامن لـ JREDIS ، لكنني أخطط للتبديل إلى الطريقة غير المتزامنة للتواصل مع Redis Server.

لكن قبل ذلك ، أود أن أسأل المجتمع عما إذا كان تنفيذ jredisfuture لألفازيرو JREDIS هل مستقر بما يكفي لاستخدام الإنتاج أم لا؟

هل هناك أي شخص يستخدمه أو لديه خبرة معه؟

شكرًا!

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

المحلول

عندما تحصل Jredis على دعم لدلالات المعاملات (Redis 1.3.n ، فرع Jredis الرئيسي) ، فمن المؤكد أنه يجب أن يكون "مستقرًا" بما فيه الكفاية.

يتيح بروتوكول Redis للأوامر غير العادلة ، بأنفسهم ذريًا ، نافذة من الفشل غير القابل للاسترداد عند إرسال أمر مدمر ، وفي مرحلة القراءة أخطاء الاتصال. ليس لدى العميل أي وسيلة لمعرفة ما إذا كانت Redis في الواقع قد تمت معالجتها للطلب الأخير ولكن تم إسقاط الاستجابة بسبب فشل الشبكة (على سبيل المثال). حتى عميل الطلب/الرد الأساسي عرضة لهذا (وأعتقد أن هذا لا يقتصر على Java ، في حد ذاته).

نظرًا لأن بروتوكول Redis لا يتطلب أي بيانات تعريف (على الإطلاق) مع أوامر نوع DML و DDL (على سبيل المثال ، لا يتم فتح نافذة الفشل هذه.

مع خطوط الأنابيب ، لم يعد هناك ارتباط متسلسل بين الأمر الذي يتم كتابته والاستجابة التي تتم قراءتها. (يقوم الأنبوب بإرسال أمر n هو أوامر n التي تسببت في إصدار Redis للاستجابة التي يتم قراءتها في نفس الوقت. إذا حدث أي شيء ، فهناك الكثير من الأطباق في الهواء :)

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

هل هذا مؤهل على أنه "غير مستقر"؟ في رأيي ، لا. هذه مشكلة في خطوط الأنابيب.

مرة أخرى ، Redis 1.3.n مع دلالات المعاملات يعالج هذه المشكلة بالكامل.

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

لكنك ما زلت بحاجة إلى إجراء اختبارات - هل قلت "الإنتاج" ، أليس كذلك؟ ) - وحجم الصناديق الخاصة بك ووضع غطاء على عدد خيوط التحميل على الواجهة الأمامية.

من المحتمل أيضًا أن أوصي بعدم تشغيل أكثر من خط أنابيب JREDIS على الآلات متعددة النواة. في التنفيذ الحالي (الذي لا يقطع المخزن المؤقت للكتابة) ، هناك مجال للفعاليات (في سياق استخدام النطاق الترددي الكامل وزيادة الإنتاجية) لاكتسابها عن طريق تشغيل خطوط أنابيب متعددة إلى نفس الخادم. في حين أن خط أنابيب واحد مشغول بإنشاء مخازن مؤقتة للكتابة ، فإن الآخر هو الكتابة ، وما إلى ذلك ، ولكن ، سوف تتداخل هاتان الأنابيب مع بعضهما البعض بسبب (لا مفر منه - تذكر أنهما قوائم وبعض أشكال التزامن يجب أن تحدث) وإبطال ذاكرة التخزين المؤقت الدورية (على كل dequeue/enqueue في أسوأ حالات - ولكن في دوغ ليا نثق.) لذلك إذا كان خط الأنابيب متوسطة ضرب D1 (في عزلة) ، فهذا هو أن الأنابيب ب. للأسف ، فإن تشغيل اثنين منهم على نفس النوى سوف ينتج في فترة إبطال ذاكرة التخزين المؤقت الواسعة في النظام ، والتي هي نصف النظام الأصلي ، مرتين مع حدوث المزيد من إبطال ذاكرة التخزين المؤقت (في المتوسط). لذلك هو هزيمة الذات. لكن اختبر شروط التحميل الخاصة بك ، وعلى منصة نشر الإنتاج المتوقعة.

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