这么说吧,dubbo很简单,其实就是一个远程服务调用的框架

极简教程,五分钟快速入门之dubbo,为后面的dubbo实战以及dubbo源码分析做铺垫。

一、dubbo是什么?

1)本质:一个Jar包,一个分布式框架,,一个远程服务调用的分布式框架。

既然是新手教学,肯定很多同学不明白什么是分布式和远程服务调用,为什么要分布式,为什么要远程调用。我简单画个对比图说明(图1看到图2。画板画的,勿喷)。

  • 你想一下,以前什么的都在一个服务器上,调用方法直接就自然而然调用了,没啥问题。
  • 现在因为需求增多拆分了这么多个,部署在不同的服务器上,那是不是相对以前都在一个服务器上,现在分布式后,web层调用service层的服务变成了远程调用(因为你的web层和service层都部署在不同机器了)?那怎样像以前那样都在一个服务器上自然而然调用方法呢?dubbo来解决。这就是下面dubbo的好处。

二、Dubbo的好处?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。(下面讲解)

三、dubbo架构图如下所示:

讲解他的架构图之前,我们先普及下几个概念。

节点角色说明:

  • Provider(生产者): 暴露服务的服务提供方。
  • Consumer(消费者): 调用远程服务的服务消费方。

如下图,我们可以简单理解为web1234需要调用service1234的服务,所以web1234是消费者,service1234是生产者。

那如果按照上面,消费者调用生产者的服务,那是不是如下图:

你看着晕不晕?晕不晕?晕不晕?反正我是晕了,万一分布式得更多呢?,所以我们需要他:

Registry(注册中心): 服务注册与发现的注册中心。dubbo推荐的是zookeeper。什么是zookeeper?zookeeper是用于分布式中一致性处理的框架。更多的可以查看我之前的文章。

我这里简单讲下,zookeeper就是个中介,卖楼的(生产者)把楼盘信息放在中介(注册中心)那里,想买楼的(消费者)去中介那里获得楼盘资源清单(生产者信息等)。

当然!要注意的是!我们平时买楼是通过中介去买卖,但是消费者并不是从中间件(一般都是Zookeeper)上去拿数据,而是服务消费者从中间件上拿到可用的服务生产者的集群地址,再从集群地址中选出一个进行直连。

所以插播个面试题:如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?(这个应该很简单吧)

于是,我们的图变成了这样:

是不是好很多了?还不够, 我们还需要个监控中心(干嘛用的?当然是监控用的,调用失败怎么办?挂了怎么办?): Monitor——统计服务的调用次调和调用时间的监控中心。(不画图了)

然后,Provider放在容器里运行,就叫做Container服务运行容器。(不画图了)

到这里,dubbo有关的角色就讲完了:

  • Provider(生产者): 暴露服务的服务提供方。
  • Consumer(消费者): 调用远程服务的服务消费方。
  • Registry(中介:注册中心)
  • Monitor(统计服务的调用次调和调用时间的监控中心监控中心)
  • Container:服务运行容器。

四、最终dubbo架构,如图(从0开始看起):

自己脑海里按照上图走了一遍后,看看自己想的是不是和下面说明一样。

0.服务容器负责启动,加载,运行服务提供者。

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

本次讲解就到这里。

原文发布于微信公众号 - java进阶架构师(java_jiagoushi)

原文发表时间:2018-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

如何在Intellij IDEA中集成Gitlab

据说在微软收购github当天,一大批用户纷纷转向了gitlab和bitbucket,这两者也都是比较不错的代码托管网站,针对个人和企业都有对应的免费和收费版本...

1K50
来自专栏A周立SpringCloud

Config Server——使用Spring Cloud Bus自动刷新配置

前文我们讨论了使用/refresh 端点手动刷新配置,但是如果所有微服务节点的配置都需要手动去刷新的话,那必然是一个繁琐的工作,并且随着系统的不断扩张,会变得越...

58550
来自专栏Golang语言社区

PHP调用Go服务的正确方式 - Unix Domain Sockets

作者:枕边书 链接:http://www.cnblogs.com/zhenbianshu/p/7265415.html 來源:博客园 问题 可能是由于经验太少,...

47090
来自专栏java工会

DOC文档注释,让你的代码如此清晰。

24740
来自专栏SDNLAB

ONOS动态扩容面临的难点与解决方案

一、ONOS的一致性保障 ONOS主要包括两类一致性机制,最终一致性和强一致性,最终一致性采用乐观异步复制和基于Gossip的熵减方式来实现,乐观异步复制可以高...

34680
来自专栏学习有记

Python和SQL Server 2017的强大功能

23550
来自专栏java思维导图

今天我们结合代码详细聊聊BIO,NIO和AIO

很多人说BIO不好,会“block”,但到底什么是IO的Block呢?考虑下面两种情况:

12950
来自专栏葡萄城控件技术团队

给大家分享两款正在使用的reflector插件

推荐两款神器:Deblector和reflexil Deblector 它的名字是Debug 和 reflector 两个单词的结合。就是用来调试的。 简单的说...

22090
来自专栏北京马哥教育

ceph工作原理和安装

一、概述 Ceph是一个分布式存储系统,诞生于2004年,最早致力于开发下一代高性能分布式文件系统的项目。随着云计算的发展,ceph乘上了OpenStack的春...

72360
来自专栏张善友的专栏

用Sysctl 调整Linux操作系统的性能

Sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统...

250100

扫码关注云+社区

领取腾讯云代金券