Dubbo的学习

什么是分布式系统

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个单个相关系统

随着互联网的发展,网站应用的规模不断的扩大,常规的垂直应用框架已无法应对,分布式服务架构以及流动计算机架构势在必行,需要一个治理系统确保架构有条不紊的演进

单一应用框架

​ 请求量小

缺点:扩展不容易,协同开发不易,不利于维护。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DcdPq2bF-1643252170544)(C:\Users\GJX\Desktop\IMG_9781.PNG)]

垂直应用架构

​ 优点:分工合作容易,性能扩展容易

缺点:界面和业务逻辑没有分开,应用不能完全独立,大量应用之间需要交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lkpx2mBW-1643252170545)(C:\Users\GJX\Desktop\IMG_9780.PNG)]

分布式架构

将界面和业务逻辑分离(RPC:远程过程调用)

优点:当只改变界面时,只需要重新部署,用户web的服务器

一个好的分布式框架帮我们来解决RPC,能极大的简化开发

流动计算架构:基于访问压力实时的管理集群的容量,提高集群的利用率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVVOXWLG-1643252170546)(C:\Users\GJX\Desktop\IMG_9783.PNG)]

RPC

什么是RPC?

(Remote Procedure Call)是指远程过程调用,他是一种技术思想,而不是规范。他允许程序调用另一个地址空间(通常是共享网络的另一台计算机)的过程和函数,不是程序员显示编码这个远程调用的细节。既程序员无论是调用本地的还是远程的函数,本质上编写的代码调用基本相同;

RPC框架:

dubbo ,gRPC,Thrift,HSF(High Speed Service Framework)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNpLLzdu-1643252170546)(C:\Users\GJX\Desktop\IMG_9784.PNG)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r6ycUqUP-1643252170547)(C:\Users\GJX\Desktop\IMG_9785.PNG)]

dubbo支持的协议:

dubbo ,hessian,mi,http,webservice,thrift,memcached,redis,dubbo官方推荐使用dubbo协议。dubbo默认端口是20880.

使用dubbo协议,在spring配置文件中加入

<dubbo:protocol name="duboo" port="20880">

dubbo官方推荐使用的项目结构如下:

​ 1)服务提供者工程(实现接口工程中的业务接口)web工程

​ 2)服务消费者工程(消费服务提供者提供的业务接口)web工程

​ 3)接口工程(业务接口和实现类)java工程

注册中心Zookeeper

对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量,类型也不断的膨胀;对于消防服务方,,他最关心的如何获取到他所需的服务,而面对复杂的应用系统,需要管理大量的服务调用。

​ 而且,对于服务的提供方和服务的消费者方来说,他们还有可能兼具这两种角色,即需要提供服务,又需要消费服务。通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型:

Multicast注册中心:组播方式

Redis注册中心:使用Redis作为注册中心

Simple注册中心:就是一个dubbo服务,作为注册中心,提供查找服务的功能。

Zookeeper注册中心:使用Zookeeper作为注册中心(推荐使用)

注册中心工作方式

服务提供者向注册中心注册服务

消费者在注册中心取这个服务

Zookeeper是一个高性能的:分布式,开发源码的分布式应用程序协调服务。简称zk。Zookeeper是翻译过来的动物管理员,可以理解为Windows中的资源管理器或者注册表。是一个树形结构,这种树形结构和标准文件相似。Zookeeper树中的每个节点被称为znode,和文件系统的目录树一样,Zookeeper树中的每个节点可以拥有字节点,每个节点表示一个唯一服务资源。Zookeeper运行需要java环境。

下载安装文件

官网下载地址:http://zookeeper.apache.org

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAsKNV8f-1643252170548)(C:\Users\GJX\AppData\Roaming\Typora\typora-user-images\image-20211203112154600.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6MoPiyH-1643252170548)(C:\Users\GJX\AppData\Roaming\Typora\typora-user-images\image-20211203112225443.png)]

Dubbo配置原则

在服务提供者配置访问参数。因为服务提供者更了解服务的各种参数。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明服务提供者名称-->
    <dubbo:application name="zookeeperprovider"/>
<!--    指定协议,和端口号-->
    <dubbo:protocol name="dubbo" port="20880" />
<!--    指定注册中心地址-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
<!--    暴露服务-->
    <dubbo:service interface="com.gjx.dubbo.service.SomeService" ref="someServiceImpl" timeout="35000" />
<!--    加载接口实现类-->
    <bean id="someServiceImpl" class="com.gjx.dubbo.service.impl.SomeServiceImpl"/>
</beans>

服务提供者对服务的复杂程度更了解,能更确定超时的时间

关闭检查

dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及时的发现问题,默认check=true。通过check=“false”关闭检查,

比如:测试时,有些服务不关心,或者出现循环依赖,必须有一方先启动。

例如:关闭某个服务的启动时检查

<dubbo:reference interface="com.foo.BarService" check="false"/>

例2:关闭注册中心启动检查时

<dubbo:registry check="false"/>

默认启动服务时检查注册中心存在并已运行,注册中心不启动会报错

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--声明服务消费者名称-->
    <dubbo:application name="zookeeperconsumer"/>

<!--    指定注册中心-->
    <dubbo:registry address="zookeeper://localhost:2181"/>

<!--    引用远程接口服务-->
    <dubbo:reference id="someService" interface="com.gjx.dubbo.service.SomeService" check="false" />///
</beans>

重试次数(没用)

消费者访问提供者,如果访问失败,则切换重试访问其他服务器,但重试会带来更长的延迟。访问的时间变长,用户体验较差,多次访问重新访问服务器有可能访问成功,可通过reteries=“2” 来设置重试次数

<dubbo:service retries="2"/>
或者
<dubbo:reference retries="2"/>

通常不设置

超时时间

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时),为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间,

timeout:调用远程服务超时时间(毫秒)

版本号(工作中肯定会使用到的)

每个接口都应该定义一个版本号,为后续不兼容升级提供可能。当一个接口有不同的实现,项目早期使用的一个实现类,之后创建接口的新的实现类。区分不同的接口实现使用version。

一个接口可以有多个实现类

provide:
<!--    暴露服务-->
    <dubbo:service interface="com.gjx.dubbo.service.SomeService" ref="someServiceImpl" timeout="35000" version="1.0" />

    <dubbo:service interface="com.gjx.dubbo.service.SomeService" ref="newSomeServiceImpl" timeout="35000"  version="2.0"/>



consumer:
<!--    引用远程接口服务-->
    <dubbo:reference id="someService" interface="com.gjx.dubbo.service.SomeService" check="false" version="1.0"/>

    <dubbo:reference id="newsomeService" interface="com.gjx.dubbo.service.SomeService" check="false" version="2.0"/>



controller:

@Controller
public class SomeController {
    @Autowired
    private SomeService someService;
    @Autowired
    private SomeService newsomeService;
    @RequestMapping(value = "/hello1")
    public String hello1(Model model){
        String hello = someService.hello();
        model.addAttribute("hello",hello);
        return "hello";
    }

    @RequestMapping(value = "/hello2")
    public String hello2(Model model){
        String hello = newsomeService.hello();
        model.addAttribute("hello",hello);
        return "hello";
    }


    @RequestMapping(value = "/user1")
    public String user1(Model model){
        User user = someService.queryUserById(3);
        model.addAttribute("user",user);
        return "user";
    }

    @RequestMapping(value = "/user2")
    public String user2(Model model){
        User user = newsomeService.queryUserById(3);
        model.addAttribute("user",user);
        return "user";
    }
}


监控中心

什么是监控中心

dubbo的使用,只需要有注册中心,消费者,提供者,这是三个就可以使用了,但是并不能看到那些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin。通过dubbo-admin可以对消费者和提供者进行管理,可以在dubbo应用部署动态调整,服务的管理。

dubbo-admin

图形化的服务管理页面:安装时需要指定注册中心地址即可,就可从注册中心获取到所有的提供者/消费者进行配置管理

下载地址:https://github.com/apache/incubator-dubbo-ops

需要手工编译才能使用

执行:到dubbo-admin-0.0.1-SNAPSHOT.jar目录cmd执行 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

到浏览器:输入http://localhost:7001访问监控中心-控制台

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n9sM1NKX-1643252170549)(C:\Users\GJX\AppData\Roaming\Typora\typora-user-images\image-20211204162833752.png)]

Dubbo和springcloud的不同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值