Dubbo总结

什么是分布式系统?

当单体应用的处理能力无法满足计算、存储任务,且硬件的提升得不偿失,引用程序也无法进一步优化的时候,可以考虑分布式。分布式系统主要解决的手段:将单体应用变为多节点,通过网络通信的拓扑结构,处理更多的计算。

Dubbo 是什么?

Dubbo 是一个高可用的 RPC 框架!

RPC是什么?

远程过程调用,本地调用远程机器上的服务。对标的是本地过程调用

RPC 如何调用?可以基于HTTP,也可以基于TCP自定义协议,所以RPC 和 HTTP 不是一个层面上的东西。

RPC 框架是要实现这个过程的框架。让远程调用就像本地调用一样。

如何实现一个 RPC 框架?

  • 通信协议
  • 序列化和反序列化(消费者序列化请求参数,生产者反序列化处理请求)
  • 容错机制(因为网络不可靠需要重试)
  • 提供者集群,消费者需要负载均衡取请求
  • 注册中心(提供者暴露服务,消费者获取服务)
  • 配置中心(配置集中化管理,动态变更通知订阅者)
  • 监控运维

Dubbo 的调用过程和服务暴露是什么?

首先有一个提供者服务暴露的过程。

提供者启动,通过Proxy 代理组件,根据具体的协议将需要暴露的接口封装成 Invoker ,

Invoker 是 Dubbo 的可执行体。

然后通过具体协议封装成 Exporter 组件,然后将 Exporter 注册到注册中心,这是服务暴露过程。

消费者启动后,向注册中心拉取提供者信息,然后通过 Proxy 代理开始,Proxy 持有一个 Invoker 对象,

通过调用 invoke 方法获取所有的 Invoker 列表,如果配置了某些路由规则,比如:一些服务只能在某些机器上调用,

就再过滤一下。

之后,Invoker 通过负载均衡,选取一台机器,序列化发往提供者。

提供者收到请求后,反序列化,将请求放到线程池处理,某个线程会根据请求找到对应的 Exporter,进而找到对用的

Invoker.

如果提供者接口有变更,是通过注册中心通知消费方。

服务提供方和消费方都会记录调用次数和时间,将统计数据定时发往监控中心。

注册中心和提供者、消费者之间是长连接,和监控中心不是长连接,并且消费方是直接调用服务方,不需要通过注册中心,

所以就算注册中心挂掉,也不会影响调用,因为消费方有本地缓存提供者信息。

Dubbo 默认采用的序列化是什么、默认端口是什么、调用方式是什么?

默认序列化是 hessian2 协议

默认端口是 20880

调用方式就是:消费者通过代理调用服务者的方式默认是同步。dubbo 本质是异步,因为框架帮我们转换成同步了

Dubbo 的LoadBalance负载均衡策略有哪些?

  • 加权随机

    比如:有 A、B 两个机器,想让 70% 落到 A,30% 落到 B,只需要搞一个在【0,10),如果得到随机值是【0,7),

    就请求A。这是 Dubbo 默认采用的负载算法。

  • 轮询

  • 最少活跃调用数,使慢的机器收到更少的请求

  • 一致性hash
    相同参数的请求达到同一台机器上

Dubbo 的安全机制是如何解决的?

dubbo 通过token 令牌防止用户绕过注册中心直连
然后在注册中心上提供授权,还提供白名单设置,来控制服务调用者

Dubbo 集群容错模式是什么?

缺省为重试,失败时候自动切换到其他机器,可以设置重试

Zookeeper 是如何保证数据一致性的?

  • 选举新的learder 之后同步数据
  • learder 处理事务请求后与其他节点同步数据。这个过程是通过 ZAB协议完成,learder 收到客户端请求后,将事务加入事务队列,并且广播给各个flower,flower 收到事务会写入本地事务日志,然后反馈learder,learder 收到半数反馈后,会再次发送提交广播。

Springboot 整合 Dubbo

提供者
// 提供者名字
dubbo.application.name = xx
// 注册中心地址
dubbo.register.address = zookeeper://ip:2181
// 哪些服务要被注册
dubbo.scan.base-package = com.xx

消费者
// 消费者名字
dubbo.application.name = xxx
// 注册中心的地址
dubbo.register.address = zookeeper://ip:2181
消费方写同样的接口
service 类引用
@Reference
xxService xService;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值