سؤال

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

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

هل هناك أي ممارسات أفضل لهذا النوع من الأشياء؟التنفيذ هو Rails مع mysql.

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

المحلول

ويتم كل هذا باستخدام خادم الويب الخارجي، الذي يستمع إلى العالم (أوصي باستخدام nginx أو lighttpd).

فيما يتعلق بحدود المعدل، فإن nginx قادر على الحد، على سبيل المثال.50 طلبًا/الدقيقة لكل عنوان IP، في كل مكان تحصل على 503 صفحة، والتي يمكنك تخصيصها.

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

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

haproxy هو حل موازن فقط.يمكنه موازنة الطلبات المقدمة إلى خوادم التطبيقات في مزرعتك بكفاءة عالية.

للحصول على خدمة كبيرة جدًا، سينتهي بك الأمر بشيء مثل:

  • api.domain يحل موازنات Round-Robin N
  • يقوم كل وكيل موازن بطلبات إلى خوادم الويب M لخوادم التطبيقات الثابتة وP للمحتوى الديناميكي.حسنًا، لا تحتوي REST API على ملفات ثابتة، أليس كذلك؟

بالنسبة إلى الخدمة الصغيرة جدًا (أقل من 2K rps)، تتم جميع عمليات الموازنة داخل خادم أو اثنين من خوادم الويب.

نصائح أخرى

وإجابات جيدة بالفعل - إذا كنت لا تريد لتنفيذ المحدد نفسك، وهناك أيضا حلول مثل 3scale ( HTTP: / /www.3scale.net ) الذي يقوم المعدل وتحليلات وغيرها من أجل واجهات برمجة التطبيقات. وهو يعمل باستخدام البرنامج المساعد (انظر هنا للحصول على روبي المعهد المساعد ) التي هوكس الى العمارة 3scale. يمكنك أيضا استخدامه عبر الورنيش ويكون الفعل طلاء بما معدل الحد الوكيل.

وأنا أنصح تنفيذ حدود معدل خارج من التطبيق الخاص بك منذ وإلا فإن ارتفاع حركة المرور لا تزال لديها تأثير بقتل التطبيق الخاص بك. أحد الحلول الجيدة لتنفيذ ذلك كجزء من وكيل اباتشي الخاص بك، مع شيء من هذا القبيل mod_evasive

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