انعطاف‌پذیری بهبود یافته با فشار برگشتی و کنترل پذیرش برای سرویس جستجوی باز آمازون | خدمات وب آمازون

انعطاف‌پذیری بهبود یافته با فشار برگشتی و کنترل پذیرش برای سرویس جستجوی باز آمازون | خدمات وب آمازون

گره منبع: 2723961

سرویس جستجوی باز آمازون یک سرویس مدیریت شده است که ایمن سازی، استقرار و اجرای خوشه های OpenSearch را در مقیاس در AWS Cloud ساده می کند. سال گذشته معرفی کردیم فشار برگشتی نمایه سازی شارد و کنترل پذیرش، که منابع خوشه و ترافیک ورودی را برای رد انتخابی درخواست هایی که در غیر این صورت خطرات پایداری مانند از بین رفتن حافظه و عملکرد خوشه را به دلیل اختلافات حافظه، اشباع CPU و سربار GC و غیره ایجاد می کنند، رد می کند.

ما اکنون مشتاق هستیم که Search Backpressure و کنترل پذیرش مبتنی بر CPU را برای OpenSearch Service معرفی کنیم، که انعطاف پذیری خوشه ها را بیشتر می کند. این پیشرفت‌ها برای همه نسخه‌های OpenSearch 1.3 یا بالاتر در دسترس هستند.

جستجوی فشار برگشتی

فشار برگشتی مانع از غرق شدن سیستم در کار می شود. این کار را با کنترل نرخ ترافیک یا کاهش بار بیش از حد به منظور جلوگیری از خرابی و از دست دادن داده ها، بهبود عملکرد و جلوگیری از خرابی کامل سیستم انجام می دهد.

Search Backpressure مکانیزمی است برای شناسایی و لغو درخواست‌های جستجوی پرمنبع در پرواز زمانی که یک گره تحت فشار است. در برابر بارهای کاری جستجو با استفاده غیرعادی از منابع (مانند پرس و جوهای پیچیده، پرس و جوهای آهسته، بازدیدهای زیاد یا تجمعات سنگین) موثر است، که در غیر این صورت می تواند باعث خرابی گره شود و بر سلامت خوشه تأثیر بگذارد.

Search Backpressure در بالای چارچوب ردیابی منبع وظیفه ساخته شده است، که یک API با استفاده آسان برای نظارت بر استفاده از منابع هر کار ارائه می دهد. Search Backpressure از یک رشته پس‌زمینه استفاده می‌کند که به صورت دوره‌ای میزان استفاده از منابع گره را اندازه‌گیری می‌کند و بر اساس عواملی مانند زمان CPU، تخصیص پشته‌ها و زمان سپری شده، امتیاز لغو را به هر کار جستجوی حین پرواز اختصاص می‌دهد. امتیاز لغو بالاتر مربوط به درخواست جستجوی با منابع فشرده تر است. درخواست‌های جستجو به ترتیب نزولی امتیاز لغو لغو می‌شوند تا گره‌ها به سرعت بازیابی شوند، اما تعداد لغوها با نرخ محدود است تا از کار بیهوده جلوگیری شود.

نمودار زیر گردش کار Backpressure جستجو را نشان می دهد.

درخواست‌های جستجو پس از لغو، کد وضعیت HTTP 429 «درخواست‌های خیلی زیاد» را برمی‌گردانند. OpenSearch نتایج جزئی را در صورتی برمی‌گرداند که فقط برخی خرده‌ها از کار بیفتند و نتایج جزئی مجاز باشند. کد زیر را ببینید:

{ "error": { "root_cause": [ { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } ], "type": "search_phase_execution_exception", "reason": "SearchTask was cancelled", "phase": "fetch", "grouped": true, "failed_shards": [ { "shard": 0, "index": "nyc_taxis", "node": "9gB3PDp6Speu61KvOheDXA", "reason": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } } ], "caused_by": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } }, "status": 429
}

نظارت بر فشار برگشتی جستجو

با استفاده از Node stats API می توانید وضعیت Backpressure جستجوی دقیق را نظارت کنید:

curl -X GET "https://{endpoint}/_nodes/stats/search_backpressure"

همچنین می‌توانید خلاصه‌ای از لغوها را در کل خوشه مشاهده کنید CloudWatch آمازون. معیارهای زیر در حال حاضر در دسترس هستند ES/OpenSearchService فضای نام:

  • SearchTask Cancelled - تعداد لغو گره هماهنگ کننده
  • SearchShardTask لغو شد - تعداد لغو گره های داده

تصویر زیر نمونه ای از ردیابی این معیارها را در کنسول CloudWatch نشان می دهد.

کنترل پذیرش مبتنی بر CPU

کنترل پذیرش یک مکانیسم نگهبانی است که به طور فعال تعداد درخواست ها را به یک گره بر اساس ظرفیت فعلی آن محدود می کند، هم برای افزایش ارگانیک و هم برای افزایش ترافیک.

علاوه بر فشار حافظه JVM و آستانه اندازه درخواست، اکنون میانگین استفاده از CPU هر گره را نیز برای رد کردن ورودی‌ها کنترل می‌کند. _search و _bulk درخواست ها. این مانع از غرق شدن گره‌ها با درخواست‌های بسیار زیاد می‌شود که منجر به نقاط داغ، مشکلات عملکرد، زمان‌بندی درخواست‌ها و سایر خرابی‌های آبشاری می‌شود. درخواست‌های بیش از حد، پس از رد کردن، کد وضعیت HTTP 429 “Too Many Requests” را برمی‌گردانند.

رسیدگی به خطاهای HTTP 429

اگر ترافیک بیش از حد به یک گره ارسال کنید، خطاهای HTTP 429 را دریافت خواهید کرد. این نشان‌دهنده ناکافی بودن منابع خوشه‌ای، درخواست‌های جستجوی فشرده منابع، یا افزایش ناخواسته در حجم کاری است.

Search Backpressure دلیل رد شدن را فراهم می کند، که می تواند به تنظیم دقیق درخواست های جستجوی فشرده با منابع کمک کند. برای افزایش ترافیک، ما سعی مجدد در سمت سرویس گیرنده را با عقب نشینی و لرزش نمایی توصیه می کنیم.

همچنین می‌توانید این دستورالعمل‌های عیب‌یابی را برای رفع اشکال رد بیش از حد دنبال کنید:

نتیجه

Search Backpressure یک مکانیسم واکنشی برای کاهش بار بیش از حد است، در حالی که کنترل پذیرش یک مکانیسم فعال برای محدود کردن تعداد درخواست‌ها به گره‌ای فراتر از ظرفیت آن است. هر دو به صورت پشت سر هم برای بهبود انعطاف پذیری کلی یک خوشه OpenSearch کار می کنند.

Search Backpressure در دسترس است جستجوی باز، و ما همیشه به دنبال آن هستیم کمک های خارجی. می توانید به RFC برای شروع.


درباره نویسندگان

کتان ورما یک SDE ارشد است که روی سرویس جستجوی باز آمازون کار می کند. او مشتاق ساختن سیستم‌های توزیع‌شده در مقیاس بزرگ، بهبود عملکرد، و ساده‌سازی ایده‌های پیچیده با انتزاع‌های ساده است. در خارج از محل کار، او دوست دارد بخواند و مهارت های باریستای خانگی خود را بهبود بخشد.

سورش NS یک SDE ارشد است که روی سرویس جستجوی باز آمازون کار می کند. او مشتاق حل مشکلات در سیستم های توزیع شده در مقیاس بزرگ است.

پریتکومار لادانی یک SDE-2 است که روی سرویس جستجوی باز آمازون کار می کند. او دوست دارد در توسعه نرم افزار منبع باز مشارکت داشته باشد و به سیستم های توزیع شده علاقه زیادی دارد. او یک بدمینتون باز آماتور است و از پیاده روی لذت می برد.

بوختوارخان یک مهندس اصلی است که در سرویس جستجوی باز آمازون کار می کند. او علاقه مند به ساخت سیستم های توزیع شده و مستقل است. او یک نگهدارنده و یک مشارکت کننده فعال در OpenSearch است.

تمبر زمان:

بیشتر از داده های بزرگ AWS