乐趣区

Dubbo部分知识点总结

Dubbo 部分

  • Dubbo 工作原理

    • dubbo 工作原理
      第一层:service 层,接口层,给服务提供者和消费者来实现的
      第二层:config 层,配置层,主要是对 dubbo 进行各种配置的
      第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton
      第四层:registry 层,服务注册层,负责服务的注册与发现
      第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务
      第六层:monitor 层,监控层,对 rpc 接口的调用次数和调用时间进行监控
      第七层:protocol 层,远程调用层,封装 rpc 调用
      第八层:exchange 层,信息交换层,封装请求响应模式,同步转异步
      第九层:transport 层,网络传输层,抽象 mina 和 netty 为统一接口
      第十层:serialize 层,数据序列化层

      工作流程:

      1)第一步,provider 向注册中心去注册
      2)第二步,consumer 从注册中心订阅服务,注册中心会通知 consumer 注册好的服务
      3)第三步,consumer 调用 provider
      4)第四步,consumer 和 provider 都异步的通知监控中心

  • 注册中心挂了可以继续通信吗?

    可以,因为刚开始初始化的时候,消费者会将提供者的地址等信息拉取到本地缓存,所以注册中心挂了可以继续通信。

  • Dubbo 的执行流程:

项目一启动,加载配置文件的时候,就会初始化,服务的提供方 ServiceProvider 就会向注册中心注册自己提供的服务,当消费者在启动时,就会向注册中心订阅自己所需要的服务,如果服务提供方有数据变更等,注册中心将基于长连接的形式推送变更数据给消费者。
默认使用 Dubbo 协议:

连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO 异步传输
序列化:Hessian 二进制序列化
适用范围:传入传出参数数据包较小(建议小于 100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要使用 dubbo 协议传输大文件或超大字符串
使用场景:常规远程服务方法调用
从上面的适用范围总结,dubbo 适合小数据量大并发的服务调用,以及消费者机器远大于生产者机器数的情况,不适合传输大数据量的服务比如文件、视频等,除非请求量很低。
  • Dubbo 的安全性如何得到保障:

    a. 在有注册中心的情况下, 可以通过 dubbbo admin 中的路由规则,来指定固定 ip 的消费方来访问
    b. 在直连的情况下,通过在服务的提供方中设置密码(令牌)token,消费方需要在消费时也输入这 个密码,才能够正确使用。Dubbo 添加服务 ip 白名单,防止不法调用
    
  • Duubo 中如何保证分布式事务?

    一般情况下,我们尽量将需要事务的方法放在一个 service 中,从而避开分步式事务。Dubbo 底层是基于 socket:Socket 通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在 client server 之间的 socket 连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server 处理完结果后,将结果消息发送给 client,client 收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?答:使用一个 ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。
  • Dubbo 的心跳机制:
    目的:
    维持 provider 和 consumer 之间的长连接
    实现:
    dubbo 心跳时间 heartbeat 默认是 1s,超过 heartbeat 时间没有收到消息,就发送心跳消 息 (provider,consumer 一样), 如果连着 3 次(heartbeatTimeout 为 heartbeat*3) 没有收到心跳响应,provider 会关闭 channel,而 consumer 会进行重连; 不论是 provider 还是 consumer 的心跳检测都是通过启动定时任务的方式实现;

Dubbo 的 zookeeper 做注册中心,如果注册中心全部挂掉,发布者和订阅者还能通信吗?
可以通信的,启动 dubbo 时,消费者会从 zk 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;
注册中心对等集群,任意一台宕机后,将会切换到另一台;注册中心全部宕机后,服务的提供者和消费者仍能通过本地缓存通讯。服务提供者无状态,任一台 宕机后,不影响使用;服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复;
挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。

随便写点什么,然后就发布了!

退出移动版