فصل سوم: ارتباط بین سرویس‌ها

ارتباط همگام با REST

ساده‌ترین راه: درخواست HTTP مستقیم

رایج‌ترین روش ارتباط بین دو سرویس، فراخوانی مستقیم یک API با پروتکل REST روی HTTP است. این روش همگام (Synchronous) است، یعنی سرویس فراخواننده منتظر پاسخ می‌ماند پیش از ادامه‌ی کار خودش:

import requests

def get_product(product_id):
    response = requests.get(
        f"http://catalog-service/api/products/{product_id}",
        timeout=2,
    )
    response.raise_for_status()
    return response.json()

مزیت REST سادگی، خوانایی و پشتیبانی گسترده در همه‌ی زبان‌ها و ابزارهاست. اما ارتباط همگام یک ریسک مهم دارد: اگر سرویس کاتالوگ کند یا از دسترس خارج شود، سرویس سفارش هم منتظر می‌ماند و ممکن است این تأخیر زنجیره‌وار به کل سیستم منتقل شود؛ به این پدیده Cascading Failure (شکست زنجیره‌ای) گفته می‌شود.

نکات عملی مهم

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

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