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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

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

الاتصالات الدائمة

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

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

يمكن ضبط فترة المهلة المحدّدة لإبقاء الاتصال نشطًا من خلال خاصية باسم keepalive.timeout.millis، يتم تحديدها في إعدادات TargetEndpoint لخادم وكيل API. على سبيل المثال، يمكن ضبط الفترة الزمنية لعملية إبقاء الاتصال نشطًا على 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 وجميع الخدمات الخلفية في جميع خوادم وكيل واجهة برمجة التطبيقات.

نمط مضاد

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

في المثال أدناه، يؤدي إعداد TargetEndpoint إلى إيقاف الاتصالات المستمرة (keep alive) لخدمة خلفية معيّنة من خلال ضبط 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 فتح اتصال جديد لكل طلب جديد إلى خدمات الخلفية المستهدَفة. إذا كانت الخلفية تستخدم بروتوكول HTTPs، سيجري Edge أيضًا تأكيد اتصال SSL لكل طلب جديد، ما يزيد من وقت الاستجابة الإجمالي لطلبات البيانات من واجهة برمجة التطبيقات.

التأثير

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

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

  • يجب أن تلتزم خدمات الخلفية بمعيار HTTP 1.1 وأن تتعامل مع الاتصال الدائم عبر HTTP وفقًا لهذا المعيار.
  • يجب أن تستجيب خدمات الخلفية باستخدام العنوان Connection:keep-alive إذا كان بإمكانها التعامل مع الاتصالات الدائمة (إبقاء الاتصال نشطًا).
  • يجب أن تستجيب خدمات الخلفية باستخدام عنوان Connection:close إذا لم يكُن بإمكانها معالجة الاتصالات المستمرة.

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

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