Antipattern: اتصالات HTTP persistent (قابل استفاده مجدد) را غیرفعال کنید

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

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

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

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

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

دوره زمانی keep-alive از طریق یک ویژگی به نام keepalive.timeout.millis که در پیکربندی TargetEndpoint یک پروکسی API مشخص شده است، قابل تنظیم است. برای مثال، دوره زمانی keep-alive را می‌توان برای یک سرویس backend خاص در TargetEndpoint روی 30 ثانیه تنظیم کرد.

در مثال زیر، keepalive.timeout.millis در پیکربندی TargetEndpoint روی 30 ثانیه تنظیم شده است:

<!-- /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 رفتار keep alive را برای یک سرویس backend خاص در یک پروکسی API کنترل می‌کند. همچنین یک ویژگی وجود دارد که رفتار keep alive را برای همه سرویس‌های backend در همه پروکسی‌ها کنترل می‌کند. HTTPTransport.keepalive.timeout.millis در کامپوننت Message Processor قابل تنظیم است. این ویژگی همچنین دارای مقدار پیش‌فرض ۶۰ ثانیه است. ایجاد هرگونه تغییر در این ویژگی، بر رفتار اتصال keep alive بین Apigee Edge و همه سرویس‌های backend در همه پروکسی‌های API تأثیر می‌گذارد.

ضدالگو

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

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

<!-- /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>

اگر اتصالات keep-alive برای یک یا چند سرویس backend غیرفعال باشند، Edge باید برای هر درخواست جدید به سرویس(های) backend هدف، یک اتصال جدید باز کند. اگر backend از نوع HTTP باشد، Edge برای هر درخواست جدید، SSL handshake را نیز انجام می‌دهد که به تأخیر کلی درخواست‌های API می‌افزاید.

تأثیر

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

بهترین روش

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

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

مطالعه بیشتر