Antipattern: إيقاف اتصالات HTTP الدائمة (القابلة لإعادة الاستخدام)

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

الخادم الوكيل لواجهة برمجة التطبيقات هو واجهة لتطبيقات العميل المستخدمة للاتصال بخدمات الخلفية. توفّر Apigee Edge طرقًا متعدّدة للاتصال بخدمات الخلفية من خلال خادم وكيل لواجهة برمجة التطبيقات:

الاتصالات المستمرة

الاتصال الدائم لبروتوكول HTTP، المعروف أيضًا باسم إعادة استخدام اتصال HTTP، هو مفهوم يسمح لاتصال TCP واحد بإرسال واستجابة طلبات HTTP متعددة، بدلاً من فتح اتصال جديد لكل زوج من الطلبات/الاستجابة.

يستخدم Apigee Edge اتصالاً مستمرًا للتواصل مع خدمات الواجهة الخلفية. ويظل الاتصال مفعّلاً لمدة 60 ثانية تلقائيًا. ويعني ذلك أنّه إذا كان الاتصال غير نشِط لمدة تزيد عن 60 ثانية في مجموعة الاتصالات، سيتم إغلاق الاتصال.

يمكن ضبط فترة مهلة "إبقاء الحالة" قابلة للتعديل من خلال سمة باسم keepalive.timeout.millis، محدّدة في إعدادات TargetEndpoint للخادم الوكيل لواجهة برمجة التطبيقات. على سبيل المثال، يمكن ضبط الفترة الزمنية للاحتفاظ بالبيانات على 30 ثانية لخدمة خلفية معيّنة في TargetEndpoint.

في المثال أدناه، يتم ضبط keepalive.timeout.millis على 30 ثانية في إعدادات TargetEndpoint:

<!-- /antipatterns/examples/disable-persistent-connections-1.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">30000</Property>
    </Properties>
  </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections
</TargetEndpoint>

في المثال أعلاه، يتحكّم keepalive.timeout.millis في سلوك الاحتفاظ بالبيانات لخدمة خلفية معيّنة في خادم وكيل لواجهة برمجة التطبيقات. هناك أيضًا موقع يتحكم في السلوك النشط لجميع خدمات الخلفية في جميع الخوادم الوكيلة. يمكن ضبط HTTPTransport.keepalive.timeout.millis في مكوّن "معالج الرسائل". وتكون قيمة هذه السمة التلقائية 60 ثانية أيضًا. إنّ إجراء أي تعديلات على هذا الموقع يؤثر في سلوك الاتصال الدائم بين Apigee Edge وجميع خدمات الخلفية في جميع الخوادم الوكيلة لواجهة برمجة التطبيقات.

مضادة للأنماط

لا يُنصح بإيقاف الاتصالات المستمرة (الحفاظ على الحياة) من خلال ضبط السمة keepalive.timeout.millis على 0 في إعدادات TargetEndpoint لخادم وكيل محدّد لواجهة برمجة التطبيقات أو ضبط HTTPTransport.keepalive.timeout.millis على 0 في معالِجات الرسائل لأنّ ذلك سيؤثر في الأداء.

في المثال أدناه، توقِف إعدادات TargetEndpoint الاتصالات المستمرة (إبقاءها نشطة) لخدمة خلفية معيّنة من خلال ضبط keepalive.timeout.millis على 0:

<!-- /antipatterns/examples/disable-persistent-connections-2.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">0</Property>
     </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

إذا تم إيقاف اتصالات الإبقاء على الحالة المباشرة لخدمة واحدة أو أكثر من خدمات الواجهة الخلفية، على متصفّح Edge فتح اتصال جديد لكل طلب جديد إلى خدمات الواجهة الخلفية المستهدفة. إذا كانت الخلفية هي بروتوكولات HTTP، سيجري Edge أيضًا تأكيد اتصال طبقة المقابس الآمنة لكل طلب جديد، ما يزيد من وقت الاستجابة العام لطلبات واجهة برمجة التطبيقات.

التأثير

  • تعمل هذه الميزة على زيادة إجمالي وقت الاستجابة لطلبات واجهة برمجة التطبيقات، إذ يجب على Apigee Edge فتح اتصال جديد وإجراء تأكيد اتصال طبقة المقابس الآمنة (SSL) لكل طلب جديد.
  • قد يتم استنفاد الاتصالات في ظروف حركة المرور العالية، لأنّ عملية إعادة الاتصالات إلى النظام تستغرق بعض الوقت.

أفضل الممارسات

  • يجب أن تمتثل خدمات الخلفية لاتصال HTTP الدائم وتعالجه وفقًا لمعايير HTTP 1.1.
  • من المفترض أن تستجيب خدمات الخلفية باستخدام عنوان Connection:keep-alive إذا كانت قادرة على التعامل مع الاتصالات المستمرة (الحفاظ على التشغيل).
  • من المفترض أن تستجيب خدمات الخلفية باستخدام عنوان Connection:close إذا لم تتمكن من معالجة الاتصالات المستمرة.

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

محتوى إضافي للقراءة