一:软件架构的演练过程【了解】

单体应用架构--->垂直应用架构--->分布式架构(SOA架构/微服务架构)`

1.单体应用架构

单体应用架构,就是将一个系统的多个模块做成一个项目,然后部署到tomcat服务器上

优点:

项目架构简单,开发,测试,部署成本低;

项目部署在一个节点上,后期维护方便

缺点:

项目模块之间紧密耦合,容错率低

无法针对不同模块进行针对的扩容

2.垂直应用架构

垂直应用架构,就是将原来的一个系统拆成成多个工程,然后每个工程部署在tomcat服务器上

* 优点:
    - 可以针对不同模块进行针对性的扩容
    - 一个系统的问题不会影响到其他系统,提高容错率
    
* 缺点:
    - 系统之间相互独立,会有重复的开发任务(造成了代码冗余)

3.分布式架构(思想)

分布式架构就是指将服务层(service)单独启动,并部署在tomcat上对外提供服务,在controller中可以通过远程调用访问服务层中的方法

* 优点:
    - 抽取公共的功能为服务层,提高代码复用性

* 缺点:    
    - 调用关系错综复杂,难以维护,宕机以后不能及时更换

1.SOA架构

SOA结构,在分布式架构的基础上,增加一个调度中心对系统进行实时管理。

* 集群:
    多台服务器重复完成同一个任务,即同一个任务部署在多台服务器上

* 分布式:
    多台服务器协同完成同一个任务,即同一个任务拆分为多个子任务,多个子任务部署在多台服务器上协同完成同一个任务

2.微服务架构(SpringCloud)

在这里SpringCloud先有一个概念,后边有挺多东西要学

架构体系先了解到这里

二:dubbo使用

首先我们看soa架构,里边要有调用中心,(不用担心,就相当于一个软件),最重要的就是rpc远程调用,dubbo就是rpc远程调用的一种框架

注意rpc 并不是一个新的技术,而是指整个网络远程调用过程

1.Dubbo简介

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。

官网地址:Apache Dubbo

发展历程

  • Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源

  • 在很短时间内,Dubbo就被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等

  • 由于阿里策略变化,2014年10月Dubbo停止维护。随后部分互联网公司公开了自行维护的Dubbo版本,比较著名的如当当DubboX

  • 经过三年的沉寂,在2017年9月,阿里宣布重启Dubbo项目,并决策在未来对开源进行长期持续的投入

  • 随后Dubbo开始了密集的更新,并将停摆三年以来大量分支上的特性及缺陷修正快速整合

  • 2018.2月,阿里将Dubbo捐献给Apache基金会,Dubbo成为Apache孵化器项目

RPC介绍

  • RPC全称为remote procedure call,即远程过程调用

  • 简单的讲,RPC可以让我们像调用本地方法一样来调用远程方法

  • 需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程

  • Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等

RMI、Hessian等一些远程调用 可以去了解

2.Dubbo实现RPC调用的原理【面试】

节点 角色名称
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心(查看服务状态)
Container 服务运行容器

0. 服务容器负责启动,加载,运行服务提供者

  1. 服务提供者在启动时,向注册中心注册自己提供的服务

  2. 服务消费者在启动时,向注册中心订阅自己所需的服务

  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推 送变更数据给消费者。

  4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用, 如果调用失败,再选另一台调用。

  5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计 数据到监控中心。

特别重要

3.SpringBoot整合Dubbo【重要】

这里应该还有Spring整合Dubbo 不过SpringBoot整合更简单写,企业开发用的更多一些

1.首先,先要有注册中心,这里用的是zookeeper

然后启动,就ok了,这里只是当一个注册中心

整体项目结构

2.父项目导入依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version>
</parent><properties><java.version>1.8</java.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--dubbo的起步依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.5</version></dependency><!-- zookeeper的api管理依赖 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.2.0</version></dependency><!-- zookeeper依赖 --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.12</version></dependency>
</dependencies>

接口:

public interface HelloService {String hello(String name);
}

Impl:


@Service//  dubbo的Service
public class HelloServiceImpl implements HelloService {@Overridepublic String hello(String name) {System.out.println(222);return "hello:" + name;}
}

提供者的启动类

@SpringBootApplication
public class ProvierApp1 {public static void main(String[] args) {SpringApplication.run(ProvierApp1.class,args);}
}

配置文件:(application.yml)

dubbo:application:name: springboot-provider1registry:address: zookeeper://127.0.0.1:2181protocol:name: dubboport: 20080scan:base-packages: com.itheima.service

消费者:

@RestController
public class HelloController {@Referenceprivate HelloService helloService;@GetMapping(value = "/name")public ResponseEntity hello(@RequestParam String name){String hello = helloService.hello(name);return ResponseEntity.ok(hello);}}

消费者的启动类:


@SpringBootApplication
public class ConsumerApp1 {public static void main(String[] args) {SpringApplication.run(ConsumerApp1.class,args);}
}

配置文件:(application.yml)

dubbo:application: # 应用名称name: springboot-consumer1registry: # 连接注册中心address: zookeeper://127.0.0.1:2181scan:base-packages: com.itheima.serviceconsumer: timeout: 5000retries: 0

4.dubbo使用的一些小细节【重点】

1.扫描包:

<!--服务提供者和服务消费者都需要配置包扫描,
作用是扫描指定包(包括子包)下的类中的注解: @Service  @Refrences ...-->
<dubbo:annotation package="com.itheima.dubbo" />

scan:base-packages: com.itheima.service

2.协议:

<!--
    在服务提供者一方配置,可以指定使用的协议名称和端口号。
    其中RPC支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。
    port:20880默认端口 可以省略
    后期如果服务比较多:我们可以选择:20881 20882 20883....
-->
<dubbo:protocol name="dubbo" port="20880"/>

yml配置文件:

dubbo:

protocol:name: dubboport: 20080

3.启动时检查:

Dubbo在启动时会检查服务提供者所提供的服务是否可用,默认为true

通过配置服务消费者的统一规则来关闭服务检查

<dubbo:consumer check="false"/>    开发屏蔽(false)  上线开启(true)

consumer:check: false

4.dubbo的超时和重试【面试】

Dubbo在通信时,由于网络或服务端不可靠,会导致调用过程中出现不确定的阻塞状态(超时)

为了避免超时导致客户端线程挂起处于一致等待状态,必须设置超时时间和请求重试,默认为1S超时和重试2次数

<!--配置在消费者端一方: 默认的超时时间是1s ,默认的重试次数是2次--> 
<dubbo:consumer timeout="5000" retries="0" />

Dubbo框架基本使用相关推荐

  1. 如何开启Dubbo框架内部的日志?

    为什么80%的码农都做不了架构师?>>>    欢迎加入DUBBO交流群:259566260 这里将对如何在自己的项目里面开启dubbo框架自己的日志,并对输出的日志进行控制.在讲这 ...

  2. SpringCloud微服务:基于Nacos组件,整合Dubbo框架

    源码地址:GitHub·点这里 || GitEE·点这里 一.基础组件简介 1.Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服 ...

  3. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...

  4. 【华为云技术分享】云图说 | Dubbo框架应用也可以使用Istio服务网格

    Dubbo作为一款RPC 框架,在国内有一定的存量用户.如何让企业级微服务应用使用原生的能力,通过Kubernetes和Istio进行部署运行和监控,是很多企业开发和运维团队非常关心的问题. 应用服务 ...

  5. Java手写dubbo框架

    前言 在对dubbo有了较为深入的使用和理解后,来尝试从dubbo框架的角度重新认识下它,对照着dubbo官方的这张图进行反复的理解后,我们可以从已有掌握的技术出发,来尝试编写一个简单的dubbo实现 ...

  6. Dubbo框架的使用

    如今很多项目规模逐步增加,同时也需要减轻服务器的压力,提高性能,很多项目都使用了分布式架构,实现分布式架构的方式有很多,这里就简要介绍一下使用Dubbo框架实现分布式,该框架是由阿里开发的,目前应用在 ...

  7. Springboot 最简单的整合Dubbo框架实战案例

    分布式框架,目前比较热门的是springcloud和dubbo,虽然本人也是用cloud比较多,但是避免不了,有的项目就是需要用dubbo. 那么现在就给大家整一篇,简单清晰的spirngboot从零 ...

  8. SpringBoot集成Dubbo框架

    1. Dubbo框架 Dubbo框架是一个高性能.重量轻.基于java的RPC框架.Dubbo提供了三个关键功能,包括基于接口的远程调用.容错和负载平衡,以及自动服务注册和发现.Dubbo可以和Spr ...

  9. Dubbo框架整体认知

    Dubbo是什么? Dubbo是Apache开源基金会顶级项目,最开始是由阿里巴巴开源并贡献给Apache.他的本质是一个高性能分布式Rpc服务调用框架.最新版本已经到了3.0,具备应用级服务注册和发 ...

  10. 浅谈对Dubbo框架的认识

    目录 Dubbo是什么 Dubb服务注册和上下线感知 工作前两年一直在使用的基本都是Cloud体系里的组件,都是基于cloud体系内提供的 Feign 组件来进行内部服务通信.最近这半年接触了新的技术 ...

最新文章

  1. 现在的教育:感慨之一
  2. HTTP Status 405 – Method Not Allowed HTTP method GET is not supported by this URL
  3. 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法
  4. maven中properties标签定义变量
  5. Quartz框架中的Listener
  6. 策略模式应用场景和uml_策略模式
  7. ModalPopupExtender控件主要有两种使用方式:客户端使用方式和服务器端使用方式
  8. 高并发中计数器的实现方式有哪些?
  9. Facebook 推出查找SSRF 漏洞的新工具
  10. 86 arduino 电机yl_Arduino 直流电机
  11. 制作的LINUX安装软件,竟然导致系统无法启动
  12. oracle grant的用法,oracle grant总结
  13. android imagebutton的点击事件,Android 点击ImageButton时有“按下”的效果的实现
  14. Django中文文档-The Django Book
  15. 王建国——2020年最受人民喜爱的艺术家
  16. 浏览器的三个精度Bug
  17. excel读取 hutool_Mr · 范
  18. 离散数学 课时四 谓词逻辑基本概念
  19. [Unity3D]添加音效说明
  20. css引入第三方字体(等宽非衬线)

热门文章

  1. 【论文阅读】【基于方面的情感分析】Deep Context- and Relation-Aware Learning for Aspect-based Sentiment Analysis
  2. 2011年5月23日
  3. 交换代数 -- 诺特环
  4. vml与svg技术初学
  5. Qt软件发布(版本信息,Release版程序,代码打包,制作安装包)
  6. python管理系统web版_基于Python Flask的web日程管理系统
  7. 企业都应该使用开源的 POS 系统的必要性
  8. Service概述 生命周期 IBinder
  9. 【北京航空航天大学】考研初试复试资料分享
  10. 【sfu】开启 rtp头扩展的extmap-allow-mixed模式