简单了解系统架构、Dubbo和分布式

软件架构概述

软件架构的发展经历了单体架构 —> 垂直架构 —> SOA架构 —> 微服务架构的演进过程。

单体架构

在这里插入图片描述
作为最开始的开发方式理解起来也非常简单,就是所有功能都在一个项目内。
优点:开发成本低,开发周期短,适合小型项目。
缺点:不利于后期维护,大型项目不宜开发,扩展,只能使用一种语言进行开发,性能提高只能通过增加节点进行扩展,成本高。

垂直架构

在这里插入图片描述
为了提高可维护性,易扩展性,提高开发效率,出现了垂直架构,按照功能模块进行切割,将一个项目按照功能划分为几个独立项目。
优点:相比较单体架构来说易于扩展,易于维护,开发效率快,可以使用多种语言同步开发。
缺点:依然存在代码冗余,难以确认功能模块的功能重复性。

SOA架构

在这里插入图片描述
SOA即面向服务架构,可以根据需求通过网络进行分布式部署,组合,使用。每一个服务以都独立部署在不同的系统上。
将原来的每一个功能模块按照业务逻辑拆分成不同的服务。实现业务逻辑的复用。
优点:重复功能抽取为服务,增加开发效率,减少代码冗余
缺点系统和服务之间耦合度高

微服务架构

在这里插入图片描述
将系统服务划分更为细致,抽取出来独立的微服务,遵循单一原则,采用轻量级框架进行传输。
优点:有利于提高开发效率,可以针对不同服务定制不同方案,适用于当代互联网时代。
缺点:维护成本过高,技术要求高,对团队挑战更大。

分布式概述

分布式是由多台计算机通过计算机网络进行连接形成一个庞大的软件体系。因为是通过软件在网络上建立的连接,所以拥有着高内聚、低耦合的特性。
分布式的优点也极其明显,因为软件被拆分成一个个服务,所以非常灵活,可扩展性也非常优秀,同时可以达到资源共享,也保证的服务器的访问速度,并且可以以此为基础搭建集群提升可用性。
分布式的缺点也同样明显,维护困难,网络传输、负载等问题,开放式的系统特性让分布式计算系统存在数据安全性风险

Dubbo概述

Dubbo是一款RPC框架,用来实现远程服务调用。可以解决远程方法调用,智能容错,负载均衡,以及服务自动注册和发现

Dubbo架构

在这里插入图片描述
节点说明

节点说明
Provider服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器

虚线都是异步访问,实线都是同步访问
蓝色虚线:在启动时完成的功能
红色虚线(实线)都是程序运行过程中执行的功能

调用步骤说明:

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

Dubbo技术使用

spring框架与Dubbo框架进行了整合,可以无缝集成进spring中。
在体验Dubbo分布式架构的时候,首先要明白服务提供方和服务消费方,所以在spring的配置上要区分开来。
首先导入相关jar包

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <versioqn>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
  </dependency>
<!-- dubbo相关 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.7</version>
  </dependency>
  <dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
  </dependency>
  <dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.12.1.GA</version>
  </dependency>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
  </dependency>

导入jar包后,在spring配置文件中加上以下配置

服务提供方的spring配置

	<!-- 服务名称,用于服务注册中心记录管理-->
	<dubbo:application name="dubbodemo_provider" />
	<!-- 配置注册中心zookeeper的地址和端口-->
	<dubbo:registry address="zookeeper://192.168.134.129:2181"/>
	<!-- 配置服务传输协议和端口,默认是20880-->
	<dubbo:protocol name="dubbo" port="20880"/>
	<!-- 配置dubbo注解驱动,扫描指定包,加入dubbo的@Service注解的类会被发布为服务-->
	<dubbo:annotation package="com.dyh.service.impl" />

服务消费方的spring配置

	<!-- 服务名称,用于服务注册中心记录管理,消费者和提供者应用名不要相同 -->
	<dubbo:application name="dubbodemo-consumer" />
	<!-- 配置注册中心zookeeper的地址和端口-->
	<dubbo:registry address="zookeeper://192.168.134.129:2181"/>
	<!-- 配置dubbo注解驱动,扫描指定包,加上@Reference的属性会使用提供方对应的服务进行注入-->
	<dubbo:annotation package="com.dyh.controller" />

当开启两个服务器时,注意两个服务器避免端口相同,导致端口绑定失败。
开启zookeeper服务注册。
开启服务提供方。
开启服务消费方。
访问消费方接口,成功调用。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值