Dubbo架构分析,远程方法调用,服务注册与发现,集群容错,负载均衡,SPI机制

单体架构

1.单体架构的话是所有的模块都放在一个项目中,部署的时候也是将整个项目部署到服务器中。
2.单体架构的优点有小项目开发快,成本低、容易部署。
3.存在的问题的是模块耦合严重,不易开发维护,沟通成本高。核心业务和边沿业务聚合在一起,
  容易出问题。

垂直架构

1.根据业务把项目垂直切割成多个项目,因此这种架构称之为垂直架构。
2.这种架构的方式存在的好处有:系统拆分实现了流量分担,解决了并发问题。
  方便水平扩展,负载均衡,容错率高。系统相互独立,互不影响。
3.存在的问题有:接口调用硬编码,集群负载均衡不好实现,监控不到位,调用的方式不统一。  

分布式架构(SOA)

1.它是在垂直划分的基础上,将每个项目拆分出多个具备松耦合的服务,一个服务通常以独立的形式
  存在于操作系统进程中。
2.各个服务之间通过网络调用,这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
3.在做了垂直划分以后,模块随之增多,系统之间的RPC逐渐增多,维护的成本也越来越高,
  一些通用的业务和模块重复的也越来越多,这个时候上面提到的接口协议不统一、服务无法监控、服务的负载
  均衡等问题更加突出。
4.解决上述问题:将通用的业务逻辑下沉到服务层,通过接口暴露,供其他业务场景调用。
  同时引入了阿里巴巴开源的Dubbo,一款高性能、轻量级的开源Java RPC框架,
  它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及
  服务自动注册和发现。  
5.优点:使用Dubbo框架面向接口远程调用屏蔽了底层调用细节。
		(应用层,基础业务层,基础服务层,存储层)业务分层后架构清晰,模块职责单一,扩展性强。
		数据隔离,权限回收,数据访问都通过接口 让系统更加稳定 安全。
		应用不做内存级缓存,而是存入DB。
		服务责任确定,可以确定责任人保证服务质量和稳定。
6.问题:服务拆分粒度要控制好,不然会引发超时分布式等问题。
		接口数量不好控制,容易引发接口爆炸。
		调用链路过长。

Dubbo概述

1.Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开
  源Java RPC框架,可以和Spring框架无缝集成。(2.6版本之前属于阿里,2.6之后由Apache维护)。

Dubbo角色介绍:

1.Provider:暴露服务的服务提供方。
2.Consumer:调用远程服务的服务消费方。
3.Registry:服务注册与发现的注册中心。
4.Monitor:统计服务的调用次数和调用时间的监控中心。
5.Container:服务运行容器 负责启动 加载 运行服务提供者。

Dubbo调用流程:

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

Dubbo配置方式介绍

1.注解: 基于注解可以快速的将程序配置,无需多余的配置信息,包含提供者和消费者。
2.XML: 一般这种方式我们会和Spring做结合,相关的Service和Reference均使用Spring集成后的。
  通过这样的方式可以很方便的通过几个文件进行管理整个集群配置。可以快速定位也可以快速更改。
3.基于代码方式: 基于代码方式的对上述配置进行配置。这个使用的比较少,这种方式更适用于自己
  公司对其框架与Dubbo做深度集成时才会使用。

Dubbo管理控制台 dubbo-admin

1.作用:服务管理、路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能。
2.我们在开发时,需要知道Zookeeper注册中心都注册了哪些服务,有哪些消费者来消费这些服务。
  我们可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,原来是war(2.6版本以前)包需
  要部署到tomcat即可。现在是jar包可以直接通过java命令运行。  
3.安装步骤: 
	(1)下载项目:https://github.com/apache/dubbo-admin
	(2)修改项目下的dubbo.properties文件(dubbo.registry.address,dubbo.admin.root.password,
		 dubbo.admin.guest.password)
	(3)到项目所在的路径使用mvn打包:mvn clean package -Dmaven.test.skip=true
	(4)运行:java -jar 对应的jar包
	(5)访问http://IP:端口,输入用户及密码,点击菜单查看消费和注册者信息。

Dubbo配置项

1.dubbo:application(对应Java对象:ApplicationConfig)
	(1)name: 当前应用名称,我们使用时也会根据这个参数来进行聚合应用请求。
	(2)owner: 当前应用程序的负责人,可以根据这个配置确定对应的责任人。
	(3)qosEnable: 是否启动QoS 默认true。
	(4)qosPort: QoS绑定的端口 默认22222。
	(5)qosAcceptForeignIp: 是否允许远程访问 默认是false.
2.dubbo:registry(对应Java对象:RegistryConfig, 注册中心配置)	
	(1)id:当存在多个注册中心时,可根据此配置选择对应的注册中心。
	(2)address:注册中心的地址。
	(3)protocol:注册中心所使用的协议,如:”zookeeper://xx.xx.xx.xx:2181“
	(4)timeout:超时时间,与注册中心不在一个机房的时候应该考虑设大该值。
3.dubbo:protocol(对应Java对象:ProtocolConfig, 指定服务进行数据传输所使用的协议)
	(1)id: 大型项目中可能会因为技术栈的不同会选择使用不同的协议。多个协议使用时需要指定。
	(2)name: 指定协议名称。默认使用 dubbo。
4.dubbo:service(对应Java对象:ServiceConfig,用于指定需要暴露的服务)
	(1)interface : 指定对外暴露的接口.
	(2)ref : 具体实现对象的引用,指的在Spring容器中的bean。
	(3)version:服务版本,消费者在消费时也会指定与生产者对应的版本好调用。
5.dubbo:reference(Java对象:ReferenceConfig,生产者的配置:生成远程服务代理)。
	(1)id:指定该Bean在注册到Spring中的id。
	(2)interface:服务接口名.
	(3)version:指定当前服务版本,与服务提供者的版本一致。
	(4)registry:指注册中心地址。在 dubbo:registry 中所声明的id。
6.dubbo:method(Java对象:MethodConfig指定具体方法级别在进行RPC操作时候的配置)
	(1)name:指定方法名称,用于对这个方法名称的RPC调用进行特殊配置。
	(2)async:是否异步 默认false。

dubbo:service和dubbo:reference使用详解

(1)mock:用于在方法调用出现错误时,当做服务降级来统一对外返回结果,需要实现一个对应的
		  以mock结尾的降级实现类。
(2)timeout:用于指定调用的超时时间,以生产者的时长决定,生产/消费者都指定的超时时间的
			  情况下以消费端为主,防止服务受损。
(3)check:用于在启动时,检查生产者是否有该服务。默认为false。
(4)retries:调用失败情况下的重试机制,重试调用时需要考虑幂等和生产者保护的问题	
(5)executes:用于在提供者做配置,来确保最大的并行度。

JDK的SPI机制

1.SPI 是JDK内置的一种服务提供发现机制。 被很多框架用于扩展实现,是种动态替换发现的机制。
2.使用SPI机制的优势是实现解耦,第三方服务模块的装配控制逻辑与调用者的业务代码分离。
3.实现过程:
	(1)创建接口的具体实现,并携带一个无参构造,在MATE-INF/servers目录下创建一个以接口
		 为文件名称,具体实现类的全限定类名为内容的文件。
	(2)SPI实现类所在项目的jar包必须在调用的classpath资源下。
	(3)调用者通过java.util.ServiceLoad加载MATE-INF/services包下的扩展类,并加载到JVM中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值