دسته بندی های مختلف در gRPC

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/02/15
  • تعداد بازدید: 25

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

۱. Unary RPC
در این مدل، کلاینت یک درخواست واحد به سرور ارسال می‌کند و یک پاسخ واحد دریافت می‌کند. این ساده‌ترین و رایج‌ترین نوع RPC است و معادل فراخوانی یک تابع عادی با پارامتر ورودی و خروجی مشخص در نظر گرفته می‌شود.

rpc GetUser (UserRequest) returns (UserResponse);

کاربردها:

  • دریافت اطلاعات یک شیء خاص

  • ارسال یک فرم و دریافت نتیجه

  • اعتبارسنجی داده‌ها

ویژگی‌ها:

  • ساده‌ترین مدل پیاده‌سازی

  • پشتیبانی گسترده در بیشتر زبان‌ها و فریم‌ورک‌ها

۲. Server Streaming RPC
در این مدل، کلاینت یک درخواست به سرور ارسال می‌کند، ولی سرور چندین پیام در پاسخ ارسال می‌کند. این مدل برای سناریوهایی کاربرد دارد که داده‌های حجیم یا پیوسته باید در چند بخش به کلاینت برسند.

rpc ListUsers (Empty) returns (stream UserResponse);

کاربردها:

  • استریم لیست کاربران، لاگ‌ها، یا تراکنش‌ها

  • ارسال اطلاعات پیوسته (مثلاً وضعیت سنسورها)

  • گزارش‌گیری مرحله‌ای یا زنده

ویژگی‌ها:

  • کلاینت منتظر تمام پیام‌ها می‌ماند یا می‌تواند به‌صورت غیرهمزمان بخواند

  • سرور می‌تواند ارسال داده را در طول زمان انجام دهد

۳. Client Streaming RPC
در این مدل، کلاینت چندین پیام به سرور ارسال می‌کند و سپس یک پاسخ واحد دریافت می‌کند. سرور تا زمان اتمام استریم کلاینت منتظر می‌ماند و پس از پایان ارسال داده‌ها، یک پاسخ برمی‌گرداند.

rpc UploadUsers (stream UserRequest) returns (UploadStatus);

کاربردها:

  • ارسال دسته‌ای داده‌ها مانند لیست کاربران برای درج یا بروزرسانی

  • آپلود فایل به‌صورت قطعه‌قطعه

  • جمع‌آوری نتایج محاسبات از منابع مختلف

ویژگی‌ها:

  • کلاینت کنترل زمان و ترتیب ارسال داده‌ها را دارد

  • سرور فقط یک بار پاسخ می‌دهد

۴. Bidirectional Streaming RPC
در این مدل، هم کلاینت و هم سرور می‌توانند به‌طور همزمان چندین پیام ارسال و دریافت کنند. این مدل قدرتمندترین حالت ارتباط است و برای ارتباطات زنده و پویا استفاده می‌شود.

rpc Chat (stream ChatMessage) returns (stream ChatMessage);

کاربردها:

  • پیام‌رسانی زنده (real-time chat)

  • انتقال داده‌های سنسورها با پاسخ‌های لحظه‌ای

  • سیستم‌های هماهنگی بین چند نود

ویژگی‌ها:

  • دوطرفه و همزمان

  • می‌تواند کاملاً غیربلوک‌کننده باشد

  • نیازمند طراحی دقیق جریان کنترل پیام‌ها

مقایسه انواع RPC

نوع RPC ارسال کلاینت دریافت سرور مناسب برای
Unary یک پیام یک پیام فراخوانی‌های ساده و درخواست‌های فوری
Server Streaming یک پیام چند پیام گزارش‌ها، لیست‌ها، اطلاعات پیوسته
Client Streaming چند پیام یک پیام آپلود دسته‌ای داده یا جمع‌آوری ورودی‌ها
Bidirectional Streaming چند پیام چند پیام چت، ارتباط زنده، هماهنگی نودها

مثال ساده از سرور Bidirectional

def Chat(self, request_iterator, context):
    for message in request_iterator:
        yield ChatMessage(user="server", text="Echo: " + message.text)

جمع‌بندی

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

ثبت دیدگاه


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

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.