分布式系统(一)

究竟什么是分布式系统?分布式系统和单体系统之间到底有什么区别?

问题背景

  1. 什么是单体系统?
    • 只包含一个物理组件的系统,能够独立进行部署和运行。
  2. 分布式系统的优点?
    • 更好地利用系统资源、构建合理的架构体系提供了基础。
  3. 面试过程中,相似问题还有?
    • 为什么系统构建的主流方式会从单体系统演变到现在的分布式系统?
    • 传统单体系统存在哪些核心问题?
    • 相较单体系统,分布式系统具体有哪些优势?
    • 分布式系统的本质特性有哪些?
    • 从单体系统到分布式系统,系统的复杂度会发生什么样的变化?

问题分析

  1. 是什么原因导致分布式系统的出现呢?
    • 归根结底是因为业务需求的复杂度、用户数据的体量以及系统的开发和维护速度等因素的变化,导致了技术的演进。
  2. 为什么上述变化的出现,就会导致单体系统不能适应时代的发展要求呢?
    • 单体系统无论在应对业务复杂度和产品迭代速度,还是在处理高并发、大数据量的用户请求,亦或是在代码维护和团队协作等方面都存在一系列问题。
  3. 分布式系统也引入了新的问题:
    • 网络传输的三态性、数据的一致性和可用性等

技术体系

单体系统的核心问题

  • 业务扩展性:任何业务的调整都需要发布到整个系统
  • 性能伸缩性:动态扩容对单体系统而又效率低下
  • 代码复杂度:修改一处代码容易引发连锁问题

分布式系统的本质特性

什么是分布式系统?

会将整个系统拆分成多个能够独立运行的服务,这些服务在物理上是隔离的,相互之间基于网络进行通信和协调。

拆分方式

  • 纵向(Vertical)拆分:目的就是更好地完成对系统中业务服务的合理组织
  • 横向(Horizontal)拆分:横向拆分的切入点在于复用

特性

  • 网络传输的三态性:成功,失败和超时
  • 请求的容错性:分布式系统显然比单体系统更加容易出错
  • 系统的异构性:技术异构性的存在,会增加分布式系统的开发难度和维护成本
  • 数据的一致性:如何实现数据的一致性是分布式系统构建过程的一大难点

源码解析

解题要点

  • 对于技术演进的背景和需求的讨论是我们的第一点回答思路
  • 第二点解答思路在于充分利用逻辑性和对比性
  • 最后一个解题的要点:建议你可以从日常开发过程出发,基于分布式系统的拆分和集成、请求容错性的实现、数据一致性的不同应对策略等角度,谈谈自己对分布式系统构建的一些思考和总结