1.Dubbo简介

dubbo是一个高可用,基于java的开源RPC框架

dubbo框架不仅仅是具备RPC访问功能,还包含服务治理功能

2.Dubbo架构在这里插入图片描述
2.1 Provider

提供者,编写持久层和事务代码

2.2 Container

容器(spring容器),Dubbo完全基于spring 实现的

2.3 Registry

注册中心,放置所有的Provider对外提供的信息,包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息

2.4 Consumer

消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以报页面等),调用XXXXServiceImpl中的方法

2.5 Monitor
3.执行流程

0.start:启动Spring容器时会把Provider启动

1.register:把Provider相关信息注册到Registry中

2.subscribe:Consumer从Registry中订阅Provider的信息

3.notify:通知给 Consumer

4.invoke:Consumer根据Registry通知的信息进行调用Provider中方法

5.count:Consumer根据Registry吧调用次数信息异步发送给Monitor进行统计

4.Dubbo协议(官方推荐协议)

优点:

​ 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好

缺点:

​ 大文件上传是,可能出现问题 (不使用Dubbo文件上传)

2.RMI协议

优点:JDK自带的能力

缺点:偶尔连接失败

3.Hessian协议

优点:可与原生Hessian互操作,基于HTTP协议

缺点:需要hession.jar支持,http短连接的开销大

4.Dubbo支持的注册中心
4.1.Zookeeper(官方推荐)

​ 优点:支持分布式,很多周边产品

​ 缺点:受限于Zookeeper软件的稳定性,Zookeeper是专门分布式辅助软件,稳定较优

4.2.Multicast

​ 优点:去中心化,不需要独立安装软件

​ 缺点:2.2.1 Provider和Consumer和Registry不能跨机房(路由)不能应用在商业上,只能在局域网中使用

4.3.Redis

​ 优点:支持集群,性能高

​ 优点:要求服务器时间同步,否则可能出现几圈失败问题

4.4.Simple

​ 优点:标准Rpc服务,没有兼容问题

​ 缺点:不支持集群

5.Dubbo负载均衡

集群:一个内容,部署多次,形成的整体成为集群,集群中每个个体应该部署到不同的服务器上,

伪集群:集群中内容部署到同一台服务器上,通过不同端口区分不同个体

负载均衡实在集群前提下,集群中每个节点被访问次数或频率的规则。

Dubbo内置了四个负载均衡策略,默认为Random

5.1Random

随机,随机访问集群中节点,访问概率和权重有关

5.2 RoundRobin(轮询)

轮询:访问概率和权重有关

权重(weight):占有比例,集群中每个项目部署的服务器的性能可能是不同,性能好的服务器权重应该高一些

5.3LeastActive

活跃数相同的随机,不同的活跃数高的放前面

5.4 ConsistentHash

一致性Hash,相同参数请求总数发送到一个提供者

6.负载均衡设置
1.@Reference(loadbalance = "roundRobin")
2.@Serivce dubbo提供的service
  //设置负载均衡算法
  @Serivce(loadbalance = "random")
  //设置权重
  @Service(weight = 4)
3.配置文件
  全局设置provide和consumer的负载均衡效果
  //提供者
 dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://localhost:2181
  protocol:
     port: 20884
  provider:
    weight: 1
    loadbalance: random

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐