Dubbo简介
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC实现服务的输出和输入功能 ,可以和Spring框架无缝集成。是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的 远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
上面提到了一个名字RPC,RPC是什么呢?在这里简单的介绍一个概念。
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简单点说呢就是比如你在你自己本地可以调用别人在他服务器上部署的服务,至于在哪里部署,你完全不需要了解。对你来说是透明的。需要详细了解的可以参照一下url:参考1,参考2。
下面我们开始dubbo,在我们使用任何一门技术或者学习一门技术的时候肯定有一定的原因,不可能无缘无故,那么我们为什么要使用Dubbo?它能解决我们什么问题?
首先大家可以想想在工作中是否有这样的场景?
如果我们是在做一个很小的资讯类软件,流量很小的时候我们肯定只会是单服务器,一个项目把这个软件的业务全部承包起来。这样是完全可以满足需求的。但是但我们的这款产品上线得到好评,有人开始关注了,流量上来的时候,单应用加单服务器的缺点就显示出来了,服务器不能及时响应,前端渲染太慢,这个时候我们就需要将服务拆分比如前后段分离,添加服务器。熬过这段时间后,哎呀哈,有人融资了,有钱了,项目要做的更加精细话,用户体验,后台处理数据的能力需要更加深一步的提高了,这个时候我们就需要把之前的项目再进一步的进行拆分,比如用户模块,订单模块等核心模块专门提取出来,形成服务,业务层依靠底层模块进行开发。之后随着访问量越来越大,我们添加了硬件负载均衡F5,但是我们的单个模块的服务数量会越来越多,而且再加上服务器集群,这样url的配置会变的非常麻烦,我们需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明,并依靠软件实现部分负载均衡的压力,减少硬件压力。但是现在服务太多了,除了架构师可能很少有人能理清楚服务间的依赖关系,再加上系统整体访问量上来的时候我们需要更加科学的能够统计每个服务的请求量,评测服务器数量,又或者某些服务的请求量不是很高,是不是可以适量的降低?Dubbo就是用来处理上面的问题的。
我们看下Dubbo官网的架构图:

调用关系我们举个例子来说:比如现在有订单服务,它就是服务提供者(Provider)。注册中心(Registry)就好比我们刚上学,我们都去老师那里报名,老师有我们所有人的信息。当我们系统各个服务启动的时候,我们的订单Provider会去在注册中心register自己,把自己注册成一个对外的服务,这样别人就可以通过老师这个注册中心知道我们的任何信息了。与此同时消费者(Customer)想要去知道某个人的订单信息的时候就可以通过注册中心subscribe去获取。所以我们在前端点击用户订单信息的时候,customer因为订阅了对应的订单服务,就能准确调用的找到对应的服务找到对应的信息。