برنامه نویسی

دست زدن به فشار در سیستم های نرم افزاری

آیا تا به حال تصادف سیستم داشته اید زیرا نمی تواند با داده های ورودی همراه باشد؟ این فشار در کار است – یا در عوض ، عدم برخورد صحیح از آن.

بیایید به آنچه فشار خون ، چرا این اتفاق می افتد و چگونه می توان با آن مقابله کرد ، شیرجه بزنیم.

فشار خون چیست؟

فشار خون هنگامی اتفاق می افتد که یک سیستم داده های بیشتری را از آنچه می تواند در زمان واقعی پردازش کند ، دریافت می کند.

این مانند یک کافی شاپ با یک باریستای واحد است – اگر سفارشات زیادی به یکباره وارد شوند ، سفارشات شروع به جمع آوری می کنند.

در نرم افزار ، این اتفاق می افتد که یک مصرف کننده (به عنوان مثال ، یک سرور یا برنامه) نمی تواند با میزان داده های دریافتی از یک تولید کننده همراه باشد.

فشار خون در:

  • خطوط لوله داده جریان (کافکا ، RabbitMQ ، Redis Streams)
  • برنامه نویسی واکنشی (RXJS ، راکتور پروژه)
  • میکروسرویس (رسیدگی به نرخ درخواست بالا)
  • پرونده I/O (خواندن سریعتر از نوشتن)
  • پیاز (رسیدگی به جریان داده های بزرگ)

نمونه های دنیای واقعی

1. ارتباطات شبکه

تصور کنید که مشتری 1000 درخواست در هر ثانیه به یک پس زمینه ارسال می کند که فقط می تواند 700 در ثانیه را تحمل کند.

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

2. پردازش پرونده

خواندن از دیسک معمولاً سریعتر از نوشتن است.

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

3.

داشبورد در زمان واقعی که 50،000 نقطه داده در ثانیه دریافت می کند؟ موفق باشید که در یک مرورگر و بدون نوعی لرزش.

استراتژی هایی برای رسیدگی به فشار خون

1. تولید کننده را کنترل کنید

بهترین راه برای رسیدگی به فشار خون ، کند کردن منبع داده های دریافتی است.

در شبکه ، این ممکن است به معنای استفاده از کنترل جریان TCP باشد.

در سیستم های رویداد محور ، این می تواند به معنای اعمال محدود کردن نرخ یا درخواست فشار باشد.

2. بافر

اگر کند شدن تولید کننده امکان پذیر نباشد ، بافر گزینه دیگری است.

این به معنای ذخیره موقت داده های اضافی و پردازش آن در هنگام آزاد کردن منابع است.

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

3. رها کردن داده ها

بعضی اوقات ، بهتر است برخی از داده ها را از دست بدهید تا خرابی.

این در سیستم های نظارتی معمول است که ممکن است به جای گرفتن همه چیز ، هر رویداد نهم را نمونه برداری کنید.

4. تعادل بار

توزیع بار دریافتی در بین مصرف کنندگان متعدد می تواند مانع از غرق شدن در هر سرویس شود.

این امر به ویژه در معماری های میکروسرویس مفید است.

5. پردازش ناهمزمان

به جای اینکه همه چیز را همزمان انجام دهید ، از کارگران پردازش Async و پس زمینه استفاده کنید.

صف پیام (مانند RabbitMQ یا Kafka) برای این کار عالی است.

انتخاب رویکرد درست

  • تعامل کاربر؟ ورودی یا ورودی دریچه گاز.
  • خطوط لوله داده بحرانی؟ از کنترل جریان و بافرهای محدود استفاده کنید.
  • ورود به سیستم/معیارها؟ داده های اضافی را رها کنید یا از نمونه برداری استفاده کنید.

افکار نهایی

Backpressure یک اشکال نیست-این یک واقعیت سیستم های با کارایی بالا است.

نکته اصلی این است که تشخیص دهید چه زمانی اتفاق می افتد و استراتژی مناسب را قبل از اینکه همه چیز از کنترل خارج شود استفاده کنید.

این که آیا تولید کننده ، بافر یا رها کردن داده ها را محدود می کند ، رویکرد صحیح به مورد استفاده شما بستگی دارد.

آن را به خوبی کنترل کنید و سیستم شما تحت فشار صاف می ماند.


من روی یک ابزار فوق العاده مناسب به نام LiveApi کار کرده ام.

LiveApi به شما کمک می کند تا در چند دقیقه تمام API های پس زمینه خود را ثبت کنید

با LiveApi ، می توانید به سرعت مستندات API تعاملی را تولید کنید که به کاربران امکان می دهد API ها را مستقیماً از مرورگر اجرا کنند.

تصویر

اگر از ایجاد دستی برای API های خود خسته شده اید ، این ابزار ممکن است زندگی شما را آسانتر کند.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا