微服务面试必问的Dubbo,这么详细还怕自己找不到工作(上)

2,090 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

大家好,我是小羽。

Dubbo 起源于阿里巴巴,对于我们做电商开发的人来说,基本是首选的技术,那么为何一个区区 soa 服务治理框架,会受到这么多人的青睐呢?

今天就跟着小羽一起看看这个微服务框架之一的 Dubbo 的详细解读吧,鉴于文章篇幅过长,我会在这里分为三个章节,以下是关于第一章节的图文详解内容。

前言

互联网的不断发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对。

服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),

也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。

就这样分布式系统的服务治理框架就出现了,Dubbo也就这样产生了。

概念

Dubbo 是一款高性能、轻量级的开源 RPC 框架、提供服务自动注册、自动发现等高效治理方案,可以和 Spring 框架无缝集成

简单的说,dubbo就是个分布式服务框架,在有分布式需要的时候可以使用 dubbo 的框架,使用 dubbo 的好处:

1、 透明化的远程方法调用

2、 软负载均衡及容错机制

3、 服务自动注册与发现

4、 提供了完善的服务接口管理与监控功能

​编辑

架构图

RPC

简介

RPC 全称为 remote procedure call,即远程过程调用。比如两台服务器 A 和 B,A 服务器上部署一个应用,B 服务器上部署一个应用,A 服务器上的应用想调用 B 服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据

RPC 并不是一个具体的技术,而是指整个网络远程调用过程

RPC 是一个泛化的概念,严格来说一切远程过程调用手段都属于 RP C范畴。各种开发语言都有自己的 RPC 框架。Java 中的 RPC 框架比较多,广泛使用的有 RMI、Hessian、Dubbo 等。

原理

服务消费方(client)调用以本地调用方式调用服务。客户端存根(client stub)接收到调用后负责将方法、参数等编码成能在网络中传输的消息体。然后,客户端存根找到服务地址后,将消息发送给服务端。

服务提供方(server)收到序列化后的消息,就按照解码该消息。然后,根据解码结果调用本地服务,执行完毕后,将结果打包发送给消费方。

服务消费方收到执行结果后,也是进行解码后得到结果。

​编辑

原理

使用场景

RPC 分布式服务,拆分应用进行服务化,提高开发效率,调优性能,节省竞争资源

配置管理, 解决服务的地址信息剧增,配置困难的问题

服务依赖, 解决服务间依赖关系错踪复杂的问题

服务扩容, 解决随着访问量的不断增大,动态扩展服务提供方的机器的问题

核心功能

Remoting:远程通讯,提供对多种 NIO 框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。

Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

Registry:服务注册中心,服务自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

核心组件

Provider: 服务的提供方

Consumer: 调用远程服务的服务消费方

Registry: 服务注册和发现的注册中心

Monitor: 统计服务调用次数和调用时间的监控中心

Container: 服务运行容器

​编辑

组件

服务注册与发现

流程如下:

1、 Provider(提供者)绑定指定端口并启动服务

2、 供者连接注册中心,并发本机 IP、端口、应用信息和提供服务信息发送至注册中心存储

3、 Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心

4、 注册中心根据消费者所求服务信息匹配对应的提供者列表发送至Consumer 应用缓存。

5、 Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用

6、 Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer设计的原因:

Consumer 与 Provider 解偶,双方都可以横向增减节点数。注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台

7、 去中心化,双方不直接依懒注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用

8、 服务提供者无状态,任意一台宕掉后,不影响使用

​流程

最后

关于微服务框架中的Dubbo涉及到的内容还有很多,由于篇幅过长,会在下一篇继续为大家带来图文方面的详细讲解,敬请期待~