اینجا gRPC رو بهتر درک کن :)
در قدم اول، برای درک بهتر یک مثال میزنیم.
فکر کنید در حال ساخت یک برنامه شبیه اسنپ هستین، که دارای دو سرویس مختلف هست: یکی برنامه ای برای مسافر ها که با Go نوشته شده، و دیگری برنامه ای برای راننده ها که در Node.js نوشته شده. هر دو سرویس نیاز به تبادل اطلاعات در مورد درخواستهای مسافرها ، در دسترس بودن راننده و بهروزرسانیهای وضعیت مسافر دارن. اینجاست که باید از gRPC استفاده کنیم.
اپلیکیشن مسافرها به یک سرویس gRPC این اجازه رو میده، تا درخواست های هر مسافر رو قبول کنه، و بروزرسانی وضعیت درخواست هارو دریافت کنه. در سمت راننده، برنامه راننده دارای یک stub تولید شده هست، که همون کاره سرور رو ارائه میده. کده بافرهای پروتکل نیز به طور خودکار این stub مشتری رو تولید می کنه. هنگامی که اپلیکیشن راننده متدی رو در قسمت stub فراخوانی میکنه، چارچوب gRPC جزئیات سریالسازی پارامترهای ورودی رو در قالب باینری, و ارسالشون رو از طریق شبکه به سرور انجام میده.
با استفاده از gRPC، هر دو سرویس میتونن با وجود اینکه به زبان های برنامه نویسی مختلف نوشته شدن و در محیط های مختلف اجرا میشن، به طور یکپارچه باهم ارتباط برقرار کنن.
چهار روش تعریف شده توسط gRPC چیه؟
به صورت کلی gRPC چهار روش مختلف برای فراخوانی متد ها از راه دور (RPC) بین کلاینت و سرور استفاده میکنه. این روش ها نشون دهنده الگوهای ارتباطی اساسی بین کلاینت ها و سرورها هستن:
یگانه یا (unary) RPC: در یک RPC unary، کلاینت یک درخواست رو به سرور ارسال میکنه و منتظر یک پاسخ میمونه. این الگوی ارتباطی یک به یک ساده ترین شکل RPCهست و شبیه درخواست های سنتی HTTP هست.
استریم سرور: در یک سرور RPC استریمینگ، کلاینت یک درخواست واحد رو به سرور ارسال می کنه و در ازای آن جریانی از پاسخ ها رو دریافت می کنه.
استریم کلاینت : در کلاینت استریم RPC، کلاینت جریانی از درخواست ها را به سرور ارسال می کند و منتظر یک پاسخ می ماند. این روش زمانی مفید است که کلاینت نیاز به ارسال یک سری داده به سرور دارد و سرور پس از پردازش کل جریان درخواست ها پاسخ می دهد.
استریم دوطرفه (Bidirectional streaming ): در یک جریان دوطرفه RPC، کلاینت و سرور میتونن جریانی از پیام ها و به طور همزمان برای یکدیگر ارسال کنن. این امکان برقراری ارتباط real time بین کلاینت و سرور رو با امکان ارسال و دریافت پیام در صورت نیاز فراهم میکنه.
مزایای gRPC چیه؟
کارایی : همونطور که گفتم Protobuf دادهها را به صورت سریالی در قالب باینری تبدیل میکنه، که حجم انتقال داده و زمان پردازش را کاهش میده.
زبانه آگنوستیک (Language-agnosticism) : gRPC به توسعه دهندگان این امکان رو میده که به طور خودکار کد کلاینت و سرور را در چندین زبان برنامه نویسی تولید کنن.
تایپ قوی: Protobuf تایپ قوی رو اعمال میکنه، که ساختاری به خوبی تعریف شده و معتبر برای داده ها رو فراهم میکنه.
توسعه پذیری: با gRPC، میتونید فیلدها یا متد های جدیدی را به سرویس ها و پیام های خود بدون شکستن کد کلاینت موجود اضافه کنین.
تولید کد: کامپایلر Protobuf کد کلاینت و سرور را از فایلهای .proto تولید میکنه که تلاش دستی کدنویسی را کاهش میده و به اطمینان از ثبات و دقت کمک میکنه.
به صورت کلی مزایای زیادی داره که من برجسته ترین مزیت هاشو گفتم اما از gRPC کجاها میشه استفاده کرد؟
در چه مواردی از gRPC استفاده میشه؟
معماریهای میکروسرویس: در معماریهای مبتنی بر میکروسرویس، سرویسهای فردی ممکنه در زبانهای برنامهنویسی مجزا برای مطابقت با نیازهای خاص خود توسعه داده شن. علاوه بر این، ممکنه چندین کار به صورت همزمان نیاز داشته باشن و خدمات ممکنه با بارهای کاری متفاوتی مواجه بشن.
اپلیکیشن های استریم: پشتیبانی gRPC از الگوهای پخش چندگانه، سرویسها رو قادر میسازه تا دادهها رو به محض دردسترس شدن، به اشتراک بگذارن و پردازش کنن - بدون اینکه هزینهای برای ساخته مکرر اتصالات جدید داشته باشه. این باعث میشه که برای برنامههای چت و ویدیوی real-time، برنامههای بازی آنلاین، پلتفرمهای معاملات مالی و فیدهای داده زنده مناسب باشه.
ممکنه در در موارد دیگه ای هم استفاده بشه، من فقط چند تاشون رو گفتم و به صورت کلی این تکنولوژی از نظر من بسیار جذابه. همچنین برای برنامه نویس هایی که عاشق این هستن که از چند زبان مختلف استفاده کنن :))
در صورت تمایل برای درک بهتر، اول به داکیومنتش و سپس به مقالات زیر مراجعه کنید:
#grpc
@CodeModule