SpringCloud微服务全栈实战讲解 - 公开课笔记
webservice使用xml,服务之间的依赖比较强,数据包比较大,编译和解析因为xml的递归解析形式,性能不好dubbo、hsf是基于RPC,dubbo强语言依赖,发送方是什么语言写的,服务方就要用什么语言解析。dubbo就是在两端开websocket,用于建立两点之间的通信,传的是序列化好的对象。Dubbo 底层原理分布式系统调用:把服务放在另一个节点上计算,减轻当前节点上的运算压力。相当于提
webservice使用xml,服务之间的依赖比较强,数据包比较大,编译和解析因为xml的递归解析形式,性能不好
dubbo、hsf是基于RPC,dubbo强语言依赖,发送方是什么语言写的,服务方就要用什么语言解析。dubbo就是在两端开websocket,用于建立两点之间的通信,传的是序列化好的对象。
Dubbo 底层原理
分布式系统调用:
把服务放在另一个节点上计算,减轻当前节点上的运算压力。
相当于提供方将接口文档打一个jar包,提供给调用方
网络发包只能发byte数组,所以要序列化成二进制
SpringCloud
SpringCloud和Dubbo的区别
Dubbo是远程服务中的RPC,长连接,是自定义的协议
SpringCloud是Http协议,
rpc和http相比,rpc的效率更高。但rpc要求请求双方实现语言相同。而http的序列化和反序列化是基于字符串的,使用json传递。好处是跨语言。
http要发心跳包,所以要耗费一些资源,但是相比语言的解耦,这些资源消耗是可以接受的。
示例
Consumer
Provider
UserAPI接口被Consumer项目实现。可以提供给Consumer
OpenFeign用来读懂API的SpringMVC的注解
Feign可以通过声明式(自己定义)远程服务调用的方式,在调用方的代码
测试效果
SpringCloud提供了一套服务降级的服务框架Hystrix,包括:服务降级、服务熔断、资源隔离
服务降级
所有服务都调不通,就降低服务标准,但仍然能提供服务,而不是直接调用失败,抛出异常。
服务熔断
如果每一次都调用失败,这段时间内就不再进行这个服务的调用了,直接去调用别的服务。
服务的上下线(对于注册中心来说)
如果能提供服务,会在注册中心列表中标记,标记的是网络状态。注册中心进行定时的心跳包检测。
如果服务虽然在,但无法提供服务,可以主动上报
如果调用失败,不应该从注册中心列表中剔除。可能只是网络抖动、网络分区造成的调用失败。
(CAP中的P:分区容错性)
重试策略:默认6秒,记录在调用方,而不是记录在注册中心。
示例
再加入一个91的服务
隔离
限制调用次数。可以使用线程池。
Hytrix怎么实现的?
try{
// 调用服务
}catch{
//熔断降级/资源隔离/加入不调列表,设置一个超时时间;
//调用降级方法;
}
ribbon
来帮我们选择服务器,内置了选取策略
其它
微服务目前很火,可能慢慢会被servicemesh取代,因为只需要关注业务逻辑,不用关注服务治理
更多推荐
所有评论(0)