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

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

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

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

اتصال دائمی HTTP که HTTP حفظ زنده یا استفاده مجدد از اتصال HTTP نیز نامیده می‌شود، مفهومی است که به یک اتصال TCP اجازه می‌دهد به جای باز کردن یک اتصال جدید برای هر جفت درخواست/پاسخ، چندین درخواست/پاسخ HTTP ارسال و دریافت کند.

Apigee Edge از اتصال دائمی برای برقراری ارتباط با خدمات باطن استفاده می کند. یک اتصال به طور پیش فرض به مدت 60 ثانیه زنده می ماند. یعنی اگر یک اتصال بیش از 60 ثانیه در حوضچه اتصال بیکار باشد، آنگاه اتصال بسته می شود.

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

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

ضد الگو

غیرفعال کردن اتصالات دائمی با تنظیم ویژگی keepalive.timeout.millis روی 0 در پیکربندی TargetEndpoint یک پروکسی API خاص یا تنظیم 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 برای هر درخواست جدید دست دادن SSL را انجام می‌دهد و به تأخیر کلی درخواست‌های API اضافه می‌کند.

تاثیر

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

بهترین تمرین

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

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

در ادامه مطلب