怎么判断网站优化过度,上海关键词排名推广,wordpress云盘视频,德州网站建设设计你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务#xff0c;两者的定位不一样。一般来说#xff0c;一个业务场景的核心逻辑都是在RPC服务中实现的#xff0c;强调的是服务于后台系统内部#xff0c;所谓的“微服务”主要指的就是RPC服务#xff1b;而HTTP服…你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务两者的定位不一样。一般来说一个业务场景的核心逻辑都是在RPC服务中实现的强调的是服务于后台系统内部所谓的“微服务”主要指的就是RPC服务而HTTP服务强调的是与用户请求的交互它做的主要工作一般比较简单比如校验用户请求、打包响应数据而用户请求真正的处理逻辑会被HTTP服务通过RPC请求交给RPC服务来执行HTTP服务更像是业务服务层的“网关”。RPC服务对后台内部暴露RPC协议而HTTP服务对后台外部暴露HTTP。
为什么后台内部要专门使用RPC协议来通信而不直接使用HTTP这就要从RPC的概念说起了。
RPC Remote Procedure Call远程过程调用的目标就是屏蔽网络编程的细节能够像调用本地方法一样调用远程方法让开发者更专注于业务逻辑本身。如图1-22所示在一个单体应用内假设有一个Calculator接口以及这个接口的实现类Calculatorlmpl那么要调用Calculator的add方法执行相加运算就可以直接调用这是因为Calculatorlmpl实现类和Calculator接口在同一个进程地址空间内。这种调用形式就是本地过程调用。 现在将单体应用改为分布式应用接口调用和实现分别在两个服务中其中Service 1只有Calculator接口而没有Calculatorlmpl实现类那么Service 1怎样才能调用到Service 2提供的Calculatorlmpl实现类的add方法呢显然应该通过网络通信形式如图1-23所示。
Service 2可以作为一台TCP服务器Service 1向其发送请求并接收响应当它收到指定的数据包时将调用add方法并将运算结果回传Service 2也可以作为一台HTTP服务器对外提供Restful APIService 1发起HTTP请求调用此Restful API获取运算结果。
Service 1发起远程过程调用来执行Service 2的add方法这样做已经很接近RPC了 不过每次Service 1调用add方法时都不得不编写一大段TCP或者HTTP收发请求的代码。这里是否可以简化让服务调用者就像调用一个本地方法一样进行远程过程调用即感知不到网络通信的存在这就是RPC要做的事情。RPC框架通过代理模式将网络通信屏蔽服务调用者仅需像本地过程调用一样调用一个RPC方法就能执行远程方法。
接下来介绍RPC通信流程。RPC实质上就是调用方将调用方法和参数发送到被调用方被调用方处理后将结果返回给调用方的过程。由于RPC底层实际上是网络通信所以这里主要包括两个方面的工作。 方法的输入参数、输出参数都是对象这些对象和二进制数据可以相互转化。这个过程被称为序列化。 被调用方收到数据包需要知道指定的方法名是什么以及输入参数在数据包中的起始位置等于是需要根据我们约定的协议格式对数据包解码二进制数据与数据包可以相互转化。这个过程被称为编解码。
下面是RPC通信流程
调用方先将输入参数序列化再将其编码为所约定的协议格式的数据包然后通过网络发送给被调用方被调用方先将数据包解码得到指定的方法名和序列化的输入参数然后将输入参数反序列化执行方法最后通过与调用方调用相同的流程将结果返回给调用方。
完整的RPC通信流程如图1-24所示 由于RPC通信流程相对固定gRPC、Thrift等RPC框架都可以利用所约定的协议定义文件生成脚手架代码使用者只需要将具体的方法处理代码完成后就能实现RPC通信了。
从上述介绍我们可以看出RPC只是一种用于屏蔽远程过程调用的设计它与HTTP不是对立的因为两者不是一个层面的概念。RPC底层的网络通信可以使用TCP实现如 Thrift,也可以使用HTTP实现如gRPC其本身并无限制。我们将业务服务层拆分为HTTP服务和RPC服务更想强调的是前者服务于后台外部而后者服务于后台内部即后台服务之间的通信使用RPC形式。所谓的RPC协议只是表示RPC网络调用形式而RPC服务的意思是该服务是基于gRPC、Thrift或其他RPC框架生成的后台内部可以通过RPC形式与其通信。
这里给出一个RPC服务的例子一个支持加法、减法、乘法、除法4个接口的计算器RPC服务可以使用如下Thrift协议文件生成。
namespace go calculatorstruct BinaryReq {1: required i64 Operatoriz,2: required i64 Operators,
}struct Response {1: required i64 Result,
}service CalculatorService {Response Add(1: BinaryReq req) // 加法接口Response Sub(1: BinaryReq req) // 减法接口Response Multiply(1: BinaryReq req) // 乘法接口Response Division(1: BinaryReq req) // 除法接口
}通过服务注册中心HTTP服务能够得知RPC服务的可用地址列表。当HTTP服务接收到来自Nginx转发的用户请求后就可以选择某个可用地址并通过RPC协议与RPC服务通信完成对RPC服务的调用最后将用户请求交给RPC服务处理。
总结
业务服务层一般包含哪些业务
HTTP服务RPC服务
HTTP服务和RPC服务的区别 一般来说一个业务场景的核心逻辑都是在RPC服务中实现的强调的是服务于后台系统内部所谓的“微服务”主要指的就是RPC服务 而HTTP服务强调的是与用户请求的交互它做的主要工作一般比较简单比如校验用户请求、打包响应数据而用户请求真正的处理逻辑会被HTTP服务通过RPC请求交给RPC服务来执行HTTP服务更像是业务服务层的“网关” RPC服务对后台内部暴露RPC协议而HTTP服务对后台外部暴露HTTP。
RPC的目标
RPC Remote Procedure Call远程过程调用的目标就是屏蔽网络编程的细节能够像调用本地方法一样调用远程方法让开发者更专注于业务逻辑本身。
RPC需要做的两个准备工作
序列化和反序列化方法的输入参数、输出参数都是对象这些对象和二进制数据可以相互转化。这个过程被称为序列化。编解码被调用方收到数据包需要知道指定的方法名是什么以及输入参数在数据包中的起始位置等于是需要根据我们约定的协议格式对数据包解码二进制数据与数据包可以相互转化。这个过程被称为编解码。
RPC的通信流程
调用方先将输入参数序列化再将其编码为所约定的协议格式的数据包然后通过网络发送给被调用方被调用方先将数据包解码得到指定的方法名和序列化的输入参数然后将输入参数反序列化执行方法最后通过与调用方调用相同的流程将结果返回给调用方。
RPC底层的网络通信有哪些实现方法
TPC实现比如ThriftHTTP实现比如gRPC