grpc bukan sahaja menyokong bahasa go. grpc ialah protokol komunikasi berdasarkan HTTP/2 dan menyokong rangka kerja RPC berbilang bahasa pada masa ini menyediakan versi bahasa C, Java dan Go, iaitu grpc, grpc-java, grpc-go; , Python, Ruby, Objective-C, PHP dan C# disokong.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Apakah grpc
gRPC ialah protokol komunikasi berdasarkan HTTP/2, menyokong rangka kerja RPC berbilang bahasa dan direka untuk mudah alih dan HTTP/ 2. gRPC direka bentuk berdasarkan standard HTTP/2 dan membawa ciri seperti penstriman dwiarah, kawalan aliran, mampatan pengepala dan permintaan pemultipleksan pada satu sambungan TCP. Ciri ini menjadikannya berprestasi lebih baik pada peranti mudah alih dan menjimatkan kuasa serta ruang.
RPC: Singkatan dari Remote Procedure Call, diterjemahkan sebagai panggilan prosedur jauh (juga boleh diterjemahkan sebagai panggilan kaedah jauh atau panggilan jauh), ia adalah protokol komunikasi komputer. Protokol ini boleh menjadikan panggilan perkhidmatan jauh semudah memanggil perkhidmatan tempatan, tanpa perlu risau tentang merentas rangkaian, merentas platform, merentas bahasa dan isu lain.
kaedah pesirilan mesej gRPC biasanya menggunakan Protobuf, iaitu format binari, bersaiz kecil, penghantaran rangkaian pantas, menggunakan jalur lebar dan trafik yang kurang serta mempunyai prestasi panggilan yang lebih tinggi.
Ciri gRPC
-
IDL
gRPC Gunakan ProtoBuf untuk menentukan perkhidmatan ProtoBuf ialah protokol siri data yang dibangunkan oleh Google (serupa dengan XML, JSON). ProtoBuf boleh menyerikan data dan digunakan secara meluas dalam penyimpanan data, protokol komunikasi, dsb.
-
Sokongan berbilang bahasa
gRPC menyokong berbilang bahasa dan secara automatik boleh menjana perpustakaan fungsi klien dan pelayan berdasarkan bahasa. Pada masa ini, grpc versi C, versi Java grpc-java dan versi Go grpc-go disediakan Antaranya, grpc menyokong C, C++, Node.js, Python, Ruby, Objective-C, PHP dan C# dan bahasa lain. . grpc-java mempunyai Menyokong pembangunan Android.
-
HTTP2
gRPC direka berdasarkan standard HTTP2 dan membawa ciri yang lebih berkuasa, seperti penstriman dwiarah, pemampatan pengepala, permintaan pemultipleksan, dsb. Ciri ini membawa faedah yang ketara seperti penjimatan lebar jalur, masa pautan TCP yang dikurangkan, penjimatan penggunaan CPU dan hayat bateri yang dilanjutkan. Pada masa yang sama, gRPC juga boleh meningkatkan prestasi perkhidmatan awan dan aplikasi web. gRPC boleh digunakan pada kedua-dua sisi klien dan pelayan, dengan itu mencapai komunikasi pelanggan-pelayan secara telus dan memudahkan pembinaan sistem komunikasi.
Mengapa kami menggunakan grpc
Ekologi yang baik: disokong oleh Google. Contohnya, nginx juga menyediakan sokongan untuk grpc, pautan rujukan
Silang bahasa: silang bahasa dan secara automatik menjana sdk
Prestasi tinggi : Sebagai contoh, protobuf mempunyai prestasi yang lebih tinggi daripada json, contohnya, http2.0 mempunyai prestasi yang lebih tinggi daripada http1.1
Penaipan yang kuat: pengkompil menyelesaikan banyak masalah untuk anda
Pemprosesan penstriman (berdasarkan http2.0): menyokong penstriman pelanggan, penstriman pelayan, penstriman dua hala
Bagaimana untuk merealisasikan kelebihan grpc
1. Prestasi tinggi grpc: Mengapa protobuf lebih baik daripada json?
1) Apakah protobuf?
- Protobuf ialah format binari yang dibangunkan oleh Google untuk menyerikan data antara perkhidmatan yang berbeza. Ia ialah bahasa IDL (bahasa penerangan antara muka)
2) Berapa cepatkah ia daripada json?
3) Mengapakah protobuf lebih pantas daripada json?
- Membandingkan data json dan format data protobuf, kita boleh tahu bahawa
-
Saiz kecil - tiada pembatas diperlukan: Kaedah storan TLV tidak memerlukan pembatas (koma, petikan berganda, dsb.) boleh memisahkan medan, mengurangkan penggunaan pembatas
-
Saiz kecil - medan kosong ditinggalkan : Jika medan tidak mempunyai nilai medan ditetapkan, maka data apabila medan bersiri Ia tidak wujud sama sekali, iaitu, tiada pengekodan diperlukan dan json akan menghantar kunci dan nilai nilai nol
-
Perwakilan binari tag saiz kecil: Ia menggunakan nilai berangka medan dan kemudian menukarnya menjadi Perwakilan binari lebih menjimatkan ruang daripada perwakilan rentetan kunci json
-
Pengekodan dan penyahkodan yang lebih pantas : Teg menyimpan jenis medan, dan anda boleh mengetahui secara langsung panjang nilai, atau apabila nilai adalah rentetan, panjang digunakan untuk menyimpan panjang Anda boleh terus mengambil n bait untuk mendapatkan nilai jika panjang nilainya tidak diketahui, kita mesti melakukan padanan rentetan
-
Untuk pemahaman terperinci tentang pengekodan protobuf, anda boleh pergi ke : kaedah pengekodan varint dan zigzag
2. Prestasi tinggi grpc: mengapa http2.0 mempunyai prestasi yang lebih tinggi daripada http1.1 ?
1) Multiplexing
-
Perbandingan antara http2.0 dan http 1.* dan http1.1pipling
Rajah skematik
-
http/1.*: Satu permintaan, satu respons, wujudkan sambungan dan tutupnya selepas digunakan Setiap permintaan mesti mewujudkan sambungan
-
Perpaipan http1.1: Penyelesaian paip adalah untuk beratur beberapa permintaan Pemprosesan benang tunggal bersiri. , permintaan seterusnya menunggu pengembalian permintaan sebelumnya sebelum mereka boleh mendapat peluang untuk melaksanakan Apabila permintaan tamat, permintaan seterusnya hanya boleh disekat dan tidak ada cara yang boleh digunakan menyekat
-
http2: Berbilang permintaan boleh dilaksanakan secara selari pada satu sambungan pada masa yang sama. Tugas permintaan tertentu memakan masa dan tidak akan menjejaskan pelaksanaan biasa sambungan lain
- Apakah kelebihan lain pemultipleksan grpc
- Mengurangkan tcp sambungan mengurangkan tekanan pada memori, CPU, dsb. pada pelayan dan klien
- Mengurangkan sambungan tcp dan memastikan penetapan semula tcp tidak dicetuskan dengan kerap, supaya permulaan perlahan tidak akan berlaku dengan kerap
- Mengurangkan sambungan tcp dan meningkatkan kesesakan rangkaian
- Mengapa http/1.1 tidak boleh mencapai pemultipleksan tetapi http2.0 boleh?
- Kerana penghantaran http/1.1 menggunakan teks, manakala http2.0 menggunakan penghantaran bingkai binari
2) Pemampatan pengepala
-
Mampatan medan tetap: http boleh gzip memampatkan badan melalui http, yang boleh menjimatkan lebar jalur, tetapi terdapat juga banyak medan dalam pengepala mesej yang tidak dimampatkan. Pemampatan, seperti kuki, ejen pengguna terima, ini perlu dimampatkan
-
untuk mengelakkan pertindihan: Terdapat banyak nilai medan yang diulang dalam sejumlah besar permintaan dan mesej respons , jadi adalah perlu untuk mengelakkan pertindihan Prestasi
-
Peningkatan pengekodan: Medan dikodkan ascii, yang tidak cekap Menukar kepada pengekodan binari boleh meningkatkan
- Perkara di atas dilaksanakan melalui algoritma HPACK Algoritma terutamanya terdiri daripada tiga bahagian
- Kamus statik: menukar medan pengepala yang biasa digunakan kepada kamus, seperti {":method":"GET" }, yang boleh diwakili oleh nombor tunggal 2
- Kamus dinamik: Jika tiada medan pengepala dalam kamus statik, gunakan kamus dinamik
- Pengekodan Huffman: Pengekodan mampatan
3) Bingkai pembahagian binari
- Pada lapisan pembingkaian binari, HTTP 2.0 akan memisahkan semua maklumat yang dihantar kepada mesej dan bingkai yang lebih kecil, dan mengekodnya dalam format binari, di mana HTTP1.x Maklumat pengepala akan dirangkumkan ke dalam bingkai Pengepala, dan badan permintaan kami akan dirangkumkan ke dalam bingkai Data.
- Dengan cara ini, selepas dibingkaikan, bingkai ini boleh dihantar tidak teratur, dan kemudian dipasang mengikut pengecam strim dalam pengepala setiap bingkai
-
Berbanding dengan http/ 1.1Oleh kerana ia berdasarkan teks Memisahkan setiap kunci:nilai dengan aksara baris baharu akan menghadapi masalah berikut:
- hanya boleh memproses satu permintaan atau respons pada satu masa, kerana data jenis ini yang memisahkan mesej dengan pembatas tidak boleh berhenti menghuraikan sebelum ia selesai
- Adalah mustahil untuk meramalkan berapa banyak memori yang diperlukan untuk menghuraikan data jenis ini, yang akan memberi banyak tekanan pada pelayan
4) Pelayan secara aktif menolak sumber
- Memandangkan pelayan disokong untuk menolak sumber secara aktif, beberapa permintaan boleh diabaikan. Sebagai contoh, jika anda memerlukan dua fail 1.html dan 1.css, jika ia adalah http1.0, anda perlu memintanya dua kali dan pelayan akan mengembalikannya dua kali. Tetapi http2.0 membenarkan pelanggan meminta sekali, dan kemudian pelayan terus bertindak balas dua kali
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !
Atas ialah kandungan terperinci Adakah grpc hanya menyokong bahasa go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!