《深入理解Apache Dubbo与实战》读书笔记

–>

文章目录

      • ????简介
      • ????架构演进
      • ????理解RPC与SOA
      • ????dubbo架构简介

????简介

目前的工作主要是做一些业务功能的开发,涉及到的系统架构以all-in-one的单体架构为主,也少量涉及分布式系统,对于涉及到的分布式系统,几乎都是以dubbo为基础构建的,日常也主要是对其进行维护以及对开发新的功能,之前对dubbo的使用也不是特别深入,应用场景也不复杂。dubbo作为目前最流行的分布式微服务架构之一,是非常值得好好去研究一下的。

《深入理解Apache Dubbo与实战》这本书主要是对dubbo的架构及原理进行讲解,中间穿插了一些实战案例,通过这本书可以更好的理解dubbo,理解其设计理念。两位作者商宗海和林琳,商宗海是dubbo的技术负责人,在dubbo开源到apache后,其本人称为了PMC Member,林琳也是dubbo的核心贡献者,这两位目前都就职于蚂蚁金服。

????架构演进

在将dubbo前,我们先来简单回顾一下应用系统架构的演进,这是一个老生常谈的问题了。

对于一些比较简单的应用,我们通常采用all-in-one的单体架构,这种架构对于开发和部署都比较友好,能够在项目前期快速的响应需求,但随着业务的发展,系统中的功能越来越多,服务的体积也越来越庞大,另外团队成员也越来越多,这时候就会代理很多问题,比如代码重复问题,牵一发而动全身以及单次部署时间越来越长等,这时候就需要考虑对服务进行拆分。在拆分时,可以根据系统不同的特点采用横向拆分或纵向拆分。如果系统中各个子模块的业务边界比较清楚,内部不存在跨模块的相互调用的话,可以按照纵向拆分,把每一个模块拆分成一个独立的服务,单独维护部署,但是如果模块之间耦合度比较高的话,就可以考虑按照功能横向拆分,把每一个功能模块独立成一个服务,每个服务交给一个独立的小组负责,这样,可以很大程度的提高团队的开发效率,其实这时候系统架构就演进到了我们常说的SOA架构。如果架构再往前演进的话,就到了微服务架构,我觉得微服务架构可以简单的理解为拆分粒度更小的服务化,微服务架构由于对目前比较流程的敏捷开发和DevOps比较友好,所以也很流行,但是具体采用哪种架构,还是要根据具体的场景来决定。

????理解RPC与SOA

在最开始接触dubbo的时候,认为dubbo就是架构,后来随着工作经验的增加,理解了dubbo本身其实是一种用来构建分布式系统的框架,通过dubbo构建的分布式系统遵循SOA架构,即面向服务的架构。那么,dubbo所要解决的问题就是SOA架构的中的问题,我个人理解,dubbo解决了soa架构中的两大核心问题:RPC调用和服务治理。

RPC是远程过程调用的缩写,它指的是一种基于网络的跨进程调用,在java中实现rpc的方式主要有两种,一种是基于jdk RMI实现,一种是基于自定义协议和反射实现,在几乎所有的rpc框架中都是采用第二种方式实现。RPC解决了分布式系统的核心的远程服务调用的问题。

但是SOA架构中的另一个重要功能就是服务治理,服务治理包括服务注册与发现,服务的限流、降级,服务监控等。这些功能dubbo也都有提供。

所以说,dubbo是一个分布式服务框架,基于dubbo构建的分布式系统基于SOA架构,也就是说dubbo解决了SOA架构中的核心问题。

下面,我们从dubbo的世界里暂时跳出来,看看一个通用的分布式服务框架都应该具有哪些功能。

在最上层是业务层,也就是具体的业务服务接口;下层是proxy代理层,proxy的主要作用是屏蔽rpc框架的底层细节,避免rpc框架侵入业务代码;下面的两层我理解成框架特性层,主要包含了负载均衡、超时重试、集群容错以及服务路由;再往下,就属于rpc层了,分为协议层、通信框架层和传输层,这几层包含了rpc框架核心,包括协议、序列化/反序列化等,总是这里的主要作用是把消息按照指定的格式发送到provider或返回给consumer。

????dubbo架构简介

下面再来看看dubbo,下图是dubbo的总体抽象架构

这里包含了四个部分,分别是服务提供者,服务消费者,注册中心,监控中心,包含了SOA架构中的两个核心部分:RPC与服务治理。服务提供者异步向注册中心;服务消费者异步从注册中心拉取服务提供者信息,并接受注册中心的变更通知;服务消费者和服务提供者异步向监控中心上报数据;服务消费者同步调用服务提供者;

下面再从微观层面看看dubbo在代码层面的架构设计

对于dubbo来说这是一张非常经典的架构图,我们可以看到,完全满足一个分布式服务框架所应该具有的功能。

下面简单按照我个人的理解简单解释一下

  • service:业务层,包含了业务接口及具体实现;
  • proxy:服务代理层,封装底层实现细节,使业务层对rpc过程无感知;
  • registry:注册层,负责与注册中心进行交互,进行服务注册于发现、接收注册中心消息变更通知;
  • cluster:集群容错层,提供了dubbo在集群层面的核心功能,包括集群容错、负载均衡、服务路由、超时重试等;
  • monitor:监控层。负责上报数据到监控中心;
  • protocol:协议层,这里封装了rpc调用的完整逻辑;
  • exchange:信息交换层,把对API接口的调用转换成-Request-Response模式;
  • transport:网络传输层,即Netty或Mina;
  • Serializable:序列化,将消息进行序列化或反序列化;

本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。

© 版权声明

相关文章