Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Meningkatkan Prestasi Sistem Teragih: Amalan Terbaik dengan Golang dan gRPC

Meningkatkan Prestasi Sistem Teragih: Amalan Terbaik dengan Golang dan gRPC

PHPz
PHPzasal
2023-07-18 18:55:501040semak imbas

Meningkatkan prestasi sistem teragih: Amalan terbaik dengan Golang dan gRPC

Pengenalan:
Dalam era Internet hari ini, sistem teragih telah menjadi salah satu seni bina pilihan bagi banyak syarikat Internet yang besar. Sistem teragih membantu meningkatkan kebolehskalaan, kebolehpercayaan dan prestasi sistem. Salah satu komponen terpenting dalam sistem teragih ialah protokol komunikasi. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang dan gRPC untuk membina sistem teragih berprestasi tinggi dan menyediakan beberapa amalan terbaik.

Latar Belakang:
Golang ialah bahasa pengaturcaraan yang dibangunkan oleh Google dengan prestasi serentak yang sangat baik dan pengurusan memori yang cekap. gRPC ialah rangka kerja RPC sumber terbuka berdasarkan HTTP/2 yang dibangunkan oleh Google dan boleh digunakan untuk membina sistem teragih berprestasi tinggi dan berskala.

  1. Bina persekitaran asas
    Pertama, anda perlu memasang Golang dan gRPC pada mesin anda. Anda boleh memuat turun dan memasang Golang melalui laman web rasmi, dan menggunakan arahan berikut untuk memasang gRPC:

    $ go get google.golang.org/grpc

    Selain itu, anda juga boleh memasang pakej pergantungan gRPC untuk menggunakan gRPC dalam program anda.

    $ go get github.com/golang/protobuf/proto
    $ go get github.com/golang/protobuf/protoc-gen-go
  2. Tentukan perkhidmatan dan mesej gRPC
    Dalam langkah ini, kami perlu menentukan perkhidmatan dan mesej gRPC kami. Pertama, kita perlu mencipta fail .proto untuk menentukan perkhidmatan dan mesej kami. .proto文件,定义我们的服务和消息。
    示例:

    syntax = "proto3";
    
    package helloworld;
    
    service HelloService {
     rpc SayHello (HelloRequest) returns (HelloResponse) {}
    }
    
    message HelloRequest {
     string name = 1;
    }
    
    message HelloResponse {
     string message = 1;
    }

    在上面的示例中,我们定义了一个HelloService服务,该服务有一个SayHello方法,接受一个HelloRequest消息,返回一个HelloResponse消息。HelloRequest消息中有一个名为name的字段,而HelloResponse消息中有一个名为message的字段。

  3. 生成gRPC代码
    接下来,我们需要通过运行protoc命令来生成gRPC代码。该命令将根据.proto文件生成相关的Go代码。
    示例:

    $ protoc -I . helloworld.proto --go_out=plugins=grpc:.

    这将生成一个名为helloworld.pb.go的Go文件,其中包含我们定义的gRPC服务和消息的实现。

  4. 实现gRPC服务
    在本步骤中,我们需要实现我们定义的gRPC服务。我们需要在一个Go文件中编写服务器和客户端的逻辑。
    示例:

    package main
    
    import (
     "context"
     "log"
     "net"
    
     pb "github.com/your-username/your-project/helloworld"
     "google.golang.org/grpc"
    )
    
    const (
     port = ":50051"
    )
    
    type server struct {
     pb.UnimplementedHelloServiceServer
    }
    
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
     log.Printf("Received: %v", in.GetName())
     return &pb.HelloResponse{Message: "Hello " + in.GetName()}, nil
    }
    
    func main() {
     lis, err := net.Listen("tcp", port)
     if err != nil {
         log.Fatalf("failed to listen: %v", err)
     }
     s := grpc.NewServer()
     pb.RegisterHelloServiceServer(s, &server{})
     log.Printf("Listening on %s", port)
     if err := s.Serve(lis); err != nil {
         log.Fatalf("failed to serve: %v", err)
     }
    }

    在上面的示例中,我们首先定义了一个服务器类型,该类型实现了我们定义的gRPC服务HelloService。然后,我们在main函数中创建一个服务器实例,并将其注册到gRPC服务器中。

  5. 编写gRPC客户端
    在本步骤中,我们将实现一个简单的gRPC客户端,用于测试我们的服务。我们可以在另一个Go文件中编写客户端逻辑。
    示例:

    package main
    
    import (
     "context"
     "log"
     "os"
     "time"
    
     pb "github.com/your-username/your-project/helloworld"
     "google.golang.org/grpc"
    )
    
    const (
     address     = "localhost:50051"
     defaultName = "world"
    )
    
    func main() {
     conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
     if err != nil {
         log.Fatalf("did not connect: %v", err)
     }
     defer conn.Close()
     c := pb.NewHelloServiceClient(conn)
    
     name := defaultName
     if len(os.Args) > 1 {
         name = os.Args[1]
     }
     ctx, cancel := context.WithTimeout(context.Background(), time.Second)
     defer cancel()
     r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})
     if err != nil {
         log.Fatalf("could not greet: %v", err)
     }
     log.Printf("Greeting: %s", r.GetMessage())
    }

    在上面的示例中,我们首先创建一个与我们的gRPC服务器连接的客户端。然后,我们调用SayHello方法以及提供的名称参数来获取服务的响应。

  6. 构建和运行代码
    在此步骤中,您可以使用以下命令构建和运行服务器和客户端代码。

    $ go build server.go
    $ go build client.go
    $ ./server &
    $ ./client World

    上述命令将首先构建服务器和客户端代码,然后运行服务器,并在客户端中调用SayHelloContoh:

    rrreee
  7. Dalam contoh di atas, kami mentakrifkan perkhidmatan HelloService, yang mempunyai kaedah SayHello yang menerima Mesej HelloRequest, mengembalikan mesej HelloResponse. Mesej HelloRequest mempunyai medan bernama name dan mesej HelloResponse mempunyai medan bernama message .


Jana kod gRPC

Seterusnya, kita perlu menjana kod gRPC dengan menjalankan perintah protoc. Perintah ini akan menjana kod Go yang berkaitan berdasarkan fail .proto.

Contoh:
    rrreee
  • Ini akan menjana fail Go bernama helloworld.pb.go yang mengandungi pelaksanaan perkhidmatan dan mesej gRPC yang kami tentukan.
Melaksanakan perkhidmatan gRPC🎜Dalam langkah ini, kami perlu melaksanakan perkhidmatan gRPC yang kami tetapkan. Kita perlu menulis logik pelayan dan klien dalam satu fail Go. 🎜Contoh: 🎜rrreee🎜Dalam contoh di atas, kami mula-mula menentukan jenis pelayan yang melaksanakan perkhidmatan gRPC HelloService yang kami takrifkan. Kemudian, kami mencipta contoh pelayan dalam fungsi utama dan mendaftarkannya dengan pelayan gRPC. 🎜🎜🎜🎜Menulis gRPC Client🎜Dalam langkah ini, kami akan melaksanakan klien gRPC mudah untuk menguji perkhidmatan kami. Kami boleh menulis logik klien dalam fail Go yang lain. 🎜Contoh: 🎜rrreee🎜Dalam contoh di atas, kami mula-mula mencipta pelanggan yang menyambung ke pelayan gRPC kami. Kami kemudian memanggil kaedah SayHello dengan parameter nama yang disediakan untuk mendapatkan respons daripada perkhidmatan. 🎜🎜🎜🎜Bina dan jalankan kod🎜Dalam langkah ini anda boleh membina dan menjalankan kod pelayan dan klien menggunakan arahan berikut. 🎜rrreee🎜Arahan di atas mula-mula akan membina pelayan dan kod klien, kemudian menjalankan pelayan dan memanggil kaedah SayHello dalam klien. 🎜🎜🎜🎜Kesimpulan: 🎜Artikel ini memperkenalkan cara menggunakan Golang dan gRPC untuk membina sistem pengedaran berprestasi tinggi. Dengan menggunakan gRPC, kami boleh mentakrifkan perkhidmatan dan mesej kami dengan mudah, dan kod yang berkaitan boleh dijana melalui penjana kod. Menggunakan prestasi serentak Golang dan pengurusan memori, kami boleh membina sistem teragih yang cekap dan boleh dipercayai. Dengan mengikuti amalan terbaik yang disediakan dalam artikel ini, anda boleh mula membangunkan sistem teragih anda sendiri untuk meningkatkan prestasi dan kebolehskalaan. 🎜🎜Rujukan: 🎜🎜🎜https://grpc.io/docs/🎜🎜https://golang.org/🎜🎜

Atas ialah kandungan terperinci Meningkatkan Prestasi Sistem Teragih: Amalan Terbaik dengan 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