ویرگول
ورودثبت نام
cody proo
cody proo
cody proo
cody proo
خواندن ۴ دقیقه·۳ سال پیش

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/1

post : /upload
host: www.google.com
content-type: application/json
content-length: 15
{ "msg": "hello http 1" }

ساختار http/2

headers frames
data frames

این لایه binary frame این قابلیت رو میده که داده ها encapsulate و encode بشن درواقع request و response ها درقالب فریم ها دیده میشوند

header frame: all about http header data
data frame: body of the requests

Binary Framing

یکی از چیزهای خیلی مهم توی http/2 اینکه اگر یک درخواست ارسال شود, بعد از مدتی یک درخواست دیگر ارسال شود , اطلاعات هدر دوم بررسی میشود و فقط چیزهای که جدید هستند رو نگه میدارن و اونایی که تکراری هستن و توی هدر درخواست های قبل بودن رو حذف میکنن , اینجوری هدر درخواست های ما به طرز عجیبی کم میشوند سایزشون

request #2
method get
scheme https
host myhosty.com
path /resouces
request #1
method get
scheme https
host myhosty.com
path /image
header frames request #1
method get
scheme https
host myhost.com
path image
header frames request #2
path /resouces


IDL 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


ساختار فایل proto

package 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 فیلد هارو پیدا کنه و تبدیل کنه
۱
۰
cody proo
cody proo
شاید از این پست‌ها خوشتان بیاید