互联网分布式系统开发实战(上)

互联网分布式系统开发实战(上)

逸章·资深技术专家

671人已买
详情
目录(44)

你好,我是逸章,从事软件开发和系统架构设计工作十余年,长期负责分布式系统的构建和优化工作。工作这十余年来,见证了新型互联网和物联网系统的兴起和发展,也见证了 Dubbo、Spring Cloud 等分布式系统开发框架的不断演进。

在当下的软件开发过程中,分布式系统的设计和实现已经非常普遍。面对微服务架构的遍地开花以及中台思想的日渐兴起,如何高效采用主流的分布式开发工具和机制来满足不断变化的业务需求,已经成为很多架构师和开发人员所需要规划和落实的一大课题。

为什么要学习分布式系统开发的核心机制?

想要开发一个分布式系统实际上并没有想象的那么容易,抛开业务层面的规划和设计,开发人员在技术实现层面上也面临着一系列的问题,比如:

  • 如何针对分布式应用场景选择合适的开源框架?
  • 如何正确、高效地使用这些开源框架?
  • 如何快速分析和解决框架使用过程中的问题?
  • 如何基于这些框架做定制化的开发以满足差异化需求?

导致这些问题产生的一个核心原因是开发人员并没有深入了解分布式开发所涉及到的核心开发机制,无法真正理解这些框架背后的实现原理,也就无法应对上述问题。我认为,这门专栏能够帮助大家很好的解决这些问题。

这是一门关于源码解析类的专栏,整个专栏基于框架源码解读来剖析互联网分布式系统开发核心机制。包括如下所示的五大主题:

我们将从这五大类主题出发解析 Dubbo、Spring Cloud 和 Mybatis 这三个在互联网行业中开发分布式系统时所使用的最广泛的开源框架,以及从这些框架提炼出来的分布式系统开发的核心机制。

整个专栏分为上下两个专栏,其中上半部分将讲解剖析框架代码的结构、剖析架构模式与设计模式以及剖析通用机制与组件这三大类主题,而下半部分将包括如何剖析分布式服务组件和微服务架构组件的系统方法和技术体系。

同时,这也是一门关于面试技巧类的专栏。我们还将从应对技术原理分析类面试角度出发系统讲解开发人员所应该具备的面试技巧,以及围绕以上五大类主题所展开的面试题分析和讲解。最终,我们也将从构建属于自己的技术知识体系角度出发探讨技术原理的相通性以及技术成长的方法论。

专栏内容有多适合你?

工具和框架发展日新月异,例如在我们的专栏中会经常提到的 Dubbo 框架在 2013 年开始已经几乎不再更新,而这两年又重新启动维护工作,目前已经成为 Apache 的顶级项目。

不难想象在不久的将来,业界还会出现第二个、第三个类似 Dubbo 这样的框架。我们知道 Dubbo 是阿里巴巴开源的一个分布式服务框架,其背后的核心原理就是实现了 RPC 和服务治理。

对于任何一个分布式服务框架而言,RPC 和服务治理都是不可缺少的组件,而关于RPC和服务治理的相关设计方法和实现原理在很长一段时间内实际上都没有什么变化。我们只要能够对 RPC 和服务治理有深刻的理解,那么关于 Dubbo 同类型的任何新框架,如果出现类似“RPC 架构核心组件、Dubbo 框架原理”这样的面试题,我们都应该有明确的回答思路和方法。为了达到这样的境界,这就要深入分析 Dubbo 等框架所具备的技术知识体系,以及这些技术知识体系之间存在的的相通性。

在分布式系统开发技术中,这样的案例还有很多,比如:

  • 系统扩展性设计在框架中有哪些通用的表现形式?
  • 如何基于SPI机制实现微内核架构?
  • 管道-过滤器模式如何帮助框架实现非功能性需求?
  • 如何基于代理机制实现远程调用和数据访问?
  • 缓存的通用实现方式是怎么样的?

这些主题我们都会在整个专栏中进行交叉讲解,并提供相应的学习方法和技巧。站在专栏学习的角度上,我们也希望读者能够以理解技术原理相通性作为目标进行持续的学习和提升。这是本专栏的设计初衷。

如果你是以下用户,那么本专栏非常适合你:

  • 需要引入 Dubbo、Spring Cloud 等开源框架的开发人员

本专栏适合想要在日常开发过程中引入 Dubbo 和 Spring Cloud 等框架来实现分布式系统的开发人员。我们将介绍这些框架在远程调用、负载均衡、注册中心、配置中心、服务熔断、服务降级、消息通信等方面的核心实现机制,这些功能都是构建分布式系统的基础。

  • 需要进一步理解主流分布式框架内部实现原理的开发人员

本专栏也适合于想要深入理解分布式框架内部实现原理的开发人员。我们将从如何剖析框架源码的方法论开始讲起,并给出各个核心功能背后赌赢的各个核心技术点的源码解析,同时也会对微内核架构等架构模式和设计模式等通用的实现机制做详细剖析。

  • 需要应对技术原理型面试的开发人员

如何你想要通过大厂的面试找到一份满意的工作,那么这个专栏非常适合你。我们针对框架的特性以及背后的技术原理,梳理了来自阿里、京东、网易等大厂的技术原理型面试题数百题,系统讲解如何回答这些面试题所需的知识体系,以及帮助你如何应对这些面试题的面试技巧。

  • 需要将主流分布式框架更好的应用到日常研发过程的开发人员

如果你已经对 Dubbo、Spring Cloud、Mybatis 等框架有过一定的使用经验,那么本专栏同样适合你。我们将基于这些框架系统阐述其在业务系统中使用的各种方式和开发技巧,以及如何扩展这些框架现有功能的系统方法。

  • 需要通过学习优秀开源框架来实现自我提升的开发人员

作为业界主流的优秀开源框架,Dubbo、Spring Cloud 等框架在其架构设计和功能实现上具有很多值得深入分析和学习的知识点和技术体系。如果你对开源框架有强烈的学习欲望,希望通过学习优秀的开源框架来实现自我提升,那么本专栏同样适合你。我们会在专栏中穿插如何分析框架的架构体系,如何剖析源码的组成结构等主题来帮助你更好的掌握自我学习和提升的系统方法。

你能获得什么?

学习分布式系统开发框架的应用方式和实现原理

显然,这是这门专栏的核心价值,我们将学习 Dubbo、Spring Cloud 和 Mybatis 这三款主流开源框架的核心功能特性来满足日常开发分布式系统的需要,设计的核心主题包括但不限于远程调用、负载均衡、注册中心、配置中心、服务熔断、服务降级、消息通信等等。

学习技术原理的相通性

当我们面对像 Dubbo 这样优秀的开源框架时,学习的实际上并不只是框架本身。因为框架中所包含的技术体系并不是只能应用于这个框架,而是可以应用与其他框架的类似场景,也就是说技术体系具有相通性。

我们通过一个示例来阐述这个观点。 随着本专栏内容的展开,我们会知道 Dubbo 中实现了注册中心,我们可以基于注册中心实现服务注册和发现机制。而在注册中心的实现方式上,Dubbo 采用了 Zookeeper 作为其分布式协调的实现框架。我们可以基于 Zookeeper 所提供的动态监听机制来判断某个服务实例是否可用等操作。

另一方面,如果你熟悉 ShardingSphere 等分布式数据库框架的实现原理,你就会发现 ShardingSphere 中同样采用了这种实现方式来基于 Zookeeper 构建强大的注册中心。甚至于在大数据开发的主流技术 Hadoop 生态中,也大量采用了 Zookeeper 来完成类似的场景。

通过对这些框架的深入学习,你会发现类似的例子还有很多,包括:

  • 基于 SPI 机制的微内核架构
  • 基于 Zookeeper 的配置中心
  • 基于 Nacos 的注册中心
  • 整合 Spring Intergation 的消息传递机制

通过对 Dubbo、Spring Cloud 等主流框架中所包含的这些技术体系的学习,一方面,能够让你具备对这些知识体系的系统化理解;另一方面,也可以直接通过这些框架本身掌握这些技术体系的具体应用场景和实现方式。

学习实战型面试题的应对方法

在本专栏中,基于源码解读的学习过程的目标是帮助大家能够找到一份理想而能够胜任的工作。因此,在我们讨论关于分布式系统核心实现机制时,会结合各个主题给出面试题的分析以及解答的技巧。这些面试题来自笔者在日常开发以及面试过程中的持续总结,也来自于阿里、京东、网易等国内一线互联网公司的真实案例。实战型面试题的深入解析会贯穿我们整个专栏。

学习从源码分析到日常开发的技巧

通过专栏帮忙大家完成技术原理类面试是本专栏的一大目标,但也不是唯一目标。所谓理论指导实践,作为扩展,我们希望通过对 Dubbo、Spring Cloud 等优秀开源框架的学习,掌握系统架构设计和实现过程中的方法和技巧,并指导日常的开发工作。

这是一个从源码分析到日常开发的过程,而且是一个不断演进的过程。所谓理论指导实践,我们需要从纷繁复杂的技术知识体系和各种层出不穷的工具框架中抓住其背后的原理,从而才能更好的应用到现实的开发过程中。一般而言,从开源框架中进行提炼并能够直接应用到日常开发过程中的技术体系通常包括:

  • 设计模式的应用,如工厂模式、策略模式、模板方法等
  • 架构模式的应用,如微内核架构、管道-过滤器架构等
  • 常见缓存的应用以及自定义缓存机制的实现
  • 网络通信组件的应用以及RPC架构的实现
  • Spring 家族框架的集成和整合

事实上,现在很多大型互联网公司的面试风格上就是偏向与考察面试者的原理分析能力和以及应用能力。从源码解析到日常应用是本专栏的一个核心目标,同样会贯穿我们整个专栏体系。

专栏目录

  1. 开篇词:论技术原理的相通性

第一部分:剖析框架代码的结构

  1. 剖析框架代码的结构的系统方法

  2. 基于组件设计原则剖析代码结构:框架代码结构与组件设计原则

  3. 基于组件设计原则剖析代码结构:基于组件设计原则分析Dubbo和Mybatis的代码结构

  4. 基于组件设计原则剖析代码结构:循环依赖及其消除方法实例

  5. 基于架构演进过程剖析代码结构:Dubbo框架的架构演进过程分析(上)

  6. 基于架构演进过程剖析代码结构:Dubbo框架的架构演进过程分析(下)

  7. 基于核心执行流程剖析代码结构:Mybatis框架主流程分析(上)

  8. 基于核心执行流程剖析代码结构:Mybatis框架主流程分析(下)

  9. 基于基础架构组成剖析代码结构:RPC基础架构与实现示例

  10. 基于基础架构组成剖析代码结构:Dubbo中的网络通信

  11. 基于基础架构组成剖析代码结构:Dubbo中的序列化

  12. 基于基础架构组成剖析代码结构:Dubbo中的传输协议

  13. 基于基础架构组成剖析代码结构:Dubbo中的远程调用

  14. 基于可扩展性设计剖析代码结构:常见系统可扩展性实现方法

  15. 基于可扩展性设计剖析代码结构:Mybatis TypeHandler机制

第二部分:剖析框架中的架构模式与设计模式

  1. 剖析模式应用的系统方法

  2. 架构模式之微内核模式:微内核模式及Java SPI机制

  3. 架构模式之微内核模式:微内核模式在Dubbo中的应用

  4. 架构模式之微内核模式:Dubbo中的扩展点

  5. 架构模式之管道-过滤器模式:管道-过滤器模式与实现示例

  6. 架构模式之管道-过滤器模式:管道-过滤器模式在Dubbo中的应用

  7. 架构模式之管道-过滤器模式:管道-过滤器模式在Mybatis中的应用

  8. 经典设计模式:创建型模式及其在Mybatis中的应用

  9. 经典设计模式:结构型模式及其在Mybatis中的应用(上)

  10. 经典设计模式:结构型模式及其在Mybatis中的应用(下)

  11. 经典设计模式:行为型模式及其在Mybatis中的应用

第三部分:剖析通用机制与组件

  1. 系统启动和初始化方法:Spring中的启动扩展点(上)

  2. 系统启动和初始化方法:Spring中的启动扩展点(下)

  3. 系统启动和初始化方法:Dubbo启动过程解析

  4. 系统启动和初始化方法:Mybatis-Spring启动过程解析

  5. 系统启动和初始化方法:Spring Boot应用程序的自动配置机制

  6. 系统启动和初始化方法:Mybatis Spring Boot Starter启动过程解析

  7. 自定义配置标签:基于Spring的自定义配置标签实现方案

  8. 自定义配置标签:Dubbo和Mybatis-Spring中的自定义标签体系

  9. 处处是代理:代理机制的应用场景和实现方式

  10. 处处是代理:Dubbo远程访问中的代理机制

  11. 处处是代理:Mybatis数据访问中的代理机制

  12. 缓存:Mybatis一级缓存剖析

  13. 缓存:Mybatis二级缓存剖析

  14. 资源池:资源池模式与数据库连接池

  15. 资源池:Mybatis中的数据库连接池

结语一:构建属于自己的技术知识体系

结语二:应对技术原理分析类面试的系统方法

适读人群

  • 需要引入 Dubbo、Spring Cloud 等开源框架的开发人员

  • 需要进一步理解主流分布式框架内部实现原理的开发人员

  • 需要应对技术原理型面试的开发人员

  • 需要将主流分布式框架更好的应用到日常研发过程的开发人员

  • 需要通过学习优秀开源框架来实现自我提升的开发人员

作者介绍

逸章,资深技术专家。10 余年软件行业从业经验,前后就职于多家大型上市公司和互联网独角兽公司,担任架构师、技术总监等职位。主持过十余个架构设计和技术管理类培训课程,对分布式系统架构设计和实现有丰富的经验和深入的理解。

购买须知

  • 本专栏为图文内容,共计 41 篇,每周更新 2 篇。
  • 付费用户可享受文章永久阅读权限。
  • 本专栏为虚拟产品,一经付费概不退款,敬请谅解。
  • 本专栏可在 GitChat 服务号、App 及网页端 gitbook.cn 上购买,一端购买,多端阅读。

订阅福利

  • 订购本专栏可获得专属海报(在 GitChat 服务号领取),分享专属海报每成功邀请一位好友购买,即可获得 25% 的返现奖励,多邀多得,上不封顶,立即提现。

  • 提现流程:在 GitChat 服务号中点击「我-我的邀请-提现」。

  • ①点击这里跳转至》第 4 篇《翻阅至文末获得入群口令。

  • ②购买本专栏后,服务号会自动弹出入群二维码和入群口令。如果你没有收到那就先关注微信服务号「GitChat」,或者加我们的小助手「GitChatty6」咨询。

购买须知

  • 本课程内容版权归北京码字科技发展有限公司独家所有,未经授权,不得转载。
  • 本课程为虚拟产品,一经付费概不退款,敬请谅解。
  • 添加 GitChat 助教俏俏(微信 ID: gitchat2025),加入免费技术交流群。
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容