
بهتره قبل از اینکه بدونیم gRPC چیه بهتره اول راجب RPC صحبت کنیم.
RPC مخفف Remote Procedure Call هست و از سال ۱۹۷۰ به وجود آمده است. یه پروتکل واسه فراخوانی یک سرویس از یک برنامه داخل یک برنامه دیگر است. مثلا اگر ۲تا برنامه به نام A و B داشته باشیم, برنامه A می تواند یک متد(فانکشن) از برنامه B را فراخوانی کند و بلعکس.
اگر تاریخچه Distributed APIs را بررسی کنیم تکنولوژی های مختلفی را می بینیم که هر کدام در دوره خود محبوب بودند و در حال حاضر API نویسی را می توانیم به ۳ نوع تقسیم کنیم:
1-SOAP
2-REST
3-RPC
پروژه gRPC درواقع یک فریم ورک RPC است که بسیار سریع و قدرتمند است که توسط گوگل و همکاری چندتا کمپانی دیگر توسعه داده شده است( حرف g اول کلمه gRPC مخفف Google است).
پروژه gRPC برای سریالیز کردن پیام ها و رد و بدل کردن آنها از ProtocolBufferاستفاده میکند. فرمت دیتاها در ProtocolBuffer به صورت باینری می باشد که باعث می شود حجم دیتاها کاهش یابد و در نتیجه ترافیک کمتری مصرف شود.
ویژگی های کلیدی gRPC :
-ارتباط باینری
-ارتباط بر پایه قرارداد
-امن بودن به صورت پیش فرض(الزام به استفاده از HTTP/2)
- امکان استریم کردن در Client و Server
آیا با به وجود آمدن gRPC به این معنی است که REST دیگر استفاده نخواهد شد؟
با وجود ویژگی های خیلی خوب gRPC نظیر سرعت-امنیت-استریم و... نقاط ضعفی هم دارد مانند اینکه به علت استفاده پیش فرض از HTTP/2 خیلی از مرورگر ها به علت قدیمی بودن امکان ارتباط بر قرار کردن در این پروتکل را ندارند و همچنین به علت اینکه contract-based می باشد برای هر تغییر کوچکی باید هم client و هم server آپدیت شوند تا همچنان ارتباط برقرار بماند.
پس به این معنیه که جایگزین روش های دیگر API نویسی نمی شود.
می توانیم نتیجه بگیریم برای کاری که می خواهیم انجام بدهیم باید ابزار مناسب خود را پیدا کنیم.
مثلا می توان API نویسی را به این صورت دسته بندی کرد:
1-REST
مناسب عملیات های ساده CRUD و به طور کل وب اپ ها.
2-GraphQL
مناسب پروژه هایی که کوئری و دیتاست های زیادی دارد.
3-gRPC
مناسب پروژه هایی که منابع کم دارند یا نیاز به استریم کردن دارند و یا نیاز به سرعت و امنیت بیشتری دارند.
این پروتکل شما را به طول کامل از زبان مستقل میکند به عنوان مثال ارتباط برنامه ای به زبان c# را با برنامه ای به زبان Java به سادگی مهیا می کند.
از این رو بسیار مناسب معماری Microservice می باشد.
منابع:
استاد : دکتر مریم حاجی اسمعیلی. دکترای علوم کامپیوتر از دانشگاه کینگستون لندن
Dr.Maryam Hajiesmaeili
PhD of computer science from Kingston university of London