Middle
gRPC nima?
sobes.tech AI
AIdan javob
gRPC — bu Google tomonidan ishlab chiqilgan, taqsimlangan ilovalar va mikroservislar yaratish uchun mo‘ljallangan yuqori samarali, ochiq manbali RPC (Remote Procedure Call) ramkasi. U transport uchun HTTP/2 protokolidan foydalanadi va interfeys ta’riflash tili va serializatsiya mexanizmi sifatida Protocol Buffers (Protobuf) dan foydalanadi.
gRPC ning asosiy xususiyatlari:
- HTTP/2: So‘rovlarni multiplex qilish, sarlavha siqishni va ikki tomonlama oqim kabi HTTP/2 afzalliklaridan foydalanadi, bu esa oddiy klient-server protokollariga nisbatan yuqori samaradorlikni ta’minlaydi.
- Protocol Buffers (Protobuf): Ma’lumotlarni tuzishga va turli tillarda serializatsiya va deserializatsiya qilish uchun kod ishlab chiqarishga imkon beradigan ma’lumot ta’riflash tili. Protobuf xabar hajmi va ishlov berish tezligi bo‘yicha samarali.
- Oqim (Streaming): To‘rt turdagi oqimlarni qo‘llab-quvvatlaydi:
- Unary: Klassik RPC (bir so‘rov — bir javob).
- Server tomonidagi oqim: Mijoz so‘rov yuboradi, server oqim bilan javob beradi.
- Mijoz tomonidagi oqim: Mijoz oqim bilan xabar yuboradi, server bitta xabar bilan javob beradi.
- Ikki tomonlama oqim: Mijoz va server bir vaqtning o‘zida xabar oqimlarini almashadi.
- Ko‘p tillilik: Protobuf yordamida gRPC ko‘p tillarda mijoz va server kodini ishlab chiqaradi.
- Kod generatsiyasi:
.protofaylga asoslangan avtomatik kod yaratish, bu esa qo‘lda yozishni kamaytiradi. - Metama’lumotlar: So‘rovlar va javoblar bilan birga kalit-qiymat juftlari sifatida metama’lumotlarni uzatishni qo‘llab-quvvatlaydi.
- Interceptors: Qo‘shimcha mantiq bajarish uchun so‘rovlar va javoblarni ushlash imkoniyati (masalan, loglash, autentifikatsiya).
gRPC qanday ishlaydi:
- API xizmati
.protofaylida Protocol Buffers tilida ta’riflanadi. protockompilyatori yordamida kerakli til uchun mijoz va server kodlari ishlab chiqariladi.- Server ishlab chiqilgan xizmat interfeysini amalga oshiradi.
- Mijoz ishlab chiqarilgan koddan foydalanib, serverdagi xizmat metodlarini chaqiradi.
.proto fayl uchun misol:
syntax = "proto3";
package greeting;
// Xizmat ta’riflanishi
service Greeter {
// Birlik RPC metodi
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Server tomonidagi oqim metodi
rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}
// Xabarlar ta’riflanishi
message HelloRequest {
string name = 1; // 1 raqamli maydon
}
message HelloReply {
string message = 1;
}
REST bilan taqqoslash (JSON/XML ishlatadigan):
| Xususiyat | gRPC (Protobuf) | REST (JSON/XML) |
|---|---|---|
| Transport protokoli | HTTP/2 | HTTP/1.1 yoki HTTP/2 |
| Ma’lumotlarni serializatsiya qilish | Protobuf (ikili) | JSON, XML (matn) |
| Samaradorlik | Yuqori (ikili format, HTTP/2) | Pastroq (matn format, ortiqcha yuk) |
| API ta’riflash tili | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| API shartnoma | Qattiq, Protobuf asosida | Kamroq qat’iy |
| Ma’lumot tiplash | Qattiq ( .proto da belgilangan) |
Zaif (ishga tushirish vaqti tekshirish) |
| Kod generatsiyasi | Ichki | Tashqi vositalar talab qilinadi |
| Oqim | Ichki | Qo‘shimcha mexanizmlar talab qilinadi (masalan, WebSockets) |
| O‘qilishi | .proto bo‘lmasdan o‘qish qiyin |
Odamlar uchun oson o‘qiladi |
gRPC, tarqatilgan tizimlar, mikroservislar, katta hajmdagi ma’lumotlarni uzatishda, yuqori samaradorlik va qat’iy API shartnomasi muhim bo‘lsa, juda mos keladi.