Dubbo

2021-02-10  本文已影响0人  ands999

一、dubbo

Dubbo 是一个分布式、高性能、透明化的 RPC (Remote Procedure Call ,远程过程调⽤)服务框架,提供服务自动注册、自动发现等服务治理方案。采⽤微内核设计+SPI扩展。

二、dubbo分层架构

dubbo完整流程

三、dubbo注册服务

⾸先 provider 启动,通过 proxy 组件根据具体的协议 protocol 将需要暴露出去的接⼝封装成 Invoker,invoker 代表⼀个可执⾏体。再通过 export 包装,这是为了在注册中⼼暴露⾃⼰套的⼀层,然后将 exporter 通过registry 注册到注册中⼼。 这就是注册服务过程。
proxy,protocol,invoker,export,registry。

四、dubbo消费服务

⾸先,消费者启动时会从注册中⼼拉取服务提供者的元信息。
调⽤流程也是从 proxy 开始,毕竟都需要代理才能⽆感知。proxy 持有⼀个 invoker 对象,调⽤ invoke 之后需要通过 cluster 先从 directory 获取所有可调⽤的远程服务的 invoker 列表,如果配置了某些路由规则,⽐如某个接⼝只能调⽤某个节点,那就再过滤⼀遍invoker 列表。
剩下的 invoker 再通过 loadBalance 做负载均衡选取⼀个。然后再经过 filter 做统计等,再通过 vlient 做数据传输,⽐如⽤ netty 来传输。传输需要经过 codec 接⼝做协议构造,再序列化。最终发往对应的服务提供者。
服务提供者接收到之后也会进⾏ codec 协议处理,然后反序列化后将请求扔到线程池处理。某个线程会根据请求找到对应的 exporter ,⽽找到 exporter 其实就是找到了invoker,但是还会有⼀层层Filter,经过过滤链之后最终调⽤实现类然后原路返回结果。
proxy,invoker,cluster,directory,loadbalance,filter,codec,seriable
codec,dseriable、filter、exporter、invoker

五、dubbo 通信协议

六、dubbo 注册中心

七、dubbo消费者负载均衡

八、dubbo消费者的容错方案

九、dubbo 支持的序列化方法

hessian 序列化(默认),duddo、fastjson、Java 自带序列化。

十、补充其他

dubbo 超时时间

推荐服务提供者端设置超时时间,因为服务提供者比消费者更清楚自己提供的服务特性。
服务消费者端设置超时时间,如果在消费者端设置了超时时间,以消费者端为主。因为服务调用方设置超时时间控制性更灵活。如果消费方超时,服务端线程不会定制,会产生警告。
dubbo 在调用服务不成功时,默认重试两次。

dubbo 的安全机制

Dubbo 通过 Token 令牌防止用户绕过注册中心直连,然后在注册中心上管理授权。Dubbo 还提供服务黑白名单,以控制服务所允许的调用方。

dubbo与spring

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于Spring 的 Schema 扩展进行加载。

dubbo与spring cloud

Dubbo 底层使用NIO 框架 Netty ,是基于TCP ,配合以 Hession 序列化完成 RPC 通信。
SpringCloud 是基于 Http 协议+Rest 接口调用远程过程的通信。相对来说,Http 请求会有更大的报文,占的带宽也会更多。但是REST 相比 RPC 更为灵活,服务提供方和调用方不存在代码级别的强依赖。
Dubbo 是 SOA 时代的产物,关注于服务的调用,流量分发、流量监控和熔断。Spring Cloud 诞生于微服务时代,考虑的是微服务治理。
Dubbo 定位服务治理、Spirng Cloud 是一个生态。

核心组件的连接关系

注册中⼼、提供⽅和消费⽅之间都是⻓连接,和监控⽅不是⻓连接,并且消费⽅是直接调⽤提供⽅,不经过注册中⼼。
服务提供者在zk上是最后的节点是临时节点。前面的/dubbo/com.xxxx/providers是持久化节点。

问题归纳

参考
上一篇 下一篇

猜你喜欢

热点阅读