Skip to content

Latest commit

 

History

History
58 lines (36 loc) · 5.08 KB

Circuit Breaker Pattern - Uber.md

File metadata and controls

58 lines (36 loc) · 5.08 KB
github
true

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

حسین: سلام پیمان، مرسی که مشکل رو مطرح کردی. من فکر می‌کنم اینجا می‌تونیم از الگوی Circuit Breaker استفاده کنیم. این الگو به ما کمک می‌کنه تا وقتی که سرور به مشکل می‌خوره، به جای اینکه درخواست‌ها رو ادامه بدیم، به صورت موقت درخواست‌ها رو قطع کنیم تا سرور بتونه به حالت عادی برگرده. 🔗Circuit Breaker

مارال: حسین، می‌تونی بیشتر توضیح بدی که چطور این الگو کار می‌کنه؟ 🤓

حسین: بله، حتماً. Circuit Breaker به این صورت کار می‌کنه که وقتی تعداد مشخصی از درخواست‌ها با خطا مواجه می‌شن، مدار رو قطع می‌کنه و دیگه درخواست‌های جدید رو به سرور نمی‌فرسته. در عوض، یه پیام خطا به کاربر برمی‌گردونه. بعد از یه مدت زمان مشخص، دوباره مدار رو باز می‌کنه تا ببینه آیا سرور به حالت عادی برگشته یا نه. 🔗Circuit Breaker Pattern

ماهان: حسین، می‌تونی یه مثال توی کد بزنی که بهتر متوجه بشم؟ 😅

حسین: بله، حتماً. فرض کن یه تابع داریم که درخواست‌ها رو به سرور می‌فرسته. ما می‌تونیم از یه کتابخونه مثل pybreaker استفاده کنیم. این یه مثال ساده از استفاده از Circuit Breaker هست:

import pybreaker
import requests

# تعریف Circuit Breaker
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=60)

@breaker
def call_server(url):
    response = requests.get(url)
    if response.status_code != 200:
        raise Exception("Server Error!")
    return response

try:
    response = call_server("http://example.com/api")
    print(response.json())
except pybreaker.CircuitBreakerError:
    print("Circuit Breaker فعال شده، لطفاً بعداً دوباره امتحان کنید.")

🔗pybreaker

پیمان: این خیلی خوبه حسین، ولی چطور می‌تونیم مطمئن بشیم که این راه‌حل توی محیط واقعی هم کار می‌کنه؟ 🤔

حسین: سوال خوبی پرسیدی پیمان. ما باید این رو توی محیط تست و استیجینگ امتحان کنیم و ببینیم که چطور عمل می‌کنه. همچنین باید لاگ‌ها رو بررسی کنیم تا مطمئن بشیم که Circuit Breaker به درستی فعال می‌شه و درخواست‌ها رو مدیریت می‌کنه. 🔗Testing Circuit Breaker


پیمان کنجکاوتر میشه:

پیمان: این مفهوم توی رشته مهندسی برق هم هست؟ 🤔

حسین: بله پیمان، دقیقاً همینطوره. در واقع، ایده Circuit Breaker از مهندسی برق گرفته شده. توی مهندسی برق، Circuit Breaker یه دستگاه حفاظتیه که وقتی جریان برق از حد مجاز بیشتر می‌شه، مدار رو قطع می‌کنه تا از آسیب به تجهیزات جلوگیری کنه. توی نرم‌افزار هم همین مفهوم رو داریم، فقط به جای جریان برق، با درخواست‌های شبکه سر و کار داریم. 🔗Circuit Breaker in Electrical Engineering

مارال: دقیقاً حسین، این یکی از مثال‌های خوبیه که نشون می‌ده چطور مفاهیم از یک رشته به رشته دیگه منتقل می‌شن و کاربرد دارن. 😊

ماهان: خیلی جالبه! من همیشه فکر می‌کردم این مفاهیم فقط توی نرم‌افزار هستن. 🤯

حسین: بله ماهان، خیلی از الگوها و مفاهیم توی مهندسی نرم‌افزار از رشته‌های دیگه مثل مهندسی برق، مکانیک و حتی مدیریت گرفته شدن. این نشون می‌ده که چقدر رشته‌های مختلف می‌تونن از همدیگه یاد بگیرن.