美文网首页互联网科技Java 杂谈Spring-Boot
年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

作者: 刀哥说Java | 来源:发表于2019-06-24 16:20 被阅读3次

一 重要的概念

1.1 什么是 Dubbo?

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向

接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,

致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

Dubbo 目前已经有接近 23k 的 Star ,Dubbo的Github 地址:https://github.com/apache/incubator-dubbo 。 另

外,在开源中国举行的2018年度最受欢迎中国开源软件这个活动的评选中,Dubbo 更是凭借其超高人气仅次于vue.js 和 ECharts 获得第三名的好成绩。

Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出现,才使得越来越多的公司开始使用以及接受分布式架构。

我们上面说了 Dubbo 实际上是 RPC 框架,那么什么是 RPC呢?

1.2 什么是 RPC?RPC原理是什么?

什么是 RPC?

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解

底层网络技术的协议。比如两个不同的服务A,B部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个

方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解

决这个问题。

RPC原理是什么?

我这里这是简单的提一下。详细内容可以查看下面这篇文章:

http://www.importnew.com/22003.html

年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

1. 服务消费方(client)调用以本地调用方式调用服务;

2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

3. client stub找到服务地址,并将消息发送到服务端;

4. server stub收到消息后进行解码;

5. server stub根据解码结果调用本地的服务;

6. 本地服务执行并将结果返回给server stub;

7. server stub将返回结果打包成消息并发送至消费方;

8. client stub接收到消息,并进行解码;

9. 服务消费方得到最终结果。

下面再贴一个网上的时序图:

年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

说了这么多,我们为什么要用 Dubbo 呢?

1.3 为什么要用 Dubbo?

Dubbo 的诞生和 SOA 分布式架构的流行有着莫大的关系。SOA 面向服务的架构(Service Oriented

Architecture),也就是把工程按照业务逻辑拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外

提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。SOA架构中有两个主要角

色:服务提供者(Provider)和服务使用者(Consumer)

年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

如果你要开发分布式程序,你也可以直接基于 HTTP 接口进行通信,但是为什么要用 Dubbo呢?

我觉得主要可以从 Dubbo 提供的下面四点特性来说为什么要用 Dubbo:

1. 负载均衡——同一个服务部署在不同的机器时该调用那一台机器上的服务

2. 服务调用链路生成——随着系统的发展,服务越来越多,服务间依赖关系变得错踪复杂,甚至分不清哪个应用

要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。Dubbo 可以为我们解决服务之间互相是如

何调用的。

3. 服务访问压力以及时长统计、资源调度和治理——基于访问压力实时管理集群容量,提高集群利用率。

4. 服务降级——某个服务挂掉之后调用备用服务

另外,Dubbo 除了能够应用在分布式系统中,也可以应用在现在比较火的微服务系统中。不过,由于 Spring Cloud

在微服务中应用更加广泛,所以,我觉得一般我们提 Dubbo 的话,大部分是分布式系统的情况。

我们刚刚提到了分布式这个概念,下面再给大家介绍一下什么是分布式?为什么要分布式?

1.4 什么是分布式?

分布式或者说 SOA 分布式重要的就是面向服务,说简单的分布式就是我们把整个系统拆分成不同的服务然后将这些

服务放在不同的服务器上减轻单体服务的压力提高并发量和性能。比如电商系统可以简单地拆分成订单系统、商品系

统、登录系统等等,拆分之后的每个服务可以部署在不同的机器上,如果某一个服务的访问量比较大的话也可以将这

个服务同时部署在多台机器上。

1.5 为什么要分布式?

从开发角度来讲单体应用的代码都集中在一起,而分布式系统的代码根据业务被拆分。所以,每个团队可以负责一个

服务的开发,这样提升了开发效率。另外,代码根据业务拆分之后更加便于维护和扩展。

另外,我觉得将系统拆分成分布式之后不光便于系统扩展和维护,更能提高整个系统的性能。你想一想嘛?把整个系

统拆分成不同的服务/系统,然后每个服务/系统 单独部署在一台服务器上,是不是很大程度上提高了系统性能呢?

最后,由于头条的篇幅有限,所以很多知识点都未能全部呈现出来,这些知识点都收集在我自己的这一份Java核心知识点整理与面试的PDF上面了,各位有需要的可以关注我后加入我的Q群688298281即可免费获取这一份Java核心知识点PDF!

年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

Java核心知识点整理

关注我后加入我的Q群688298281 点击群号即可加入!即可免费获取

相关文章

网友评论

    本文标题:年度最受欢迎开源软件第三名,阿里P7架构师带你彻底理解Dubbo

    本文链接:https://www.haomeiwen.com/subject/pgeoqctx.html