Dubbo【概述】
一、概念
1.Dubbo介绍
Dubbo是阿里巴巴的一个开源的高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo框架,是基于容器运行的。容器是Spring。
官网:http://dubbo.apache.org/
阿里巴巴已经将dubbo框架捐献给了Apache软件基金会
2.单体架构
单体架构也称之为单体系统或者是单体应用。就是一种吧系统中所有的功能,模块耦合在一个应用中的架构方式。
其优点为:
项目易于管理,部署简单
缺点:
测试成本高,可伸缩性差,可靠性差,迭代困难,跨语言程度差,团队协作难
3.SOA架构
面向服务的架构(SOA-Service-Oriented Architecture)是一个组件模型,它将应用程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台,操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
4.RPC远程过程调用
远程过程调用协议(Remote Procedure Call Protocol),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式的程序在内的应用程序更加容易。
二、Dubbo框架结构图
1.Dubbo角色介绍
1.1registry
注册中心. 是用于发布和订阅服务的一个平台.用于替代 SOA 结构体系框架中的 ESB 服务总线的。
1.1.1发布
开发服务端代码完毕后, 将服务信息发布出去. 实现一个服务的公开.
1.1.2订阅
客户端程序,从注册中心下载服务内容 这个过程是订阅.
订阅服务的时候, 会将发布的服务所有信息,一次性下载到客户端.客户端也可以自定义, 修改部分服务配置信息. 如: 超时的时长, 调用的重试次数等.
1.2consumer
服务的消费者, 就是服务的客户端.
消费者必须使用 Dubbo 技术开发部分代码. 基本上都是配置文件定义.
1.3provider
服务的提供者, 就是服务端.
服务端必须使用 Dubbo 技术开发部分代码. 以配置文件为主.
1.4container
容器. Dubbo 技术的服务端(Provider), 在启动执行的时候, 必须依赖容器才能正常启动.
默认依赖的就是 spring 容器. 且 Dubbo 技术不能脱离 spring 框架.
在 2.5.3 版本的 dubbo 中, 默认依赖的是 spring2.5 版本技术. 可以选用 spring4.5 以下版本.
在 2.5.7 版本的 dubbo 中, 默认依赖的是 spring4.3.10 版本技术. 可以选择任意的 spring版本.
1.5monitor
监控中心,是 Dubbo 提供的一个jar工程.
主要功能是监控服务端(Provider)和消费端(Consumer)的使用数据的. 如: 服务端是什么,有多少接口,多少方法, 调用次数, 压力信息等. 客户端有多少, 调用过哪些服务端, 调用了多少次等.
2.Dubbo架构图的执行流程
2.1Dubbo执行流程
- start:启动Spring容器时,自动启动Dubbo的Provider
- register:Dubbo的Provider在启动后自动回去注册中心注册内容,注册的内容包括:
Provider 的 IP
Provider 的端口
Provider 对外提供的接口列表,哪些方法,哪些接口
Dubbo 的版本
访问 Provider 的协议
- subscribe:订阅,当Consumer 启动时,自动去Registry获取到已注册的服务的信息
- notify:通知,当Provider的信息发生变化时,自动由Registry向Consumer推送通知。
- invoke:调用,Consumer 调用Provider中方法
同步请求,消耗一定性能,但是必须是同步请求,因为需要接收调用方法后的结果
- count:次数,每隔2分钟,provider 和 consumer 自动向Monitor 发送访问次数,Monitor进行统计
3.Dubbo支持的协议
3.1Dubbo协议(官方推荐协议)
特点 | 说明 |
---|---|
优点 | 采用 NIO 复用单一长连接,并使用线程池并发处理请求 减少握手和加大并发效率,性能较好(推荐使用) |
缺点 | 大文件上传时,可能出现问题(不使用Dubbo文件上传) |
3.2RMI(Remote Method Invocation)协议
特点 | 说明 |
---|---|
优点 | JDK 自带的能力。可与原生 RMI 互操作,基于TCP协议 |
缺点 | 偶尔连接失败 |
3.3Hessian
特点 | 说明 |
---|---|
优点 | 可与原生 Hessian 互操作,基于HTTP协议 |
缺点 | 需 Hessian.jar 支持,http 短连接的开销大 |
4.Dubbo支持的注册中心
4.1Zookeeper(官方推荐)
特点 | 说明 |
---|---|
优点 | 支持分布式,很多周边产品 |
缺点 | 受限于Zookeeper 软件的稳定性,Zookeeper 专门分布式辅助软件,稳定较优 |
4.2Multicast
特点 | 说明 |
---|---|
优点 | 去中心化,不需要单独安装软件 |
缺点 | Provider 和 Consumer 和Registry 不能跨机房(路由) |
4.3Redis
特点 | 说明 |
---|---|
优点 | 支持集群,性能高 |
缺点 | 要求服务器时间同步,否则可能出现集群失败问题 |
4.4Simple
特点 | 说明 |
---|---|
优点 | 标准RPC服务,没有兼容问题 |
缺点 | 不支持集群 |
三、Zookeeper
在Dubbo中,我们选择Zookeeper来搭建服务治理中心