Dubbo基础

Dubbo

互联网项目特点:

  • 用户多
  • 流量大、并发高
  • 流量数据
  • 易受攻击
  • 功能繁琐
  • 变更快

大型互联网项目架构目标:

  • 高性能:提供快速的访问体验
  • 高可用:网站服务一直可以正常访问
  • 可伸缩性:通过硬件增加/减少
  • 高扩展性:
  • 安全性:
  • 敏捷性:

衡量网站的性能指标:

  • 响应时间:指执行一个请求从开始到最后收到响应数据所花费的总体时间。
  • 并发数:指系统同时能处理的请求数量。
  • 并发连接数:指的是客户端向服务器发起请求,并建立了TCP连接。每秒钟服务器连接的总TCP数量
  • 请求数:也称为QPS(Query Per Second) 指每秒多少请求.
  • 并发用户数:单位时间内有多少用户
  • 吞吐量:指单位时间内系统能处理的请求数量。
  • QPS:Query Per Second 每秒查询数。
  • TPS:Transactions Per Second 每秒事务数。
  • 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束
  • 计时,以此来计算使用的时间和完成的事务个数。
  • 一个页面的一次访问,只会形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,就会有多个QPS

集群和分布式

集群:很多“人”一起 ,干一样的事。

  • 一个业务模块,部署在多台服务器上

分布式:很多“人”一起,干不一样的事。这些不一样的事,合起来是一件大事。

  • 一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上。

Dubbo概述

一个高性能、轻量级的java RPC框架

Dubbo是阿里巴巴公司开源的一个高性能、轻量级的 Java RPC 框架。

致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。

Dubbo快速入门

Dubbo官方推荐使用Zookeeper作为注册中心

spring和springmvc整合:

服务提供者:

1.需要导包:

<properties>
        <spring.version>5.1.9.RELEASE</spring.version>
        <dubbo.version>2.7.4.1</dubbo.version>
        <zookeeper.version>4.0.0</zookeeper.version>
</properties>

<dependencies>
    <!-- servlet3.0规范的坐标 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--spring的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!--springmvc的坐标-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!--日志-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.21</version>
    </dependency>
        <!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!--ZooKeeper客户端实现 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${zookeeper.version}</version>
    </dependency>
    <!--ZooKeeper客户端实现 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${zookeeper.version}</version>
    </dependency>
</dependencies>

2.创建一个service和实现类

3.创建spring配置文件,扫描包

服务消费者:

这是一个maven_web工程

1.导包

多加一个service依赖,加一个tomcat插件

2.配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
<!-- spring -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
	 
<!-- Springmvc -->	 
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

3.编写controller

@RestController
@RequestMapping("/user")
public class UserController {

    /*//注入Service
    @Autowired*/
    //远程注入
    @Reference
    private UserService userService;


    @RequestMapping("/sayHello")
    public String sayHello(){
        return userService.sayHello();
    }

    @RequestMapping("/find")
    public User find(int id){
        return userService.findUserById(id);
    }

}

4.配置spring配置

  • 开启mvc注解
  • 扫描包

dubbo-admin开启与使用

切换到目录

dubbo-Admin-develop\dubbo-admin-distribution\target>

执行下面的命令启动 dubbo-admin,dubbo-admin后台由SpringBoot构建。

java -jar .\dubbo-admin-0.1.jar

在这里插入图片描述

登录网址:http://localhost:8081/#/

dubbo 高级特性-序列化

两个机器传输数据,如何传输Java对象?

dubbo 内部已经将序列化和反序列化的过程内部封装了,我们只需要在定义pojo类时实现Serializable接口即可

一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块。

注意:实体类必须实现 Serializable接口

dubbo 高级特性-地址缓存

注册中心挂了,服务是否可以正常访问?

可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。当服务提供者地址发生变化时,注册中心会通知服务消费者。

dubbo 高级特性-超时与重试

服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。

dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。使用timeout属性配置超时时间,默认值1000,单位毫秒。

如果出现网络抖动,则这一次请求就会失败。Dubbo 提供重试机制来避免类似问题的发生。通过 retries 属性来设置重试次数。默认为 2 次。

dubbo 高级特性-多版本

灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。dubbo 中使用version 属性来设置和调用同一个接口的不同版本

命令:

@Service(version = "v2.0")

dubbo 高级特性-负载均衡

命令:

@Service(loadbalance = "random")

负载均衡策略(4种) :

• Random :按权重随机,默认值。按权重设置随机概率。

• RoundRobin :按权重轮询

• LeastActive:最少活跃调用数,相同活跃数的随机。

• ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。

dubbo 高级特性-集群容错

目的:处理异常请求

命令:

集群容错模式:

• Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作

• Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。

• Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。

• Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

• Forking Cluster :并行调用多个服务器,只要一个成功即返回。

命令:

集群容错模式:

• Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作

• Failfast Cluster :快速失败,只发起一次调用,失败立即报错。通常用于写操作。

• Failsafe Cluster :失败安全,出现异常时,直接忽略。返回一个空结果。

• Failback Cluster :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

• Forking Cluster :并行调用多个服务器,只要一个成功即返回。

• Broadcast Cluster :广播调用所有提供者,逐个调用,任意一台报错则报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值