面试常问:说说你对分布式的理解

什么是分布式?

首先明确一点:分布式并不是某个技术的概称,而是一个互联网服务系统架构思想。我们一般称之为分布式架构。

那么分布式到底是什么一个概念:

分布式诞生的初衷是为了在多业务场景下,保证五个特点:高性能,高并发,高可用,可伸缩,可维护。

它的具体实现——分布式系统,则是由一组服务节点,共同协调工作组成。它们之间通过网络进行通信。

可以说它的诞生为单体架构解决了很大一部分问题,满足了互联网对大数据存储,高并发,快响应的要求,采用了”分而治之“的思想。

分布式的切分方法:
  • 水平切分:将一个系统部署在多个计算机上。(多台服务器)

  • 优点:简单,独立,高可用,可伸缩,高性能。

  • 简单:只需要实现一个路由算法,将请求合理分配到各个节点即可。可实现这个的网关有gateway,nginx,netflix zuul等。

  • 独立:每个节点都拥有完整功能,不需要依赖其他节点,因此不会产生许多交互。

  • 高可用:出现不能用的计算机,其他计算机依旧能够正常提供服务。

  • 可伸缩:根据性能要求提高,添加或删除服务节点都十分容易

  • 高性能:因为都是单机完成,不会有多余的性能消耗。

  • 缺点:低维护性。

  • 低维护性:当业务变得更加复杂,此时计算机上部署所有功能跟业务的更新方面就变得复杂(本来只需要更新一次,此时要每台计算机上的项目都需要进行更新)

  • 垂直切分:根据服务的对象进行拆分,例如拆分为用户,产品,交易。分为不同的模块部署在不同的计算机上。

  • 优点:提高业务独立性,提高灵活性,提高可维护性,增加协作性

  • 提高业务独立性:每个服务节点上部署着对应的业务,业务之间相互独立。

  • 提高灵活性:每个服务节点上部署的业务可以自己进行扩展,不会对其他业务产生直接影响。

  • 提高可维护性:每个服务节点上的业务,如果单独进行维护,不用将整个项目进行重启,而是可以直接针对业务进行重启更新。而且对于bug的定位也更加准确。

  • 增加协作性:服务节点之间必须进行紧密联系,才能保证项目正常运行。

  • 缺点:降低了可用性,降低了数据一致性

  • 降低可用性:由于每个服务节点上并不是一整个项目,而是产生了联系,那么单独一台挂机,会影响到整个项目的运行。

  • 降低数据一致性:将业务进行拆分,就会可能因为网络或各种问题导致请求失败,那么就会导致数据的一致性难以保证,只能通过seata等分布式事务管理手段尽可能减少数据不一致的问题。

  • 混合切分:首先根据业务进行垂直拆分,再在其中进行水平拆分使服务得到保障。

  • 现今微服务架构大多数采用这种方式进行实现,这样可以最大程度保证分布式的五个特点的实现,但是不存在没有缺陷的地方,中间各个部分之间存在的问题依旧存在,只是对于整体而言问题都互相得到了弥补,最大化保证了服务的稳定性。

分布式系统所面临的问题:

分布式系统表面上根据它的三种切分方式,特别是最后一种混合切分,导致好像已经不存在什么问题了,毕竟各个问题都得到了弥补,保证了整体项目的运行。

但是要明白分布式系统的一个根本性问题:各个服务节点依靠网络进行联络

在1994年,Peter Deutsch(彼得.多伊奇)就提出了分布式计算的七大谬论,后来再被James Gosling(詹姆斯.高斯林)等人完善为的八大谬论:

  • 网络是可靠的

  • 网络没有延迟

  • 带宽是无限的

  • 网络是安全的

  • 网络拓扑不会改变

  • 肯定至少有一个在线维护系统的管理员

  • 传输开销为零

  • 网络是同质的

由八大谬论可以看出,网络的不可靠性,拓扑结构的差异和传输速率大小等因素对分布式系统都存在很多限制。

总结为三点:

异构4的机器与网络:分布式系统中,机器的配置,架构,性能,系统等都不一样。在不同的网络之间,通信带宽,延时,丢包率也是不一样的。在多机的分布式系统中如何保证所有机器齐头并进,为同一个业务目标服务,这是一个相当复杂的问题。

普遍的节点故障:在分布式系统中,很多机器因为某些原因不能继续工作,分布式系统如何发现它们并主动剔除,将请求分配到正常的节点,也是一个需要面对的问题。

不可靠的网络和机器:多机器之间的交互是通过网络进行,而网络必然发生分隔,延时,乱序,丢包等问题,机器也会因为请求量的增加而降低处理能力,这些导致的响应缓慢,请求超时,会影响用户对服务的忠诚度。

分布式系统的衡量标准:
  • 透明性: 一个分布式系统对外而言无需知道内部构造,只需要知道参数,返回值等内容就行

  • 可伸缩: 当分布式系统的全部节点都无法满足业务膨胀的需求时,可以根据添加新的节点应对,反之亦可删除节点

  • 可用性: 无论一个节点是否出现问题都可以正常对外提供服务,可以通过正常时间和不可靠时间比对来判断可用性

  • 可靠性: 主要针对数据不丢失问题

  • 高性能: 多个节点分摊请求,因此应该做到保证响应速度,保证性能的高效

  • 一致性: 保证数据在资源库中为一致的

分布式系统的设计原则:
  • CAP原则

  • 一致性(consistencty)保持所有节点在同一时刻,逻辑与数据保证一致(强一致性)

  • 可用性(availabilty)保证每个请求不管成功还是失败都存在响应

  • 分区容错性(partition tolerance)系统中任何的信息丢失都不会对服务的其他节点产生影响

  • BASE理论:对大型分布式的实践总结

  • 核心思想:即使分布式系统无法做到强一致性,也可以采用适用方法达到最终一致性

  • 强一致性:当用户进行了更新操作时,所有相关的业务数据必须同时更新,不允许出现任何数据错误

  • 弱一致性(最终一致性)当用户进行更新操作后,允许部分相关业务数据不立即更新,可以再反复进行请求或其他手段保证最终数据的一致。

  • BASE不是一个单词,而是拆分为三份:

  • BA:(Basically Available) 基本可用

  • S:(Soft state) 软状态

  • E:(Eventual Consistency) 最终一致性

本文采用观点原文:https://zhuanlan.zhihu.com/p/457803728

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值