الگوی بد: غیرفعال کردن اتصال‌های دائمی HTTP (اتصال‌های زنده قابل‌استفاده مجدد)

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

کارگزار میانای برنامه‌سازی کاربردی رابطی برای برنامه‌های مشتری است که برای اتصال به سرویس‌های زیرینه استفاده می‌شود. ‫Apigee Edge روش‌های متعددی برای اتصال به سرویس‌های زیرینه ازطریق پراکسی API ارائه می‌دهد:

اتصال‌های پایدار

اتصال پایدار HTTP، که به آن HTTP keep-alive یا HTTP connection reuse نیز گفته می‌شود، مفهومی است که به یک اتصال TCP اجازه می‌دهد چندین درخواست HTTP/پاسخ ارسال و دریافت کند، به‌جای اینکه برای هر جفت درخواست/پاسخ اتصال جدیدی باز کند.

‫Apigee Edge از اتصال پایدار برای ارتباط با سرویس‌های زیرینه استفاده می‌کند. اتصال به‌طور پیش‌فرض به‌مدت ۶۰ ثانیه فعال می‌ماند. یعنی اگر اتصالی در استخر اتصال بیش‌از ۶۰ ثانیه بدون استفاده بماند، اتصال بسته می‌شود.

دوره زمان‌بندی وقفه زنده نگه داشتن ازطریق دارایی‌ای به‌نام keepalive.timeout.millis که در پیکربندی TargetEndpoint یک پراکسی API مشخص شده است قابل پیکربندی است. برای مثال، دوره زمانی فعال نگه داشتن می‌تواند برای سرویس زیرینه خاصی در TargetEndpoint روی ۳۰ ثانیه تنظیم شود.

در مثال زیر، keepalive.timeout.millis در پیکربندی 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 رفتار زنده نگه داشتن را برای سرویس زیرینه خاصی در پراکسی API کنترل می‌کند. همچنین دارایی‌ای وجود دارد که رفتار «زنده نگه داشتن» را برای همه سرویس‌های زیرینه در همه پراکسی‌ها کنترل می‌کند. HTTPTransport.keepalive.timeout.millis در عنصر «پردازشگر پیام» قابل‌پیکربندی است. این دارایی همچنین مقدار پیش‌فرض ۶۰ ثانیه دارد. ایجاد هرگونه تغییر در این دارایی بر رفتار اتصال فعال بین Apigee Edge و همه سرویس‌های زیرینه در همه پراکسی‌های API تأثیر می‌گذارد.

الگوی بد

غیرفعال کردن اتصالات پایدار (فعال نگه داشتن) با تنظیم ویژگی keepalive.timeout.millis به ۰ در پیکربندی TargetEndpoint یک «پراکسی API» خاص یا تنظیم HTTPTransport.keepalive.timeout.millis به ۰ در «پردازشگرهای پیام» توصیه نمی‌شود زیرا بر عملکرد تأثیر می‌گذارد.

در مثال زیر، پیکربندی TargetEndpoint با تنظیم keepalive.timeout.millis روی ۰، اتصالات ماندگار (زنده نگه داشتن) را برای سرویس زیرینه خاصی غیرفعال می‌کند:

<!-- /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 انجام می‌دهد و به تأخیر کلی درخواست‌های API اضافه می‌کند.

تأثیر

  • زمان پاسخ کلی درخواست‌های API را افزایش می‌دهد زیرا Apigee Edge باید اتصال جدیدی باز کند و برای هر درخواست جدید، دست‌دهی SSL انجام دهد.
  • در شرایط ترافیک بالا، ممکن است اتصال‌ها تمام شوند، زیرا مدتی طول می‌کشد تا اتصال‌ها به سیستم برگردانده شوند.

روال مطلوب

  • سرویس‌های زیرینه باید اتصال پایدار HTTP را مطابق با استانداردهای HTTP 1.1 پذیرفته و مدیریت کنند.
  • اگر سرویس‌های زیرینه بتوانند اتصالات پایدار (زنده نگه داشتن) را مدیریت کنند، باید با سرایند Connection:keep-alive پاسخ دهند.
  • اگر سرویس‌های زیرینه نتوانند اتصالات پایدار را مدیریت کنند، باید با سرصفحه Connection:close پاسخ دهند.

پیاده‌سازی این الگو تضمین می‌کند که Apigee Edge می‌تواند به‌طور خودکار اتصال پایدار یا ناپایدار با سرویس‌های زیرینه را بدون نیاز به تغییر در پراکسی API مدیریت کند.

مطالعه بیشتر