GRPC

این rpc این قابلیت را می دهد که توی computer خودمون یک سورسی رو داشته باشیم و حتی اون تو اجرا کنیم و حتی بتونیم این توابع رو از طریق یک کامپیوتر دیگه هم اجرا کنیمrpc is form of client-server communication that uses function call rather than usual http call.توی rpc, یک مفهومی داریم بنام IDL یا interface definition language که توش یکسری قائده و قانون برای توابعی که قراره توی این بستر تعریف و اجرا بشن درنظر میگیره مثل نام توابع یا پارامتر های ورودی و خروجیاین grpc توی میکروسرویس برای ارتباط سرویس ها باهم میتوانند استفاده شوندبحث پرفورمنس توی grpc به شدت خوب و قوی میباشدچرا پرفورمنس خوبی دارد ؟؟؟؟؟به دلیل استفاده از http/2 برای انجام درخواست هاتوی http/1 قابلیت ارسال چندین request یا دریافت چندین response توی یک http connection وجود ندارد یعنی از طریق یک connection نمیتونی چند تا response دریافت کنی یا حتی چند تا request ارسال کنی و باید به ازای هرکدوم یک connection ایجاد کنیو به این قابلیت میگن request/response multiplexing که توی http/2 از طریق لایه جدیدی بنام binary framing انجام میشودساختار http/1post : /uploadhost: www.google.comcontent-type: application/jsoncontent-length: 15{ "msg": "hello http 1" }ساختار http/2headers framesdata framesاین لایه binary frame این قابلیت رو میده که داده ها encapsulate و encode بشن درواقع request و response ها درقالب فریم ها دیده میشوندheader frame: all about http header datadata frame: body of the requestsBinary Framingیکی از چیزهای خیلی مهم توی http/2 اینکه اگر یک درخواست ارسال شود, بعد از مدتی یک درخواست دیگر ارسال شود , اطلاعات هدر دوم بررسی میشود و فقط چیزهای که جدید هستند رو نگه میدارن و اونایی که تکراری هستن و توی هدر درخواست های قبل بودن رو حذف میکنن , اینجوری هدر درخواست های ما به طرز عجیبی کم میشوند سایزشونrequest #2 method get scheme https host myhosty.com path /resoucesrequest #1method getscheme httpshost myhosty.compath /imageheader frames request #1method getscheme httpshost myhost.compath imageheader frames request #2path /resoucesIDL for Grpc ====== protobufتوی proto buffer داده ها و توابعی که قراره توی communication ازشون استفاده بشه تعریف و کانفیگ میکنند و درواقع proto buffer مثل یک لایه میانی می ماند که شامل یک قراردادی میباشد که کلاینت به چه شکل بتواند با سرور ارتباط بگیرد و توابع توی سرور را اجرا کندتوی restful api زمانی که میخاد یک داده ای رو ارسال کنه درقالب string ای از json میبینهتوی grpc درقالب binary ارسال میکنه که به شدت ساده و سبک میشهتوی http به اطلاعات توی یک درخواست که شامل آدرس یا http verb و اینا میشه میگن http headerتوی grpc همین اطلاعات درقالب key-value هستند که بهشون meta data میگناین streaming چیه ؟؟ وقتی توی یک connection چندین درخواست اتفاق بیوفتهserver streaming rpcکلاینت یک درخواست ارسال میکند و سرور درخواست را دریافت کرده و چندین پاسخ را ارسال میکند به عنوان مثال کلاینت یک درخواست میده برای گرفتن صفحات home page, سرور هر کدوم از اعضای صفحه رو به صورت جداگانه در یک response ارسال میکنه که به کلاینت قابلیت lazy loading میدهclient streaming rpcوقتی کلاینت چند درخواست ارسال کند ولی سرور یک پاسخ دهد به طور مثال کلاینت درقالب چندین ریکوئست داده هایی که میخاد آپلود کنه رو به صورت چانک میفرسته و بعد از اتمام آپلودشون یک پاسخ از سرور دریافت میکنندbidirectional streaming rpcهمه به هم پیام میدن بدون اینکه منتظر بموننGrpc Cancellationهر rpc یک observer داره که از طریقش میتونی عملیات cancellation رو انجام بدیtrpcیک ورژن از grpc که به صورت type safety هست و با typescript نوشته شده استیک type safe network communicationساختار فایل protopackage auth;این package قابلیت این رو بما میده که یجورایی ماژول بندی کنیم که conflict بین message هامون پیش نیاد چون ممکنه یک message بین دوتا فایل proto وجود داشته باشه اونوقت بین message ها یک conflict به وجود میاد message User {}ساختار پیام هامون رو از این طریق مشخص میکنیم که چه فیلد هایی با چه تایپ هایی دارنmessage User { int32 id = 1; string name = 2; bool isMarried = 3;}نحوه مشخص کردن ساختار دیتاها اون اعدادی که مشخص شده واسه serilization استفاده میشه چون مثلا اگر بخاد توسط code generator این فیلد رو تبدیل کنه , اینکه بیاد با اسم فیلد اینکارو انجام بده بیشتر وقت میگیره تا اینکه بیاد با براساس id هاشون اینکار رو انجام بده سرهمون این آیدی هارو مشخص میکنیم که بتونه از طریق id فیلد هارو پیدا کنه و تبدیل کنه