网站建设 主机选择,asp网站部署 iis7,定制企业网站建设制作,做景观素材有哪几个网站一#xff1a;前导知识
Http是超文本传输协议#xff0c;跨平台性非常好。Http可以传输文本#xff0c;更多的时候传输的是文本#xff0c;我们也是可以传输二进制的#xff0c;我们基于Http进行下载的时候#xff0c;就是走的Http协议。
Tcp协议#xff0c;处理的时候…一前导知识
Http是超文本传输协议跨平台性非常好。Http可以传输文本更多的时候传输的是文本我们也是可以传输二进制的我们基于Http进行下载的时候就是走的Http协议。
Tcp协议处理的时候会更麻烦我们需要自己开发服务器对外提供服务我们可以使用socket可以使用nio可以使用Netty。作为服务器端暴露服务的时候我们直接将我们的service暴露出来这样的话业务性会很好只不过我们的服务端代码实现起来会很繁琐。当我们进行调用的时候这种方式比Http协议请求的方式会更加的方便设计的好的话我们甚至可以在代码中直接service.业务性更强。
对于TCP这中方式的话我们的客户端也是需要处理TCP协议的数据的这样的话学位也是有一丢丢繁琐
TCP协议作为一种长链接协议。不需要进行频繁的三次握手四次挥手Http协议底层也是TCP协议但是高层进行了封装需要频繁的关闭连接这样就需要频繁的握手挥手再加上应用层协议协议头内容很多导致传输的内容负担较大。
通过RPC进行过程调用的时候我们往往需要传递这样的几个参数类的名字方法的名称方法的参数就可以找到唯一的一个service中的方法进而可以提供服务。服务提供完之后再通过网络传输给我们的调用方。一个是有网络另外一个通过页面。
通信的时候我们基于Http协议还是TCP协议不要再说底层就是TCP了!!!的区别如下
二RPC框架的设计
1设计目标
让调用者像调用本地方法一样调用远端的服务方法。调用者就是我们的客户端远端的服务方法就是我们的服务方service层中的某一个方法。基于这样的RPC来讲我们的代码业务含义就会非常强。
我们想要达到这样的一个设计目标我们必须需要解决两个问题网络通讯传递数据接收返回值。在设计RPC的时候我们要这两个问题封装掉让低级程序员使用的时候达到上述的目的即可。
2目标思路分析
1)通讯方式
通讯方式我们可以选择Http协议或者选择TCP协议选择Http协议的话我们大概率就不需要自己写服务了。 如果我们使用TCP协议的话我们大概率的通讯工具使用的是Netty、Socket、Nio、Mina等等
2)自定义协议
当然如果我们使用TCP的话我们可能还需要自定义协议。我们自定义协议在Netty文章中就已经探讨过了我们自定义的协议包括两大部分协议头协议体消息主体、协议主体
3)序列化方式
协议当中很重要的一个组成部分就是序列化就是我们要传输的数据要以什么样的数据进行序列化。JSONprotobufhessian 序列化是协议的一个组成部分只不过他非常的重要我们往往把他给拿出来单独来讲。
二进制协议与非二进制协议 这个协议什么是二进制什么不是二进制网络传输的时候不都是二进制的吗对了网络传输的时候都是二进制网络底层通讯走的都是二进制而我们现在考虑的序列化是站在Java的角度考虑这个问题。是网络传输的上游我们走JSON的这样的方式的话我们走的是{id:10,age:30}如果走的时候Java的序列化的话那么就是ObjectOutputStream转成的byte[]当这些数据走到传输层的时候就会变成二进制。
4)客户端增加远程代理类
当请求达到服务端之后我们的服务提供方也就是服务器可以拿到客户端请求的类的名称、方法的名称、方法的参数。服务端就可以去调用这个方法然后在这个方法当中去进行访客户端中的Dao甚至RedisMQ等其他资源当业务结果处理完毕之后将方法的返回结果基于序列化协议通过网络返回给调用端。
通过代理类为原始类增加额外功能。也就是在客户端当中使用了远端代理通过代理的思想完成对远端服务的功能的包含以及外功能的编写。 补充说明
我们一般将远端的服务方法叫做skeleton骨架代理类叫做stub这个stub是远端服务的代理这个代理即完成网络通讯又完成传输数据。
3衍生问题
1)注册中心
服务端有多个实例这种情况下就必须考虑注册中心的功能了。注册中心有所有的服务的注册信息。 负载均衡基于轮训或者是加权的一些策略将请求打到对应的服务上 管理服务那些服务是可用的、健康的。定期的发心跳管理服务。 解耦合不需要直接绑定到对应的服务上而是都跟我们的注册中心发声联系。
注册中心的核心作用就是服务的治理 1负载均衡 2健康管理 服务管理(心跳 重试【延迟队列时间论算法】) 3解耦合 耦合性更低 4熔断 5限流 虽然做了限流但是流量过大我们必须做限流。