Dubbo总结(简单)

Dubbo总结(简单)
1.Dubbo简介
Apache Dubbo时一款高性能的JavaRPC框架
RPC指的是远程过程调用,比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发
现。
2.Dubbo架构
Dubbo总结(简单)
(注意:图中虚线都是异步访问,实线都是同步访问 蓝色虚线:在启动时完成的功能 红色虚线(实线)都是程序运行过程中执行的功能)
对应的节点:
Provider:暴露服务的提供方(通过@Service注解暴露服务)注意:@service是dubbo包下的注解
Consumer : 调用远程服务的消费方(通过@Reference注解去调用对应的服务)
Registry :服务注册与发现的注册中心
Monitor :统计服务的调用次数和调用时间的监控中心
Container:服务运行容器

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给
    消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失
    败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中
    心。

3.注册中心Zookeeper(官方推荐使用zookeeper)(简单介绍):
zookeeper结构相当于一个树形目录:
Dubbo总结(简单)
流程说明:
服务提供者(Provider)启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的
URL 地址
服务消费者(Consumer)启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者
URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
监控中心(Monitor)启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者
URL 地址

4.Dubbo实现简单服务调用
4.1
生产者(provider):
(注意要在对应的服务上(Service)接口或者类中添加@Service注解)
主要配置:
//当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样
<dubbo:application name=“dubbodemo_provider” />
//连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址
<dubbo:registry address=“zookeeper://对应的安装zookeeper的Ip地址:2181”/>
// 注册 协议和port 默认端口20880
<dubbo:protocol name=“dubbo” port=“20881”></dubbo:protocol>
//扫描指定包,加入@Service注解的类会被发布为服务
<dubbo:annotation package=“com.lxs.service.impl” />
4.2
消费者(consumer)
(注意要在对应的Controller层调用时,远程注入对应的服务使用@Reference注解)
//当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样
<dubbo:application name=“dubbodemo-consumer” />
//连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址
<dubbo:registry address=“zookeeper://对应的安装zookeeper的Ip地址:2181”/>
//扫描的方式暴露接口
<dubbo:annotation package=“com.lxs.controller” />

当然,对应的Zookeeper其实是支持集群模式的,可以配置Zookeeper集群来达到Zookeeper服务的高可用,防止出现单点故障,而且对应的生产者,消费者也可以是多个,对应的port端口不能一样

对应的@Service与Reference注解底层如何实现的可以看这篇文章
Dubbo是如何解析@Service、@Reference的?
5.负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性
Hash),缺省为random随机调用。
RandomLoadBalance:随机负载均衡。随机的选择一个。是Dubbo的默认负载均衡策略。
RoundRobinLoadBalance:轮询负载均衡。轮询选择一个。
LeastActiveLoadBalance:最少活跃调用数,相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,因为越慢的 Provider 的调用前后计数差会越大。
ConsistentHashLoadBalance:一致性哈希负载均衡。相同参数的请求总是落在同一台机器上。
可以在生产者添加负载均衡,也可以在消费者添加

生产者:在@Service注解中添加配置@Service(loadbalence=“random”)
消费者:在@Reference注解中添加@Reference(loadbalence=“random”)

上一篇:【27期】Dubbo面试八连问,这些你都能答上来吗?


下一篇:1000道互联网大厂面试题:ZooKeeper+Dubbo,java教程推荐学客巴巴