Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua untuk membina pemindahan data teragih berskala menggunakan Golang dan gRPC

Petua untuk membina pemindahan data teragih berskala menggunakan Golang dan gRPC

WBOY
WBOYasal
2023-07-18 18:31:461456semak imbas

Petua untuk membina pemindahan data teragih berskala menggunakan Golang dan gRPC

Dalam sistem teragih moden, pemindahan data ialah komponen penting. Protokol pemindahan data tradisional seperti REST API dan SOAP mungkin mempunyai masalah kesesakan prestasi dan kebolehskalaan apabila memproses data berskala besar. Untuk menyelesaikan masalah ini, semakin ramai pembangun mula menggunakan gRPC sebagai penyelesaian penghantaran data yang lebih cekap dan berskala.

gRPC ialah rangka kerja panggilan prosedur jauh (RPC) berprestasi tinggi sumber terbuka oleh Google, dilaksanakan berdasarkan Penampan Protokol. Ia mempunyai kelebihan berikut: prestasi tinggi, sokongan untuk berbilang bahasa, ciri yang kaya (seperti penstriman dan pengesahan), mudah digunakan dan diselenggara, dsb. Dalam artikel ini, kami akan membincangkan cara membina pemindahan data teragih berskala menggunakan Golang dan gRPC.

Persediaan

Sebelum bermula, kita perlu memasang dependencies berkaitan Golang dan gRPC. Versi terkini Golang serta Penampan Protokol boleh dimuat turun dan dipasang dari laman web rasmi.

Selepas selesai pemasangan, kita perlu memasang pemalam Golang untuk gRPC, yang boleh dipasang melalui arahan berikut:

go get -u google.golang.org/grpc

Selain itu, kita juga perlu memasang pemalam Golang untuk Penampan Protokol, yang boleh dipasang melalui arahan berikut:

go get -u github.com/golang/protobuf/protoc-gen-go

Takrif dan jana Perkhidmatan gRPC

Pertama, kita perlu mentakrifkan perkhidmatan gRPC. Anda boleh menggunakan bahasa definisi Penampan Protokol untuk menulis antara muka dan struktur data perkhidmatan.

Kami mencipta fail bernama data.proto untuk menentukan antara muka dan jenis mesej penghantaran data: data.proto的文件,用于定义数据传输的接口和消息类型:

syntax = "proto3";

package data;

service DataTransfer {
  rpc SendData (DataRequest) returns (DataResponse) {}
}

message DataRequest {
  string message = 1;
}

message DataResponse {
  int32 status = 1;
  string response_message = 2;
}

接下来,我们需要生成Golang代码。可以使用Protocol Buffers的Golang插件来生成Golang代码:

protoc --go_out=. data.proto

执行上述命令后,会在当前目录下生成一个名为data.pb.go的文件,其中包含了生成的Golang代码。

实现gRPC服务

接下来,我们需要实现gRPC服务。在Golang中,可以轻松地使用生成的Golang代码来实现服务。

创建一个名为server.go的文件,并添加以下内容:

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"

    pb "your_package_name/data"
)

type server struct{}

func (s *server) SendData(ctx context.Context, req *pb.DataRequest) (*pb.DataResponse, error) {
    log.Printf("Received message: %s", req.Message)

    response := &pb.DataResponse{
        Status:          200,
        ResponseMessage: "Data received successfully",
    }

    return response, nil
}

func main() {
    lis, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }

    s := grpc.NewServer()
    pb.RegisterDataTransferServer(s, &server{})

    log.Println("Server started on port :50051")
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

在上述代码中,我们首先创建了一个server结构体,该结构体实现了定义在data.pb.go中生成的DataTransferServer接口的方法。在SendData方法中,我们简单地打印接收到的消息,并返回一个成功的响应。

接下来,我们在main函数中启动了一个gRPC服务,监听在端口50051。

客户端代码

最后,我们可以编写一个客户端代码来调用我们实现的gRPC服务。创建一个名为client.go的文件,并添加以下内容:

package main

import (
    "context"
    "log"

    "google.golang.org/grpc"

    pb "your_package_name/data"
)

func main() {
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()

    c := pb.NewDataTransferClient(conn)

    message := "Hello gRPC"

    response, err := c.SendData(context.Background(), &pb.DataRequest{Message: message})
    if err != nil {
        log.Fatalf("could not send data: %v", err)
    }

    log.Printf("Response status: %d", response.Status)
    log.Printf("Response message: %s", response.ResponseMessage)
}

在上述代码中,我们首先使用grpc.Dial函数连接到服务器,并创建一个DataTransferClient的客户端。然后,我们使用客户端调用SendData

go run server.go

Seterusnya, kami perlu menjana kod Golang. Anda boleh menggunakan pemalam Golang Protocol Buffers untuk menjana kod Golang:

go run client.go

Selepas melaksanakan arahan di atas, fail bernama data.pb.go akan dijana dalam direktori semasa, yang mengandungi kod Golang yang dihasilkan.

Melaksanakan perkhidmatan gRPC

Seterusnya, kita perlu melaksanakan perkhidmatan gRPC. Di Golang, perkhidmatan boleh dilaksanakan dengan mudah menggunakan kod Golang yang dijana.

Buat fail yang dipanggil server.go dan tambah kandungan berikut:

rrreee

Dalam kod di atas, kami mula-mula mencipta struktur server, yang Badan melaksanakan kaedah antara muka DataTransferServer yang ditakrifkan dalam data.pb.go. Dalam kaedah SendData, kami hanya mencetak mesej yang diterima dan mengembalikan respons yang berjaya.

Seterusnya, kami memulakan perkhidmatan gRPC dalam fungsi utama, mendengar pada port 50051.
  • Kod pelanggan
  • Akhir sekali, kami boleh menulis kod pelanggan untuk menghubungi perkhidmatan gRPC yang kami laksanakan. Cipta fail bernama client.go dan tambah kandungan berikut:
  • rrreee
Dalam kod di atas, kami mula-mula menyambung ke pelayan menggunakan fungsi grpc.Dial dan mencipta A klien untuk DataTransferClient. Kemudian, kami menggunakan klien untuk memanggil kaedah SendData untuk menghantar data. 🎜🎜Run and Test🎜🎜Selepas selesai menulis kod, kita boleh menggunakan arahan berikut untuk menjalankan pelayan dan klien secara berasingan: 🎜rrreeerrreee🎜Selepas menjalankan pelayan, ia akan menunjukkan bahawa perkhidmatan telah dimulakan pada port 50051. Kemudian jalankan klien, yang akan menyambung ke pelayan dan menghantar data. Pelanggan mencetak status respons dan mesej respons. 🎜🎜Melalui langkah di atas, kami berjaya membina penghantaran data teragih berskala menggunakan Golang dan gRPC. Prestasi tinggi dan kebolehskalaan gRPC menjadikannya ideal untuk mengendalikan data berskala besar. Sama ada anda sedang membina seni bina perkhidmatan mikro atau sistem teragih berskala besar, gRPC akan menjadi pembantu yang betul anda. 🎜🎜Kod sampel dan sumber lain boleh didapati dalam [repositori GitHub](https://github.com/example/golang-grpc-tutorial). 🎜🎜Bahan rujukan: 🎜🎜🎜[dokumentasi rasmi gRPC](https://grpc.io/)🎜🎜[dokumentasi rasmi Golang](https://golang.org/)🎜🎜

Atas ialah kandungan terperinci Petua untuk membina pemindahan data teragih berskala menggunakan Golang dan gRPC. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn