(快手一面)分布式系统是什么?为什么要分布式系统?分布式环境下会有哪些问题?分布式系统是如何实现事务的?

一、分布式系统是什么?

《分布式系统原理与泛型》中这么定义分布式系统:
“ 分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像单个相关系统 ”, 分布式系统(distributed system)是建立在网络之上的软件系统。

就比如:用户在使用京东这个分布式系统的时候,会感觉是在使用一个系统,而不是在使用一堆计算机。

  • 分布式系统是由多个互通的节点(即计算机服务器)组成的系统
  • 不同的业务模块部署在不同的服务器上,甚至同一个业务模块也会 拆分 成多个子业务,部署在不同的服务器上,从而来解决 高并发 的问题,提供 可扩展性 以及 高可用性
  • 业务中使用分布式的场景主要有 分布式存储 以及 分布式计算
    • 分布式存储:可以将数据分片到多个节点上,不仅可以提高性能(可扩展性),同时也可以使用多个节点对同一份数据进行备份
    • 分布式计算将一个大任务拆分成多个小任务,分别由不同的节点进行计算,最后 合并 计算结果得到最终结果,大大提高了计算效率和处理能力。

二、为什么要分布式系统?

单机系统中存在 系统容量不足单节点故障(系统高可用) 的问题。为了解决这两个问题,就需要引入分布式系统。

1. 提高系统容量

  • 发现问题:随着业务越来越复杂,服务也会变得越复杂,单台机器的CPU、内存已无法满足部署一个庞大系统的性能要求。
  • 分析问题:当然可以通过提高系统配置来暂时解决问题,但不论怎么提高,单台机器总会达到性能瓶颈,所以需要多台机器才能应对这些复杂业务的功能扩张。
  • 解决问题:通过 水平(加机器)和垂直(拆分为多个子系统)拆分系统,变成一个分布式架构来提高系统整体容量。

2. 解决单节点故障

  • 发现问题:在单台机器上部署服务,如果机器出现故障导致服务挂了,那么整个系统就会崩溃
  • 分析问题:要想提高系统的可用性,意味着需要在单台机器挂掉之后,系统还能够正常运行,也就是需要一群与之相同的服务器
  • 解决问题:通过分布式架构来制造数据冗余,从而提高系统的可用性,即使单台机器挂了,也能够保证服务正常工作。

三、分布式环境下会有哪些问题?

  1. 网络通信:由于网络本身的不可靠性,因此会出现消息丢失 or 消息延迟等网络通信问题
  2. 网络分区(脑裂):当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信。
  3. 三态:在分布式架构中多了个状态:超时,也就是三态分别是:成功失败,超时。超时可能是消息丢失造成的,一直收不到消息,就会超时。
  4. 分布式事务:ACID(原子性、一致性、隔离性、持久性)
  5. 中心化和去中心化:冷备或者热备

可以参考一下这篇:分布式学习笔记—分布式系统面临的问题


四、分布式系统是如何实现事务的?

可以参考一下这篇:分布式事务解决方案及实现

五、参考资料

  1. 大白话告你什么是分布式,史上最全详解!
  2. 为什么需要分布式系统
  3. 分布式常见的十大坑,你了解几个?
  4. 分布式系统遇到的问题及解决方案
  5. 大厂Java岗四轮面试,你能进入第几轮?

猜你喜欢

转载自blog.csdn.net/e2788666/article/details/131041550