O'zbek

Google'ning yuqori unumli RPC freymvorki bo'lgan gRPC bilan tanishing. Uning afzalliklari, arxitekturasi va global miqyosda masshtablanuvchi mikroxizmatlarni quvvatlantirishini o'rganing.

gRPC: Zamonaviy taqsimlangan tizimlar uchun yuqori unumdorlikdagi, kross-platformali aloqani ochish

Taqsimlangan tizimlar shiddat bilan rivojlanayotgan bir sharoitda xizmatlar oʻrtasidagi samarali va ishonchli aloqa eng muhim omil hisoblanadi. Dunyo boʻylab tashkilotlar mikroxizmatlar arxitekturasi va bulutli texnologiyalarga asoslangan yechimlarni joriy etar ekan, mustahkam, yuqori unumdorlikka ega Masofadan Protsedura Chaqiruvi (RPC) freymvorkiga boʻlgan ehtiyoj tobora ortib bormoqda. Aynan shu yerda Google tomonidan ishlab chiqilgan va xizmatlarning oʻzaro aloqasini inqilob qilgan, mislsiz tezlik, samaradorlik va tillararo moslashuvchanlikni taklif etuvchi zamonaviy, ochiq kodli RPC freymvorki – gRPC sahna yuziga chiqadi.

Ushbu keng qamrovli qoʻllanma gRPC ning tub mohiyatini, uning asosiy tamoyillari, xususiyatlari, amaliy qoʻllanilishini va nima uchun u dunyo boʻylab son-sanoqsiz yirik korxonalar uchun masshtablanuvchi, bardoshli tizimlarni qurishda afzal tanlovga aylanganini oʻrganadi. Agar siz yangi mikroxizmatlar platformasini loyihalayotgan arxitektor, xizmatlararo aloqani optimallashtirayotgan dasturchi yoki shunchaki taqsimlangan hisoblashning eng soʻnggi yutuqlariga qiziqayotgan boʻlsangiz, gRPC ni tushunish juda muhimdir.

gRPC nima? Masofadan Protsedura Chaqiruvlariga Chuqur Shoʻngʻish

Aslida, gRPC bu RPC freymvorkidir, yaʼni u biror dasturga boshqa manzil maydonida (odatda masofaviy kompyuterda) joylashgan protsedurani (quyi dastur yoki funksiyani) xuddi mahalliy protsedura chaqiruvi kabi bajarishga imkon beradi. Bu abstraksiya taqsimlangan dasturlashni sezilarli darajada soddalashtiradi va dasturchilarga tarmoq aloqasining murakkabliklaridan koʻra biznes mantiqiga eʼtibor qaratish imkonini beradi.

gRPC ni eski RPC tizimlari yoki anʼanaviy REST API laridan ajratib turadigan narsa uning zamonaviy asosidir:

Maʼlumotlarni seriyalash uchun Protobuf va transport uchun HTTP/2 ning bu kombinatsiyasi gRPC ning yuqori unumdorligi va oqimli uzatish (streaming) kabi murakkab aloqa shakllarini ajoyib qulaylik bilan boshqarish qobiliyatining asosini tashkil etadi.

gRPC ustunligining asosiy ustunlari

gRPC ning mukammalligi bir nechta fundamental komponentlarning sinergiyada ishlashidan kelib chiqadi:

Protocol Buffers: Samarali maʼlumotlarni seriyalash

Protocol Buffers bu Google tomonidan ishlab chiqilgan, tilga va platformaga bogʻliq boʻlmagan, strukturaviy maʼlumotlarni seriyalash uchun kengaytiriladigan mexanizmdir – buni XML yoki JSON kabi tasavvur qiling, faqat kichikroq, tezroq va soddaroq. Siz maʼlumotlar tuzilmasini bir marta Protocol Buffer tilidan foydalanib (.proto faylida) aniqlaysiz, soʻngra yaratilgan manba kodidan foydalanib, turli tillarda turli xil maʼlumotlar oqimlariga strukturaviy maʼlumotlarni osonlikcha yozishingiz va oʻqishingiz mumkin.

Afzalliklarini koʻrib chiqing:

Protocol Buffers ning samaradorligi asosiy farqlovchi omil boʻlib, gRPC ni dunyo boʻylab yuqori hajmli, past kechikishli aloqa ehtiyojlari uchun ideal tanlovga aylantiradi.

HTTP/2: Yuqori unumdorlik asosi

HTTP/2 bu shunchaki HTTP/1.x ga qoʻshimcha yangilanish emas; bu oʻzidan oldingi versiyaning cheklovlarini, ayniqsa yuqori darajada bir vaqtning oʻzida va real vaqtda aloqa stsenariylarida hal qilish uchun moʻljallangan toʻliq qayta qurishdir. gRPC oʻzining yuqori unumdorligiga erishish uchun HTTP/2 ning ilgʻor xususiyatlaridan foydalanadi:

HTTP/2 asosida qurilgan holda, gRPC doimiy ulanishlarni saqlab turishi, ulanish bilan bogʻliq ortiqcha yuklarni kamaytirishi va tezroq, samaraliroq maʼlumotlar uzatishni taʼminlashi mumkin, bu esa keng geografik masofalarda ishlaydigan taqsimlangan tizimlar uchun hayotiy ahamiyatga ega.

Xizmatni belgilash tili (IDL): Shartnomalar va izchillik

.proto fayli gRPC ning interfeysni belgilash tili (IDL) vazifasini bajaradi. Bu gRPC ning muhim jihati, chunki u mijoz va server oʻrtasidagi aniq shartnomani belgilaydi. Bu shartnoma quyidagilarni aniqlaydi:

Masalan, oddiy salomlashish xizmati quyidagicha belgilanishi mumkin:

syntax = "proto3"; package greeter; message HelloRequest { string name = 1; } message HelloReply { string message = 1; } service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} }

Bu qatʼiy, tilga bogʻliq boʻlmagan shartnoma turli vaqt zonalarida turli dasturlash tillarida turli jamoalar tomonidan ishlab chiqilgan xizmatlarning uzluksiz va toʻgʻri muloqot qilishini taʼminlaydi. Shartnomadan har qanday chetga chiqish kod generatsiyasi yoki kompilyatsiya paytida darhol maʼlum boʻladi, bu esa izchillikni oshiradi va integratsiya muammolarini kamaytiradi.

Asosiy xususiyatlar va afzalliklar: Nima uchun gRPC ajralib turadi

Oʻzining asosiy ustunlaridan tashqari, gRPC zamonaviy ilovalar ishlab chiqish uchun uni jozibador tanlovga aylantiradigan bir qator xususiyatlarni taklif etadi:

Unumdorlik va samaradorlik

Takroran taʼkidlanganidek, gRPC ning ikkilik seriyalash (Protobuf) va HTTP/2 transporti JSON dan foydalanadigan anʼanaviy HTTP/1.x REST API lariga qaraganda ancha past kechikish va yuqori oʻtkazuvchanlikka olib keladi. Bu foydalanuvchilar uchun tezroq javob vaqtini, resurslardan samaraliroq foydalanishni (kamroq CPU, xotira va tarmoqdan foydalanish) va koʻproq soʻrovlarni bajarish qobiliyatini anglatadi, bu esa yuqori trafikli global xizmatlar uchun juda muhimdir.

Tildan mustaqillik

gRPC ning kross-platformaliligi uning global auditoriya uchun eng jozibali afzalliklaridan biridir. U C++, Java, Python, Go, Node.js, C#, Ruby, PHP, Dart va boshqa koʻplab dasturlash tillari uchun kod generatsiyasini qoʻllab-quvvatlaydi. Bu shuni anglatadiki, murakkab tizimning turli komponentlari oʻz vazifalari uchun eng mos tilda yozilishi va shu bilan birga gRPC orqali uzluksiz muloqot qilishi mumkin. Bu koʻp tilli qobiliyat turli xil dasturchilar jamoalariga oʻzaro muvofiqlikni yoʻqotmasdan oʻzlari afzal koʻrgan vositalarni tanlash imkonini beradi.

Ikki tomonlama oqimli uzatish

gRPC anʼanaviy soʻrov-javob modeli bilan cheklanmaydi. U tabiiy ravishda toʻrt turdagi RPC oʻzaro taʼsirlarini qoʻllab-quvvatlaydi:

Bu moslashuvchan oqimli uzatish imkoniyatlari anʼanaviy soʻrov-javob paradigmalari bilan amalga oshirish qiyin yoki samarasiz boʻlgan yuqori darajada dinamik va sezgir ilovalarni yaratish uchun yangi imkoniyatlar ochadi.

Oʻrnatilgan kod generatsiyasi

.proto fayllaridan mijoz va server stub kodining avtomatik generatsiyasi rivojlanishni sezilarli darajada tezlashtiradi. Dasturchilar tarmoq seriyalash/deseriyalash mantiqini yoki xizmat interfeyslarini qoʻlda yozishlari shart emas. Bu standartlashtirish inson xatosini kamaytiradi, tatbiqlar boʻyicha izchillikni taʼminlaydi va dasturchilarga dastur mantiqiga eʼtibor qaratish imkonini beradi.

Yukni muvozanatlash va kuzatuvni qoʻllab-quvvatlash

gRPC taqsimlangan tizimlarni hisobga olgan holda ishlab chiqilgan. U HTTP/2 ni tushunadigan zamonaviy yuk muvozanatlagichlari va xizmatlar tarmoqlari (Istio, Linkerd, Consul Connect kabi) bilan yaxshi integratsiyalashadi. Bu ilgʻor trafik boshqaruvi, marshrutlash va chidamlilik modellarini osonlashtiradi. Bundan tashqari, gRPC ning tutib oluvchi (interceptor) mexanizmi murakkab mikroxizmatlar muhitida keng qamrovli kuzatuvchanlik va nosozliklarni tuzatish uchun taqsimlangan kuzatuv tizimlari (masalan, OpenTelemetry, Jaeger, Zipkin) bilan oson integratsiyani taʼminlaydi.

Xavfsizlik

gRPC plaginli autentifikatsiya mexanizmlari uchun oʻrnatilgan qoʻllab-quvvatlashni taʼminlaydi. U koʻpincha maʼlumotlarni uzatish paytida xavfsizligini taʼminlash uchun uchdan-uchgacha shifrlash uchun Transport Layer Security (TLS/SSL) dan foydalanadi. Bu, foydalanuvchilari yoki xizmatlari global miqyosda qayerda joylashganligidan qatʼi nazar, maxfiy maʼlumotlar bilan ishlaydigan har qanday dastur uchun muhim xususiyatdir.

Kuzatuvchanlik

Oʻzining tutib oluvchi quvuri (interceptor pipeline) orqali gRPC dasturchilarga asosiy biznes mantiqini oʻzgartirmasdan jurnal yozish, monitoring, autentifikatsiya va xatolarni qayta ishlash kabi kesib oʻtuvchi muammolarni osongina qoʻshish imkonini beradi. Bu modullilik toza kodni targʻib qiladi va mustahkam operatsion amaliyotlarni amalga oshirishni osonlashtiradi.

gRPC aloqa modellari: soʻrov-javobdan tashqari

gRPC ning toʻliq salohiyatidan foydalanish uchun toʻrtta asosiy aloqa modelini tushunish juda muhimdir:

Unar RPC

Bu anʼanaviy funksiya chaqiruviga oʻxshash RPC ning eng oddiy va eng keng tarqalgan shakli. Mijoz serverga bitta soʻrov xabarini yuboradi va server bitta javob xabari bilan javob beradi. Bu model, diskret kirish diskret chiqishni beradigan operatsiyalar uchun mos keladi, masalan, foydalanuvchi profili maʼlumotlarini olish yoki tranzaktsiyani yuborish. Bu koʻpincha REST dan gRPC ga oʻtayotganda dasturchilar duch keladigan birinchi modeldir.

Server oqimli RPC

Server oqimli RPC da mijoz bitta soʻrov xabarini yuboradi va server bir qator xabarlar yuborish orqali javob beradi. Barcha xabarlarini yuborganidan soʻng, server tugaganligini bildiradi. Ushbu model mijoz dastlabki soʻrov asosida doimiy yangilanishlar yoki maʼlumotlar oqimini olishi kerak boʻlgan stsenariylar uchun juda samarali. Misollar:

Mijoz oqimli RPC

Mijoz oqimli RPC da mijoz serverga bir qator xabarlar yuboradi. Mijoz oʻz xabarlarini yuborib boʻlgach, server bitta xabar bilan javob beradi. Bu model server bitta natija ishlab chiqarishdan oldin mijozdan bir qator kirishlarni jamlashi yoki qayta ishlashi kerak boʻlganda foydalidir. Amaliy qoʻllanmalar quyidagilarni oʻz ichiga oladi:

Ikki tomonlama oqimli RPC

Bu eng moslashuvchan aloqa modeli boʻlib, unda mijoz ham, server ham oʻqish-yozish oqimidan foydalanib bir-biriga xabarlar ketma-ketligini yuboradi. Ikki oqim mustaqil ishlaydi, shuning uchun mijozlar va serverlar istalgan tartibda oʻqishi va yozishi mumkin, bu esa yuqori interaktiv, real vaqtda aloqani taʼminlaydi. Har bir oqim ichidagi xabarlar tartibi saqlanadi. Foydalanish holatlari quyidagilarni oʻz ichiga oladi:

Bu turli xil oqimli modellar dasturchilarga anʼanaviy HTTP/1.x asosidagi API lar bilan erishish qiyin va samarasiz boʻlgan murakkab, real vaqtda oʻzaro taʼsirlarni yaratish imkonini beradi.

Amaliy qoʻllash holatlari: gRPC global miqyosda qayerda yorqin namoyon boʻladi

gRPC ning imkoniyatlari uni keng doiradagi ilovalar uchun, ayniqsa taqsimlangan va bulutli texnologiyalarga asoslangan muhitlarda mos kelishini taʼminlaydi:

Ushbu misollar gRPC ning koʻp qirraliligini va sanoat va geografik miqyoslar spektrida murakkab aloqa muammolarini hal qilish qobiliyatini namoyish etadi.

gRPC bilan ishlashni boshlash: Soddalashtirilgan qoʻllanma

gRPC ni qabul qilish bir nechta fundamental qadamlarni oʻz ichiga oladi, ular odatda barcha qoʻllab-quvvatlanadigan tillarda qoʻllaniladi:

1. Xizmatingizni .proto faylida aniqlang

Bu sizning gRPC ilovangizning tamal toshidir. Siz xizmat metodlarini va soʻrov/javob xabar tuzilmalarini Protocol Buffer IDL yordamida aniqlaysiz. Masalan, oddiy foydalanuvchini boshqarish xizmatida GetUser RPC metodi boʻlishi mumkin:

// users.proto syntax = "proto3"; package users; message UserRequest { string user_id = 1; } message UserReply { string user_id = 1; string name = 2; string email = 3; } service UserManager { rpc GetUser (UserRequest) returns (UserReply) {} // CreateUser, UpdateUser, DeleteUser va hokazolar uchun koʻproq metodlar qoʻshing. }

2. Kod generatsiya qiling

.proto faylingiz aniqlangandan soʻng, siz Protocol Buffer kompilyatoridan (protoc) va oʻzingizning maʼlum bir tilingiz (yoki tillaringiz) uchun gRPC plaginlaridan foydalanib, zarur mijoz va server kodini generatsiya qilasiz. Bu generatsiya qilingan kod xabar sinflari va xizmat interfeyslarini (mijoz uchun stublar va server amalga oshirishi uchun mavhum sinflar/interfeyslar) oʻz ichiga oladi.

Masalan, Go kodini generatsiya qilish uchun:

protoc --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ users.proto

Java, Python, C++, Node.js va boshqa tillar uchun shunga oʻxshash buyruqlar mavjud boʻlib, ular toʻgʻridan-toʻgʻri sizning .proto taʼriflaringizga mos keladigan tilga xos interfeyslar va maʼlumotlar tuzilmalarini yaratadi.

3. Serverni amalga oshiring

Server tomonida siz generatsiya qilingan xizmat interfeysini amalga oshirasiz. Bu sizning .proto faylingizda belgilangan har bir RPC metodi uchun haqiqiy biznes mantiqini yozishni oʻz ichiga oladi. Keyin siz kiruvchi soʻrovlarni tinglash uchun gRPC serverini oʻrnatasiz va oʻz xizmat ilovangizni unga roʻyxatdan oʻtkazasiz. Server asosiy HTTP/2 aloqasini, Protobuf seriyalash/deseriyalashni va metod chaqiruvini boshqaradi.

4. Mijozni amalga oshiring

Mijoz tomonida siz serverga RPC chaqiruvlarini amalga oshirish uchun generatsiya qilingan mijoz stubidan (yoki mijoz proksisidan) foydalanasiz. Siz serverning manzili va portini belgilab, gRPC kanalini yaratasiz va keyin masofaviy metodlarni chaqirish uchun mijoz stubidan foydalanasiz. Mijoz stubi sizning soʻrov maʼlumotlaringizni Protocol Buffersga aylantirish, uni HTTP/2 orqali tarmoqqa yuborish va serverning javobini deseriyalash bilan shugʻullanadi.

Kod generatsiyasi va aniq shartnomalar bilan taʼminlangan bu soddalashtirilgan ish jarayoni gRPC ni ishlab chiqishni turli dasturlash tillari va dasturchilar jamoalari boʻylab samarali va izchil qiladi.

gRPC va REST: Qachon qaysi birini tanlash kerak?

gRPC sezilarli afzalliklarni taqdim etsa-da, u REST uchun universal oʻrinbosar emas. Har birining oʻz kuchli tomonlari bor va tanlov koʻpincha maxsus foydalanish holati va kontekstga bogʻliq:

REST ning kuchli tomonlari:

gRPC ning kuchli tomonlari:

Qaror qabul qilish matritsasi:

Koʻpgina zamonaviy arxitekturalar gibrid yondashuvni qoʻllaydi, ichki xizmatdan xizmatga aloqa uchun gRPC dan va ommaviy mijozlarga taqdim etiladigan tashqi API lar uchun REST dan foydalanadi. Bu strategiya har ikki freymvorkning kuchli tomonlaridan foydalanadi, ichki unumdorlikni optimallashtiradi va tashqarida keng qamrovli mavjudlikni saqlaydi.

Arxitekturangizda gRPC ni qabul qilish uchun eng yaxshi amaliyotlar

gRPC afzalliklarini maksimal darajada oshirish va silliq rivojlanish hamda operatsion tajribani taʼminlash uchun ushbu eng yaxshi amaliyotlarni koʻrib chiqing:

  1. Aniq va barqaror .proto shartnomalarini loyihalang: Sizning .proto fayllaringiz gRPC xizmatlaringizning poydevoridir. Aniq, semantik va yaxshi versiyalangan API larni loyihalashga vaqt ajrating. Biror maydon ishlatila boshlaganidan keyin, uning maydon raqamini yoki turini oʻzgartirishdan saqlaning. Eskirgan maydonlarning tasodifiy qayta ishlatilishini oldini olish uchun zaxiralangan maydon raqamlaridan foydalaning.
  2. API laringizni versiyalang: Rivojlanayotgan xizmatlar uchun API versiyalash strategiyalarini amalga oshiring (masalan, paket nomlariga yoki fayl yoʻllariga v1, v2 qoʻshish). Bu mijozlarga oʻz tezligida yangilanish imkonini beradi va buzuvchi oʻzgarishlarning oldini oladi.
  3. Xatolarni chiroyli tarzda qayta ishlang: gRPC xatolarni yetkazish uchun status kodlaridan (google.rpc.Status xabari tomonidan belgilanadi) foydalanadi. Ham mijoz, ham server tomonida izchil xatolarni qayta ishlashni, shu jumladan toʻgʻri jurnal yozish va xato tafsilotlarini tarqatishni amalga oshiring.
  4. Kesib oʻtuvchi muammolar uchun tutib oluvchilardan foydalaning: Autentifikatsiya, avtorizatsiya, jurnal yozish, metrikalarni yigʻish va taqsimlangan kuzatuv kabi umumiy funksiyalarni amalga oshirish uchun gRPC tutib oluvchilaridan (middleware) foydalaning. Bu sizning biznes mantiqingizni toza saqlaydi va qayta foydalanishni ragʻbatlantiradi.
  5. Unumdorlik va kechikishni kuzatib boring: gRPC xizmatlaringiz uchun mustahkam monitoringni amalga oshiring. Soʻrovlar tezligi, kechikish, xatolar darajasi va ulanish statistikasini kuzatib boring. Prometheus, Grafana va taqsimlangan kuzatuv tizimlari kabi vositalar xizmat harakatini tushunish va toʻsiqlarni aniqlash uchun bebaho.
  6. Xizmatlar tarmogʻi integratsiyasini koʻrib chiqing: Murakkab mikroxizmatlar joylashtiruvlari uchun (ayniqsa Kubernetes da), xizmatlar tarmogʻi (masalan, Istio, Linkerd, Consul Connect) gRPC trafigi uchun avtomatik yukni muvozanatlash, trafikni yoʻnaltirish, zanjirni uzish, qayta urinishlar va oʻzaro TLS shifrlash kabi ilgʻor xususiyatlarni kod oʻzgartirishlarsiz taqdim etishi mumkin.
  7. Xavfsizlik eng muhim: Ishlab chiqarishdagi gRPC aloqasi uchun, hatto ichki tarmoqlarda ham, uzatilayotgan maʼlumotlarni shifrlash uchun har doim TLS/SSL dan foydalaning. Ilovangizning xavfsizlik talablariga mos keladigan autentifikatsiya va avtorizatsiya mexanizmlarini amalga oshiring.
  8. Ulanish boshqaruvini tushuning: gRPC mijoz kanallari asosiy HTTP/2 ulanishlarini boshqaradi. Unumdorlik uchun mijozlar odatda har bir RPC chaqiruvi uchun yangisini yaratish oʻrniga koʻp sonli RPC chaqiruvlari uchun kanallarni qayta ishlatishlari kerak.
  9. Xabarlarni kichik tuting: Protobuf samarali boʻlsa-da, haddan tashqari katta xabarlarni yuborish hali ham unumdorlikka taʼsir qilishi mumkin. Xabarlaringizni iloji boricha ixcham qilib loyihalang, faqat kerakli maʼlumotlarni uzating.

Ushbu amaliyotlarga rioya qilish sizga yuqori unumdorlikdagi, masshtablanuvchi va texnik xizmat koʻrsatish oson boʻlgan gRPC asosidagi tizimlarni qurishga yordam beradi.

RPC kelajagi: gRPC ning rivojlanayotgan ekotizimi

gRPC statik emas; bu jonli va doimiy rivojlanayotgan ekotizim. Uning qabul qilinishi moliya va telekommunikatsiyadan tortib oʻyin va IoT gacha boʻlgan turli sohalarda tez surʼatlar bilan oʻsishda davom etmoqda. Davom etayotgan rivojlanish va kelajakdagi taʼsirning asosiy yoʻnalishlari quyidagilarni oʻz ichiga oladi:

gRPC ning traektoriyasi uning yaqin kelajakda yuqori unumdorlikdagi taqsimlangan tizimlarning poydevori boʻlib qolishini koʻrsatadi va butun dunyo boʻylab dasturchilarga yanada samaraliroq, masshtablanuvchi va bardoshli ilovalarni yaratishga imkon beradi.

Xulosa: Taqsimlangan tizimlarning keyingi avlodini quvvatlantirish

gRPC zamonaviy muhandislik tamoyillarining isboti boʻlib, xizmatlararo aloqa uchun kuchli, samarali va tildan mustaqil freymvorkni taklif etadi. Protocol Buffers va HTTP/2 dan foydalangan holda, u mislsiz unumdorlikni, moslashuvchan oqimli imkoniyatlarni va murakkab, global miqyosda taqsimlangan arxitekturalar uchun ajralmas boʻlgan mustahkam shartnomaga asoslangan yondashuvni taqdim etadi.

Mikroxizmatlar, real vaqtda maʼlumotlarni qayta ishlash va koʻp tilli rivojlanish muhitlarining murakkabliklari bilan kurashayotgan tashkilotlar uchun gRPC jozibador yechimni taqdim etadi. U jamoalarga turli platformalar va geografik chegaralar boʻylab uzluksiz ishlay oladigan yuqori sezgir, masshtablanuvchi va xavfsiz ilovalarni yaratish imkonini beradi.

Raqamli landshaft tobora ortib borayotgan tezlik va samaradorlikni talab qilar ekan, gRPC butun dunyo boʻylab dasturchilarga oʻzlarining taqsimlangan tizimlarining toʻliq salohiyatini ochishga va yuqori unumdorlikdagi, oʻzaro bogʻlangan ilovalarning keyingi avlodiga yoʻl ochishga yordam beradigan muhim omil boʻlishga tayyor.

gRPC ni qabul qiling va xizmatlaringizga innovatsiyalar tezligida muloqot qilish imkoniyatini bering.