Dubbo学习

1. 分布式系统中的相关概念

大型互联网项目架构目标

  • 高性能:提供快速的访问体验

  • 高可用:网站服务一致可以正常访问

  • 可伸缩:通过硬件的增加或减少,提高/降低处理能力。

  • 高可扩展:系统间耦合低,方便的通过新增/一处方式,增加/减少新的功能/模块。

  • 安全性:提供网站安全访问和数据加密,安全存储等策略

  • 敏捷性:随需应变,快速响应。

  • 传统项目和互联网项目

    • 传统项目:OA系统,HR系统,CRM系统
    • 互联网项目:天猫,微信,百度
    • 用户群体不一样:前者为企业员工,后者为网民。
  • 互联网项目特点:

    • 用户多
    • 流量大,并发高
    • 海量数据
    • 易受攻击
    • 功能繁杂
    • 变更快
  • 衡量网站的性能指标:

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

  • 衡量一个网站是否快:

    • 打开一个新页面一瞬间完成;页面内跳转,一刹那完成
    • 根据佛经《僧祗律》记载:一刹那者为一念,二十念为一瞬,二十瞬为一弹指,二十弹指为一罗预,二十罗预为一须臾,一日一夜有三十须臾。
    • 经过周密计算,一瞬间为0.36s,一刹那有0.018s

集群和分布式

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

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

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

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

架构演进

  1. 单体架构
  2. 垂直架构
  3. 分布式架构
  4. SOA架构
  5. 微服务架构

2. Dubbo 概述

2.1 Dubbo 概念

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

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

  • 官网:http://dubbo.apache.org

2.2 Dubbo 架构

img

3. Dubbo 快速入门

3.1 Zookeeper 安装

3.1.1 下载安装

1. 环境准备

Zookeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本

2. 上传

下载Zookeeper:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.6/

将下载的Zookeeper放到 /opt/Zookeeper 目录下

# 使用xftp或者其他工具上传zookeeper到linux服务器上
# 打开 opt目录
cd /opt
# 创建zooKeeper目录
mkdir zooKeeper
# 将zookeeper安装包移动到 /opt/zookeeper
mv apache-zookeeper-3.5.6-bin.tar.gz /opt/zookeeper/

3. 解压

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz

3.1.2 配置启动

1. 配置zoo.cfg

进入到conf目录拷贝一个zoo_sample.cfg并完成配置

#进入到conf目录
cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/
#拷贝
cp  zoo_sample.cfg  zoo.cfg

修改zoo.cfg

#打开目录
cd /opt/zooKeeper/
#创建zooKeeper存储目录
mkdir  zkdata
#修改zoo.cfg
vim /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/conf/zoo.cfg

修改存储目录:dataDir=/opt/zookeeper/zkdata

2. 启动Zookeeper

cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/bin/
# 启动
./zkServer.sh start

3. 查看Zookeeper状态

./zkServer.sh status

4. Dubbo 高级特性

1. dubbo-admin管理平台

  • dubbo-admin 管理平台,是图形化的服务管理页面
  • 注册中心中获取所有的提供者/消费者进行配置管理
  • 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能
  • dubbo-admin 是一个前后端分离的项目。前端使用Vue,后端使用springboot
  • 安装 dubbo-admin 其实就是部署该项目

2. dubbo 常用高级配置

1. 序列化

所有的实体类都需要实现Serializable接口

2. 地址缓存

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

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

3. 超时与重试

超时

  • A(服务消费者)调用B(服务提供者)的时候发生了阻塞、等待的情况,此时,服务消费者会一致等待下去。
  • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成现成的大量堆积,势必会造成雪崩
  • dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问就自动断开连接
  • 使用timeout属性配置超时时间,默认值1000,单位ms

重试

  • 设置了 超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
  • 如果出现网络抖动,则这一次请求就会失败
  • Dubbo 提供重试机制来避免类似问题的发生
  • 通过retries 属性来设置重试次数,默认为2次

4. 多版本

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

5. 负载均衡

4种策略:

  1. Random:按权重随机,默认值,按权重设置随机概率
  2. RoundRobin:按权重轮询
  3. LeastActive:最少活跃调用数,相同活跃的随机
  4. ConsistentHash:一致性Hash,相同参数的请求总是发到同一提供者。

6. 集群容错

集群容错模式:

  • Failover Cluster:失败重试。默认值。当出现失败,重试其他服务器,默认重试2次,使用retries配置。一般用于读操作
  • Failfase Cluster:快速失敗,只發起一次調用,失敗立即報錯。通常用於寫操作。
posted on 2021-06-12 15:56  caoshikui  阅读(62)  评论(0)    收藏  举报