برنامه نویسی

رام کردن هیولای شکست های متناوب: داستان مدار شکن لاراول

Summarize this content to 400 words in Persian Lang

رام کردن هیولای شکست های متناوب: داستان مدار شکن لاراول

حلقه، حلقه! زنگ خطر دوباره به صدا در می آید. سرویس شخص ثالث قابل اعتماد، دوست قدیمی ما (سرویس بازرگانی)، مانند یک نوجوان سرکش رفتار کرده است. آه هر توسعه دهنده باتجربه ای چند تار موی خاکستری بیشتر از پاسخ های متناقض و شکست های پراکنده دریافت می کند.

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

مدار شکن؟ شما بپرسید آیا قرار است در رشته مهندسی برق بپردازیم؟ با رمز می خندد. نه کاملا! قطع کننده مدار یک الگوی طراحی است که سیستم را از تلاش مداوم برای انجام عملیاتی که احتمال شکست آن وجود دارد متوقف می کند.

حالا بیایید دستمان را با مقداری کد کثیف کنیم.

در اینجا چند کد لاراول آمده است که نشان می دهد چگونه در برابر مقاومت دیگران انعطاف پذیر باقی بمانید:

public function handle(CompleteKyc $event)
{
try {
$delay = $this->applyCircuitBreaker();
if ($delay !== null) {
$this->release($delay);
}
$result = $this->createZanibalAccount($event);

Cache::forget(‘failures’);
Cache::forget(‘circuit:open’);
} catch (Exception $exception) {
if($exception->getCode() >= 500){
$this->handleException($exception);
$this->release(600);
}

}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خواهید دید که این شغل/شنونده لاراول مقدار مناسبی از حفظ خود را در آنها ریشه دوانده است.

عملکرد عمده توسط روش دسته ارائه می شود. با استفاده از همسایه مفید ما ($this->applyCircuitBreaker)، مشخص می‌کند که آیا یک مدار باز است یا نه (به معنای خرابی اخیر). اگر مدار واقعاً باز باشد، مانند یک خرس خوب به خواب زمستانی می‌رود و هرگونه تقاضای آینده را تا زمانی که اوضاع کنترل شود و ساحل روشن شود به تأخیر می‌اندازد.

protected function applyCircuitBreaker()
{
$lastFailureTimestamp = Cache::get(‘circuit:open’);
if (is_int($lastFailureTimestamp) && time() – $lastFailureTimestamp < 8 * 60) {
return $lastFailureTimestamp + 600 + rand(1, 120);
} else {
$this->halfOpen = true;
return null;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در روش applicationCircuitBreaker، جادو اتفاق می افتد. تاریخ آخرین خرابی را دریافت می کند و اگر بزرگتر از هشت دقیقه باشد، نیاز به تاخیر قبل از درخواست زیر دارد. برای لمس غیرقابل پیش بینی بودن، یک تاخیر اضافی تصادفی (بین 1 تا 120 ثانیه) معرفی شده است. تنوع طعم زندگی است، پس از همه، و حتی کد نیاز به جاز کردن گاهی اوقات!

protected function handleException(Exception $exception)
{
if ($this->halfOpen) {
Cache::put(‘circuit:open’, time(), 600);
return $this->release(600);
}
if (!$failures = Cache::get(‘failures’)) {
Cache::put(‘failures’, 1, 60);
} else {
Cache::increment(‘failures’);
}

if (Cache::get(‘failures’) > 10) {
Cache::put(‘circuit:open’, time(), 600);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر استثنایی رخ دهد (و اجازه دهید با آن روبرو شویم، استثناها برای بهترین ما اتفاق می افتد)، handleException روش مانند یک ابرقهرمان در شنل وارد عمل می شود. تعداد خرابی‌ها را در حافظه پنهان ما افزایش می‌دهد، اما پس از ده شکست، بمب بزرگ را رها می‌کند و مدار را باز می‌کند و از دل درد بیشتر (یا در این مورد، درد درخواست) برای یک دوره خنک‌کننده جلوگیری می‌کند.

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

protected function createZanibalAccount(CompleteKyc $event){
//Your third party API
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در پایان، این کد چیزی بیش از انجام وظایف انجام می دهد. همچنین داستانی در مورد غلبه بر دشواری، بالا رفتن از شکست، و اطمینان از اینکه سیستم ما می تواند در برابر غیرقابل پیش بینی بودن استفاده از خدمات شخص ثالث مقاومت کند، می گوید. تشخیص می دهد که گاهی اوقات باید یک قدم به عقب برگردید، نفس خود را جمع کنید و تنها پس از آن به مبارزه برگردید، بسیار شبیه یک بوکسور سرسخت در رینگ.

بنابراین دفعه بعد که سرویس شخص ثالث شما تصمیم گرفت عصبانی شود، نترسید! فقط کلید مدار قابل اعتماد خود را بیرون بکشید و اجازه دهید کار سنگین را انجام دهد. فقط به یاد داشته باشید، همانطور که همیشه می گویم، “آرام باشید، کد را روشن کنید!”

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

کد نویسی مبارک، دوستان علاقه مند به لاراول!

رام کردن هیولای شکست های متناوب: داستان مدار شکن لاراول

حلقه، حلقه! زنگ خطر دوباره به صدا در می آید. سرویس شخص ثالث قابل اعتماد، دوست قدیمی ما (سرویس بازرگانی)، مانند یک نوجوان سرکش رفتار کرده است. آه هر توسعه دهنده باتجربه ای چند تار موی خاکستری بیشتر از پاسخ های متناقض و شکست های پراکنده دریافت می کند.

https%3A%2F%2Fdev to

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

مدار شکن؟ شما بپرسید آیا قرار است در رشته مهندسی برق بپردازیم؟ با رمز می خندد. نه کاملا! قطع کننده مدار یک الگوی طراحی است که سیستم را از تلاش مداوم برای انجام عملیاتی که احتمال شکست آن وجود دارد متوقف می کند.

حالا بیایید دستمان را با مقداری کد کثیف کنیم.

در اینجا چند کد لاراول آمده است که نشان می دهد چگونه در برابر مقاومت دیگران انعطاف پذیر باقی بمانید:

public function handle(CompleteKyc $event)
{
    try {
        $delay = $this->applyCircuitBreaker();
        if ($delay !== null) {
            $this->release($delay);
        }
        $result = $this->createZanibalAccount($event);

        Cache::forget('failures');
        Cache::forget('circuit:open');
    } catch (Exception $exception) {
        if($exception->getCode() >= 500){
          $this->handleException($exception);
          $this->release(600);
        }

    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خواهید دید که این شغل/شنونده لاراول مقدار مناسبی از حفظ خود را در آنها ریشه دوانده است.

عملکرد عمده توسط روش دسته ارائه می شود. با استفاده از همسایه مفید ما ($this->applyCircuitBreaker)، مشخص می‌کند که آیا یک مدار باز است یا نه (به معنای خرابی اخیر). اگر مدار واقعاً باز باشد، مانند یک خرس خوب به خواب زمستانی می‌رود و هرگونه تقاضای آینده را تا زمانی که اوضاع کنترل شود و ساحل روشن شود به تأخیر می‌اندازد.

protected function applyCircuitBreaker()
{
    $lastFailureTimestamp = Cache::get('circuit:open');
    if (is_int($lastFailureTimestamp) && time() - $lastFailureTimestamp < 8 * 60) {
        return $lastFailureTimestamp + 600 + rand(1, 120);
    } else {
        $this->halfOpen = true;
        return null;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در روش applicationCircuitBreaker، جادو اتفاق می افتد. تاریخ آخرین خرابی را دریافت می کند و اگر بزرگتر از هشت دقیقه باشد، نیاز به تاخیر قبل از درخواست زیر دارد. برای لمس غیرقابل پیش بینی بودن، یک تاخیر اضافی تصادفی (بین 1 تا 120 ثانیه) معرفی شده است. تنوع طعم زندگی است، پس از همه، و حتی کد نیاز به جاز کردن گاهی اوقات!

protected function handleException(Exception $exception)
{
    if ($this->halfOpen) {
        Cache::put('circuit:open', time(), 600);
        return $this->release(600);
    }
    if (!$failures = Cache::get('failures')) {
        Cache::put('failures', 1, 60);
    } else {
        Cache::increment('failures');
    }

    if (Cache::get('failures') > 10) {
        Cache::put('circuit:open', time(), 600);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر استثنایی رخ دهد (و اجازه دهید با آن روبرو شویم، استثناها برای بهترین ما اتفاق می افتد)، handleException روش مانند یک ابرقهرمان در شنل وارد عمل می شود. تعداد خرابی‌ها را در حافظه پنهان ما افزایش می‌دهد، اما پس از ده شکست، بمب بزرگ را رها می‌کند و مدار را باز می‌کند و از دل درد بیشتر (یا در این مورد، درد درخواست) برای یک دوره خنک‌کننده جلوگیری می‌کند.

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

protected function createZanibalAccount(CompleteKyc $event){
    //Your third party API
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در پایان، این کد چیزی بیش از انجام وظایف انجام می دهد. همچنین داستانی در مورد غلبه بر دشواری، بالا رفتن از شکست، و اطمینان از اینکه سیستم ما می تواند در برابر غیرقابل پیش بینی بودن استفاده از خدمات شخص ثالث مقاومت کند، می گوید. تشخیص می دهد که گاهی اوقات باید یک قدم به عقب برگردید، نفس خود را جمع کنید و تنها پس از آن به مبارزه برگردید، بسیار شبیه یک بوکسور سرسخت در رینگ.

بنابراین دفعه بعد که سرویس شخص ثالث شما تصمیم گرفت عصبانی شود، نترسید! فقط کلید مدار قابل اعتماد خود را بیرون بکشید و اجازه دهید کار سنگین را انجام دهد. فقط به یاد داشته باشید، همانطور که همیشه می گویم، “آرام باشید، کد را روشن کنید!”

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

کد نویسی مبارک، دوستان علاقه مند به لاراول!

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

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

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

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