dubbo笔记——入门介绍
一、基本介绍
1、背景说明
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已经无法应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不絮的演进。
单一应用框架:
- 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
- 此时,用于简化增删改查工作量,数据访问框架(ORM)是关键。
垂直应用框架:
- 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
- 此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构:
- 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
- 此时,用于提高业务复用性及整合的分布式服务框架(RPC)是关键。
流动计算架构:
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
- 此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
2、DUBBO简介
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容。官方网站为:http://dubbo.io/
3、系统间服务调用方式
1.浏览器直接访问
浏览器发起请求,通过ajax或jsonp方式请求:
2.Httpclient方式
系统与系统之间通过Httpclient发起http请求来请求数据,http协议是短连接:
3.RPC方式
1.RPC介绍
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。
2.原理图示
采用长连接方式:
4、DUBBO服务架构
1.基本说明
在大规模服务化之前,应用可能只是通过RMl或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。
(1)当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。此时需耍一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failoverm,降低对F5硬件负载均衡器的依赖,也能减少部分成本。
(2)当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。这时,需要自动画出应用间的依赖关系图,以帮助架构师理理清关系
(3)接着,服务的调用量越来越大,服务的容里问题就显露出来,这个服务需要多少机器支撑?什么时候该加机器?为了解决这些问题.第一步,要将服务现在每天的调用量,响应时间,都统计出来, 作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过裎中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,在以此访问量乘以机器。
以上是Dubbo最基本的几个需求,更多服务治理问题参见:http://code.alibabatech.com/blog/experience_1402/service-governance-process.html
2.服务架构
dubbo的服务架构如下图:
节点角色说明:
- Provider:暴露服务的服务提供方。
- Consumer:调用远程服务的服务消费方。
- Registry:服务注册与发现的注册中心。
- Monitor:统计服务的调用的调用次数和调用时间的监控中心。
- Container:服务运行容器。
3.调用关系
调用关系如下:
1. 服务容器负责启动,加载,运行服务提供者。
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
5、版本说明
Dubbo的版本格式约定如下:
<major><minor><micro>
版本格式的三位分别表示:
- 主版本(major)升级,表示API不兼容,或者架构调整。
- 次版本(minor)升级,表示增加了新功能,或者大的优化。
- 小版本(micro)升级,表示修复问题,或者小的优化。
所以:
- 二版本越大,表示功能越多。
- 三版本越大,表示越稳定。
现在在阿里巴巴内部广泛使用的GA版本为:2.4.9,最新发布的可靠版本为2.5.3(2012-10-24),我们这里使用2.5.3。Dubbo官网并没有提供下载服务,但是dubbo将源码托管于github,并且将jar包发布到maven的*仓库,所以可以从github和maven*仓库来下载。源码下载地址为:https://github.com/alibaba/dubbo
发布包下载地址为:http://repo1.maven.org/maven2/com/alibaba/dubbo/
二、通过Maven构建dubbo
既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?我们先来看下dubbo的主要模块:
其中,核心框架、管理控制台、简易监控中心、简易注册中心是我们需要的模块,目前,只有核心模块可以下载到,其它的均无法直接下载,所以我们需要构建dubbo。当然了,我们也可以在网上下载已经构建好的模块,选择不重新构建。当然也有一种情况是因为阿里现在已不在提高更新,自己可能根据情况对项目重写,然后再发布。
1、导入源码到Eclipse
先导入编译依赖到Eclipse:
再导入dubbo源码到Eclipse:
导入完成:
2、安装依赖到本地仓库
安装hessian-lite到本地仓库:
安装opensesame到本地仓库:
3、构建dubbo
4、构建完成
构建后可以找到对应的模块包。
核心框架:
管理控制台:
简易监控中心:
简易注册中心: