目录

前奏

Restful和RPC区别

长连接与短连接的区别以及使用场景

Dubbo和Feign的区别 

协议:

负载均衡:

容错策略:


 

前奏

首先http是协议,RPC是远程调用方法——>实现用到了http协议,其实可以理解为RPC在Http Servlet容器上进行了封装,封装了一些远程调用的函数这些(比如dubbo中服务发现,负载均衡,集群容错);

Restful和RPC区别

RPC

1.在远程调用的时候,客户端和服务端都维护一个ID-函数的对应表,ID是唯一确定的,客户端在远程调用的时候+ID——>dubbo就是这样,服务端确定客户端要调用的函数后进行执行(但是我们一般都是结合zookeeper,将服务注册到zookeeper中,而不是像之前那样点对点了)

2.然后再客户端与服务端传输的时候,传输的时候都选哟进行序列化和反序列化(因为结果需要转化为为流在网络中进行传输)——>如果你结合zookeeper的话,client与server的传输就会有个介质,众所周知zk客户端服务端传输是NIO,传输面向的是buffer,效率会高很多

RestFul

REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。

REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法

长连接与短连接的区别以及使用场景

 短连接

连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

长连接

连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

区别:

显而易见,短连接每传一次数据就是一次HTTP操作,当任务完成后就会断开,所以是无状态的;

但是长连接不管后续通道还是否传数据,这个通道是一直建立起来的,消耗资源较多但是速度较快,毕竟建立一次连接速度都是很慢的;

Dubbo和Feign的区别 

协议:

Dubbo:

  • 支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式。非常灵活。
  • 默认的Dubbo协议:利用NettyTCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。——>(长连接,并发太大资源消耗较多)

Feign:

基于Http传输协议,短连接,不适合高并发的访问。

负载均衡:

dubbo:支持四种算法(随机,轮询,hash一致性,活跃度(用的次数)),还有权重(es)

feign:只有轮询,随机,ResponseTemplate加权

容错策略:

就是消费端调用服务端出错的处理方式

dubbo:

提供方

<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" cluster="failover" retries="2" />
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"cluster="failover"> 
	<dubbo:method name="sayHello" retries="2" /> 
</dubbo:service>

FailOver:失败后切换,一般来说提供服务的可能有多台机器,一台失败就另一台(所以说容错是用于集群)

FailSafe:失败后会记录日志然后返回空结果

<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" cluster="failsafe" />

FailFast:快速失败抛出异常

Forking:空间换时间的思想,一次调用多个服务器,只要有一个成功就认为成功

BroadCast:有一个失败就失败

Fegin:

基于熔断机制来的,处理方式不一样