分布式 RPC 系统框架 Dubbo入门介绍

Dubbo 概述

Dubbo 产生的背景

随着互联网项目用户量的急剧增长,访问并发量的陡然增加,一个应用中所有的功能都集中于一个项目中,已经完全不能满足需要了,系统性能急需提升。提升性能的最直接的方式是构建集群,构建具有负载均衡功能的集群。但仅仅依靠增加具有相同业务功能的主机来提高系统的性能,能力是有限的。需要将应用的功能进行分解,分解为多个子工程,每个子工程仅完成某一特定功能,例如,登录子工程、订单业务子工程、支付业务子工程、红包业务子工程等。即,将原来项目中的业务模块,变为了独立工程。在这种情况下若性能还需要进一步再提升,则可为每个项目构建集群。这种将一个应用使用多个独立的工程实现的系统架构,称为 SOA 系统架构(ServiceOriented Architecture,即面向服务的系统架构)。

这些子工程原本都是为一个应用服务的,而该应用在没有被拆分为多个子工程时,原本都是在一个工程中的,各个模块都是运行在处于同一个主机的同一个 JVM 中,一个类的对象调用另一个类的对象,即各个模块间进行数据通信是没有任何问题的。但拆分为多个子工程后,各个子工程都是运行在各自的主机的 JVM 中的,它们间的数据通信如何实现的呢?可以通过 RPC 协议(Remote Procedure Call Protocol,远程过程调用协议)完成通信。Dubbo就是 RPC 协议的实现者之一。

什么是 SOA?

SOA,Service Oriented Architecture,面向服务的架构,是一个组件模型(即子项目模型),它将应用程序的不同功能单元(称为服务)通过这些服务之间定义的良好接口和契约联系起来。接口是采用中立的方式进行定义的(所谓中立方式是指没有与任何具体实现相绑定的的定义方式,即只有接口,没有实现的方式)。它应该独立于实现服务的硬件平台、操作系统(即跨平台)和编程语言(即已被编译为可执行文件)。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件(即子项目)进行分布式部署、组合和使用。服务层是 SOA 的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性(即人为参与度更低了)。SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义的接口进行通讯,不涉及底层编程接口和通讯模型。SOA 可以看作是 B/S 模型、XML(标准通用标记语言的子集)/Web Service 技术之后的自然延伸。SOA 将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以 SOA 架构的系统能够更加从容地面对业务的急剧变化。

什么是 RPC?

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型(OSI 七层网络模型,OSI,Open System Interconnection,开放系统互联)中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。RPC 采用客户机/服务器模式(即 C/S 模式)。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。其实 RPC 的底层就是 Socket 实现的,只要知道对方的主机名与端口号,就可通过网络连接上,而无需知道其底层是怎样实现的通信。

系统架构设计的关键点

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。当流量增加时通过搭建集群增加主机的水平扩展方式可以提升整个系统的性能。此时,用于简化增删改查工作量的数据访问框架是关键。

垂直应用架构

当访问量逐渐增大,单一应用架构的水平扩展,其所带来的速度提升越来越小。此时可以将应用拆成互不相干的几个应用,以提升效率。这时用于加速前端页面开发的 Web 框架是关键。

分布式服务架构

当垂直应用越来越多,应用之间的交互是不可避免的。这时将核心业务抽取出来作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架是关键。

流动计算架构

当服务越来越多,容量的评估(主机所能支撑特定服务的能力称为容量)、小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心,使其基于访问压力实时管理集群容量,提高集群利用率。此时用于提高机器利用率的资源调度和治理中心是关键。

Dubbo 简介

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。

Dubbo 四大组件

1.Provider:暴露服务方,亦称为服务提供者。

2.Consumer:调用远程服务方,亦称为服务消费者。

3.Registry:服务注册与发现的中心,提供目录服务,亦称为服务注册中心

4.Monitor:统计服务的调用次数、调用时间等信息的日志服务,亦称为服务监控中心

(注:init:表示初始化过程,只会执行一次 async:异步处理过程 sync:同步处理过程)

0.start:Dubbo 服务启动,Spring 容器首先会创建服务提供者。

1.register:服务提供者创建好后,马上会注册到服务注册中心 Registry,这个注册过程称为服务暴露。服务暴露的本质是将服务名称(接口)与服务提供者主机写入到注册中心 Registry 的服务映射表中。注册中心充当着“域名服务器”的角色。

2.subscribe:服务消费者启动后,首先会向服务注册中心订阅相关服务,当然,该服务必须是 Provider 暴露于注册中心中的服务。

3.notify:消费者可能订阅的服务在注册中心还没有相应的提供者。当相应的提供者在注册中心注册后,注册中心会马上通知订阅该服务的消费者。但消费者在订阅了指定服务后,在没有收到注册中心的通知之前是不会被阻塞的,而是可以继续订阅其它服务。注意,一个消费者可以订阅多个服务。

4.invoke:消费者以同步的方式调用提供者提供的请求。消费者通过远程注册中心的服务列表调用远程服务,Dubbo 会基于负载均衡算法,选一台提供者处理消费者的请求。而消费者的这个调用是同步的,即提供者在没有向消费者返回处理结果之前,消费者处于阻塞状态,直到提供者返回处理结果,或等待超时。等待超时,Dubbo 会再选一个提供者为消费者服务。

5.count:每个消费者对各个服务的累计调用次数、调用时间;每个提供者被消费者调用的累计次数和时间,消费者与调用者都会定时发送到监控中心,由监控中心记录。这些统计数据可以在 Dubbo 的可视化界面看到。

Dubbo 三大领域模型

为了对 Dubbo 整体架构叙述的方便,Dubbo 抽象出了三大领域模型。注意,这里的领域模型与 DDD(Domain Driven Design,领域驱动模型设计)无关。

1.Protocol 服务域:是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。

2.Invoker 实体域:是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。

3.Invocation 会话域:它持有调用过程中的变量,比如方法名,参数等。

Dubbo 的两大设计原则

Double 这个框架在设计时有两大设计原则:

1.采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换。

2.采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息.

Dubbo 整体架构

Dubbo 的架构设计共分为了 10 层。最上面的 Service 层是 Dubbo 开发分布式服务开发者实现业务逻辑的接口层。图中左边淡蓝色背景为服务消费者使用的接口,右边淡绿色背景为服务提供者使用的接口,位于中轴线的为双方都要用到的接口。对于这 10 层,根据其总体功能划分,可以划分为三大层:

Business 层

该层仅包含一个 service 服务层,该层与实际业务逻辑有关,根据服务消费方和服务提供方的业务设计,实现对应的接口。

RPC 层

该层主要负责整个分布式系统中各个主机间的通讯。该层包含了以下 6 层。

config 配置层 ,proxy 服务代理层,

registry 注册中心层 ,

cluster 路由层,

monitor 监控层,

protocol 远程调用层 .

Remotting 层

Remoting 实现是 Dubbo 协议的实现,如果我们选择 RMI 协议,整个 Remoting 都不会用上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,而 Exchange层是在传输层之上封装了 Request-Response 语义。具体包含以下三层

(1)exchange 信息交换层

封装请求响应模式,同步转异步,以 Request 和 Response 为中心,扩展接口为 Exchanger和 ExchangeChannel,ExchangeClient 和 ExchangeServer。

(2) transport 网络传输层

抽象和 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel、Transporter、Client、Server 和 Codec。

(3) serialize 数据序列化层

可复用的一些工具,扩展接口为 Serialization、ObjectInput、ObejctOutput 和 ThreadPool。


原文地址:https://www.cnblogs.com/wu-yi/p/12208920.html

时间: 2024-11-06 15:07:12

分布式 RPC 系统框架 Dubbo入门介绍的相关文章

分布式RPC系统框架Dubbo

导读 Apache Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. dubbo官网:点我直达 第一个Dubbo程序(小试牛刀) 创建业务接口工程 项目结构 创建包和接口类 安装项目 创建提供者Provider工程 项目结构 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&

基于netty轻量的高性能分布式RPC服务框架forest&lt;下篇&gt;

基于netty轻量的高性能分布式RPC服务框架forest<上篇> 文章已经简单介绍了forest的快速入门,本文旨在介绍forest用户指南. 基本介绍 Forest是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等. 架构概述 Forest中分为服务提供方(RPC Server),服务调用方(RPC Client)和服务注册中心(Registry)三个角色. Server提供服务,向Registry注册

RSF 分布式 RPC 服务框架的分层设计

RSF 是个什么东西? 一个高可用.高性能.轻量级的分布式服务框架.支持容灾.负载均衡.集群.一个典型的应用场景是,将同一个服务部署在多个Server上提供 request.response 消息通知.使用RSF可以点对点调用,也可以分布式调用.部署方式上:可以搭配注册中心,也可以独立使用. 渊源 RSF 的核心思想参考了淘宝HSF.Dubbo 等优秀框架.功能上大体相似,但是实现逻辑完全不同.因此没有什么历史包袱.总的来说对比淘宝HSF少了历史包袱,相比Dubbo更加轻量化.而且还支持了虚拟机

基于开源Dubbo分布式RPC服务框架的部署整合

一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目中有着广泛应用.dubbo 通过高性能 RPC 实现服务的输出和输入功能,框架基于 Spring Framework 进行无缝集成,使用过程中基本看不到 Dubbo API的直接调用,Dubbo服务支持RMI.Hessian.Dubbo.WebService等众多通信协议,同时提供了对服务的监控和管

dubbo入门介绍及结合spring搭建(源码放送)

前言 关于dubbo的介绍网上有很多博文有入门级的说明,但在这里,将会提供给大家dubbo的入门介绍,dubbo结合spring项目的简单搭建,以及提供demo源代码的免费下载. dubbo的官方网址是:http://dubbo.io/ dubbo框架使用的demo源码下载地址:http://download.csdn.net/detail/fighterandknight/9514559 dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及

分布式服务治理框架Dubbo

前言 Dubbo是一个被国内很多互联网公司广泛使用的开源分布式服务治理框架,是一个非常全面的SOA基础框架,当当网在Dubbo基础上新增了一些功能,并将其命名为Dubbox(Dubbo eXtensions). 为什么需要Dubbo? 以前所有的业务处理,都在一个系统当中: 接着,这个大系统按照业务领域划分为N个业务系统: 各个业务系统之间不可避免需要交互,采用什么呢?HTTP的方式?WebService?... 我们将面临很多URL的管理,服务之间的调用链,依赖关系,服务的负载均衡.监控等等

【Java】分布式RPC通信框架Apache Thrift 使用总结

简介 Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于thrift研发一套分布式服务框架,增加诸如服务注册.服务发现等功能. RPC即Remote Procedure Call,翻译为远程过程调用.任何RPC协议的实现终极目标都是让使用者在调用远程方法的时候就像是调用本地方法一样简单,从而提高使用远程服务的效率. 现代互联网架构多数基于SOA思想而搭建,即

java分布式服务框架Dubbo的介绍与使用

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)其核心部分包含:1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,

转载:java分布式服务框架Dubbo的介绍与使用

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)其核心部分包含:1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,