gRPC and Go: Membina Perkhidmatan Web Berprestasi Tinggi

Barbara Streisand
Lepaskan: 2024-09-30 20:07:03
asal
253 orang telah melayarinya

gRPC and Go: Building High-Performance Web Services

pengenalan

Dalam dunia perkhidmatan mikro dan sistem teragih, komunikasi yang cekap antara perkhidmatan adalah penting. Di sinilah gRPC, rangka kerja RPC (Panggilan Prosedur Jauh) berprestasi tinggi yang dibangunkan oleh Google, berperanan. Digabungkan dengan Go, bahasa pengaturcaraan yang disusun secara statik dan direka bentuk untuk kesederhanaan dan kecekapan, gRPC boleh membantu anda membina perkhidmatan web yang mantap dan berskala.

Apakah gRPC?

gRPC bermaksud google Remote Procedure Csemua. Ia ialah rangka kerja sumber terbuka yang menggunakan HTTP/2 untuk pengangkutan, Penampan Protokol sebagai bahasa penerangan antara muka dan menyediakan ciri seperti pengesahan, pengimbangan beban dan banyak lagi. gRPC membolehkan anda menentukan kaedah perkhidmatan dan jenis mesej anda dalam fail .proto, yang kemudiannya boleh digunakan untuk menjana kod klien dan pelayan dalam berbilang bahasa.

Mengapa Menggunakan gRPC dengan Go?

  1. Prestasi: gRPC menggunakan HTTP/2, yang membenarkan pemultipleksan berbilang permintaan melalui satu sambungan, mengurangkan kependaman dan meningkatkan prestasi.
  2. Penjanaan Kod: Dengan Penampan Protokol, anda boleh menentukan perkhidmatan anda sekali dan menjana kod klien dan pelayan dalam Go, memastikan konsistensi dan mengurangkan kod boilerplate.
  3. Penstriman: gRPC menyokong penstriman bahagian klien, bahagian pelayan dan dwiarah, menjadikannya sesuai untuk aplikasi masa nyata.
  4. Saling kendali: Perkhidmatan gRPC boleh digunakan oleh pelanggan yang ditulis dalam bahasa berbeza, menjadikannya pilihan serba boleh untuk persekitaran polyglot.

Bermula dengan gRPC dalam Go

  • ### Prasyarat

    Sebelum anda bermula, pastikan anda telah memasang yang berikut:

    • Pergi (mana-mana dua keluaran utama terbaharu)
    • Penyusun Penampan Protokol (protokok)
    • Pergi pemalam untuk Pengkompil Penampan Protokol

    Anda boleh memasang pemalam Go menggunakan arahan berikut:

    go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
    
    Salin selepas log masuk

    Kemas kini PATH anda supaya pengkompil protok boleh mencari pemalam:

    export PATH="$PATH:$(go env GOPATH)/bin"
    
    Salin selepas log masuk

    Sahkan bahawa protok dipasang dan dikonfigurasikan dalam sistem anda dengan membuka terminal dan menaip:

    protoc --version
    
    Salin selepas log masuk

    Anda sepatutnya melihat output yang serupa dengan ini

    C:\Users\Guest>protoc --version
    ~ libprotoc 27.3
    
    Salin selepas log masuk

    Jika ia tidak mengenali arahan protoc, maka anda boleh menggunakan Chocolatey for windows untuk memasang penampan protokol:

    choco install protoc
    
    Salin selepas log masuk

    Jika ini tidak berlaku, apabila anda tidak memasang coklat atau anda menggunakan OS lain, anda boleh melalui dokumentasi pemasangan rasmi di sini.

    Mentakrifkan Perkhidmatan

    Buat fail .proto untuk menentukan perkhidmatan gRPC anda. Contohnya:

    helloworld.proto

    syntax = "proto3";
    package helloworld;
    
    message HelloRequest {
        string name = 1;
    }
    message HelloResponse {
        string message = 1;
    }
    
    service Greeter {
        rpc SayHello (HelloRequest) returns (HelloResponse) {}
    }
    
    Salin selepas log masuk

    Kod Penjanaan

    Jana kod Go daripada fail .proto anda:

    protoc --go_out=. --go-grpc_out=. helloworld.proto
    
    Salin selepas log masuk

    Melaksanakan Pelayan

    Buat pelayan dalam Go:

    server.go

    package main
    
    import (
        "context"
        "log"
        "net"
    
        "google.golang.org/grpc"
        pb "path/to/your/proto"
    )
    
    type server struct {
        pb.GreeterServer
    }
    
    func main() {
        lis, err := net.Listen("tcp", ":8080")
        if err != nil {
            log.Fatalf("failed to listen: %v", err)
        }
    
        log.Printf("Server started at %v", lis.Addr())
    
        grpcServer := grpc.NewServer()
        pb.RegisterGreeterServer(grpcServer, &server{})
        if err := grpcServer.Serve(lis); err != nil {
            log.Fatalf("failed to serve: %v", err)
        }
    }
    
    // SayHello name should be the same RPC name as defined in your proto file
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
        return &pb.HelloResponse{Message: "Hello " + in.Name}, nil
    }
    
    Salin selepas log masuk

    Mencipta Pelanggan

    Buat pelanggan dalam Go:

    klien.go

    package main
    
    import (
        "context"
        "log"
        "os"
        "time"
    
        "google.golang.org/grpc"
        pb "path/to/your/proto"
    )
    
    func main() {
        conn, err := grpc.NewClient("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
        if err != nil {
            log.Fatalf("did not connect: %v", err)
        }
        defer conn.Close()
        client := pb.NewGreeterClient(conn)
    
        name := "John Doe"
        if len(os.Args) > 1 {
            name = os.Args[1]
        }
    
        callSayHello( client, name )
    }
    
    func callSayHello(client pb.GrpcServiceClient, name string) {
        ctx, cancel := context.WithTimeout(context.Background(), time.Second)
        defer cancel()
    
        res, err := client.SayHello(ctx, &pb.HelloRequest{Name: name})
        if err != nil {
            log.Fatalf("Failed to called: %v", err)
        }
        log.Printf("%v", res)
    }
    
    Salin selepas log masuk

Kesimpulan

gRPC dan Go bersama-sama menyediakan gabungan yang hebat untuk membina perkhidmatan web berprestasi tinggi dan berskala. Dengan memanfaatkan kekuatan kedua-duanya, anda boleh mencipta aplikasi yang cekap dan boleh dipercayai yang mudah diselenggara dan dilanjutkan.

Pautan ke repo demo: Github.com

Atas ialah kandungan terperinci gRPC and Go: Membina Perkhidmatan Web Berprestasi Tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan