go 学习 之 GRPC微服务示例

1. 背景

学习ing

2. HTTP 微服务 与 GRPC 微服务的区别

grpc和http协议比较大的差异在于grpc需要通过 protobuf 来实现API接口以及数据结构的定义。

2.1. 通信协议和效率:

  • gRPC: 基于HTTP/2协议,利用ProtoBuf(Protocol Buffers)作为高效的二进制序列化格式,这使得gRPC在数据传输上更为高效,减少带宽消耗并提高速度。gRPC还利用了HTTP/2的多路复用特性,可以在单个TCP连接上并行处理多个请求响应,减少了网络延迟。

  • HTTP微服务: 通常使用JSON作为数据交换格式,通过HTTP/1.1或HTTP/2协议。虽然HTTP/2也支持多路复用,但在实际应用中,HTTP请求往往比gRPC更冗长,因为JSON相比ProtoBuf来说体积更大,解析也更耗时。

2.2. 接口定义和代码生成:

  • gRPC: 强依赖于.proto文件来定义服务接口和消息结构,然后通过gRPC工具自动生成客户端和服务端的存根代码(Stub),支持多种编程语言,大大简化了跨语言通信的复杂度。

  • HTTP微服务: 通常采用RESTful风格,接口定义较为灵活,但缺乏标准的接口描述语言和自动代码生成工具。开发者需要手动编写和维护客户端和服务端的API调用逻辑。

2.3. 功能特性:

  • gRPC: 支持双向流、服务端流、客户端流以及双向流式处理,这对于实时数据传输和交互式服务非常有利。此外,gRPC提供了丰富的元数据支持和身份验证机制。

  • HTTP微服务: 虽然可以通过长轮询或者SSE(Server-Sent Events)模拟流式处理,但并不原生支持双向或多向流。RESTful API在设计上更侧重于资源的表述和操作,适合简单的CRUD操作。

2.4. 适用场景:

  • gRPC: 适合内部微服务通信,尤其是那些对性能有高要求、需要频繁且低延迟通信的服务间交互。

  • HTTP微服务: 更适用于对外暴露的API,因为其简单性和广泛接受度,以及浏览器和许多第三方库的良好支持。

2.5. 社区和生态系统:

  • HTTP微服务: 由于RESTful API的普及,拥有更广泛的社区支持和成熟的工具链。

  • gRPC: 虽然相对较新,但得益于Google的推动和其在高性能场景下的优势,生态也在迅速发展,特别是在云原生和微服务架构中。

3. 创建文件:helloworld.proto

syntax = "proto3";

package protobuf;

option go_package = "github.com/gogf/gf/grpc/example/helloworld/protobuf";


// The greeting service definition.
service Greeter {
   
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {
   }
}

// The request message containing the user's name.
message HelloRequest {
   
  string name = 1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值