Sobes.tech
Middle

რა არის gRPC?

sobes.tech AI

პასუხი AI-სგან

gRPC — ეს მაღალი შესრულების, ღია კოდის RPC (Remote Procedure Call) ჩარჩო, რომელიც შექმნილია Google-ის მიერ, გავრცელებული პროგრამებისა და მიკროსერვისების შესაქმნელად. იგი დაფუძნებულია HTTP/2 პროტოკოლზე და იყენებს Protocol Buffers (Protobuf) როგორც ინტერფეისის აღწერის ენა და სერილიზაციის მექანიზმი:

gRPC-ის ძირითადი მახასიათებლები:

  • HTTP/2: იყენებს HTTP/2-ის უპირატესობებს, როგორიცაა მოთხოვნების მულტიპლექსირება, სათაურების კომპრესი და ორიენტირებული ნაკადების გადაცემა, რაც უზრუნველყოფს უფრო მაღალი ეფექტურობა, ვიდრე ჩვეულებრივი კლიენტი-სერვერი პროტოკოლები HTTP/1.1-ზე:
  • Protocol Buffers (Protobuf): მონაცემების აღწერის ენა, რომელიც საშუალებას აძლევს მონაცემების სტრუქტურირებას და კოდის გენერირებას სერილიზაციის და დესერილიზაციისთვის სხვადასხვა ენებზე. Protobuf ეფექტურია ზომისა და სიჩქარის მხრივ:
  • ნაკადიანი გადაცემა (Streaming): მხარს უჭერს ოთხ ტიპის ნაკადიან გადაცემას:
    • Unary: კლასიკური RPC (ერთი მოთხოვნა - ერთი პასუხი):
    • Server-side Streaming: კლიენტი აგზავნის მოთხოვნას, სერვერი პასუხობს ნაკადით:
    • Client-side Streaming: კლიენტი აგზავნის ნაკადს, სერვერი პასუხობს ერთ შეტყობინებას:
    • Bidirectional Streaming: კლიენტი და სერვერი ერთდროულად ცვლიან შეტყობინების ნაკადებს:
  • მრავალენოვანი: Protobuf-ის საშუალებით gRPC ქმნის კლიენტის და სერვერის კოდს მრავალი პროგრამირების ენისთვის:
  • კოდების გენერირება: ავტომატურად ქმნის კოდს .proto ფაილზე დაფუძნებით, რაც ამცირებს ხელით კოდირებას:
  • მეტადანატები: მხარს უჭერს მეტადანატების გადაცემას (საკვანძო-ფასი წყვილები) მოთხოვნებთან და პასუხებთან ერთად:
  • ინტერფეისები (Interceptors): შესაძლებლობაა ჩარევის მოთხოვნებსა და პასუხებში დამატებითი ლოგიკის შესასრულებლად (მაგალითად, ლოგირება, ავტორიზაცია):

როგორ მუშაობს gRPC:

  1. სერვისის API განსაზღვრა Protocol Buffers ენაზე .proto ფაილში:
  2. გენერირება ხდება კლიენტის და სერვერის კოდი საჭირო ენაზე protoc კომპილატორით:
  3. სერვერი ახორციელებს გენერირებულ სერვისის ინტერფეისს:
  4. კლიენტი იყენებს გენერირებულ კოდს სერვისის მეთოდების დასახმარებლად სერვერზე:

proto ფაილის მაგალითი:

syntax = "proto3";

package greeting;

// სერვისის განსაზღვრა
service Greeter {
  // უნარიანი RPC მეთოდი
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // სერვერული ნაკადი
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// შეტყობინებების განსაზღვრა
message HelloRequest {
  string name = 1; // ველის ნომერი 1
}

message HelloReply {
  string message = 1;
}

შედარება REST-თან (JSON/XML გამოყენებით):

მახასიათებელი gRPC (Protobuf) REST (JSON/XML)
ტრანსპორტის პროტოკოლი HTTP/2 HTTP/1.1 ან HTTP/2
მონაცემების სერილიზაცია Protobuf (ბინარული) JSON, XML (ტექსტური)
შედეგადიანობა მაღალი (ბინარული ფორმატი, HTTP/2) დაბალი (ტექსტური ფორმატი, დამატებითი ხარჯები)
API აღწერის ენა Protocol Buffers (.proto ფაილები) OpenAPI/Swagger
API კონტრაქტი მკაცრი, Protobuf-ზე დაფუძნებული ნაკლებად მკაცრი
მონაცემთა ტიპიზაცია მკაცრი (განსაზღვრული .proto-ში) სუსტი (მოწოდების დროს შემოწმება)
კოდების გენერაცია ინტერნალური (სტანდარტული) საჭიროებს მესამე მხარის ინსტრუმენტებს
ნაკადიანი გადაცემა ინტერნალური (სტანდარტული) საჭიროებს დამატებით მექანიზმებს (მაგალითად, WebSockets)
კითხულობა რთული without .proto ადვილი ადამიანისთვის კითხვა

gRPC კარგად გამოიყენება მერვე სერვისის ურთიერთქმედებისთვის გავრცელებულ სისტემებში, მიკროსერვისებში, დიდი მონაცემების გადაცემაში, სადაც მნიშვნელოვანია ეფექტურობა და მკაცრი API კონტრაქტი.