其他分享
首页 > 其他分享> > 打下rpc

打下rpc

作者:互联网

什么是RPC

RPC(Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达调用的数据。常存在于分布式系统中。

RPC要解决的问题

其实RPC需要了解的基本内容就是上面,我们最想知道这个名词与一般的HTTP相比有啥优势,解决了什么问题。

OSI模型
OSI模型
HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>

即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。

简单来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http servlet容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。

gRpc

gRPC是谷歌开源的一个 RPC 框架,面向移动和 HTTP/2 设计。

内容交换格式采用ProtoBuf(Google Protocol Buffers),开源已久,提供了一种灵活、高效、自动序列化结构数据的机制,作用与XML,Json类似,但使用二进制,(反)序列化速度快,压缩效率高。
传输协议 采用http2,性能比http1.1好了很多
和很多RPC系统一样,服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。

ProtoBuf 具有强大的IDL(interface description language,接口描述语言)和相关工具集(主要是protoc)。用户写好.proto描述文件后,protoc可以将其编译成众多语言的接口代码。

HTTP/2

Dotnet gRPC Demo

创建gprc项目,并配置proto

dotnet new grpc -o GrpcGreeter

- greet.proto

syntax = "proto3";

option csharp_namespace = "GrpcGreeter";

package Greet;

// 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;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

- Start.cs
public void ConfigureServices(IServiceCollection services){
     services.AddGrpc();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
    app.UseEndpoints(endpoints =>{
           endpoints.MapGrpcService<GreeterService>();
           endpoints.MapGet("/", async context =>  {
                    await context.Response.WriteAsync("Communication with gRPC endpoints");
                });
           });
}

标签:协议,调用,HTTP,request,RPC,打下,rpc,序列化
来源: https://www.cnblogs.com/weilai1917/p/11795810.html