分布式系统介绍

一. 什么是分布式系统?

简单来讲,分布式系统就是将一个系统按照一定维度拆分成多个子系统并散布到不同设备。

二. 如何设计分布式系统

1.系统拆分

  • 以业务为导向,按不同层面的业务模型可以将其划分为主模型、次模型。由于业务存在重复依赖(你中有我,我中有你),需要从业务边界中按照业务功能去细分。

2.业务模块解耦

  • 在拆分之前模块与模块之间,系统与系统之间可能存在非常强的依赖,按照业务维度拆分后,两个模块可能还会存在依赖(如电商系统中,用户模块与商品模块,用户强依赖商品,但如果为了减少依赖直接把商品从用户中剔除,显然又不太合理,这种我们可以把两者之间通用性较强的业务独立到共通的服务中,通过调用共通服务减少耦合,从而达到减少用户依赖商品的细粒度。)

3.系统容错

  • 容错设计包含以下两个层面,架构设计层面如重试、服务降级(如正常情况1s轮询一次,降级之后可以5s甚至更久)以及熔断和限流(它们是为了应对性能过载的情况。对于一个模块来说,熔断一般是上游采取的措施,而限流则是自己可以采取的措施);业务功能层面如幂等(保证一定的时间内,重复的请求不再消费)、异步处理以及事务补偿机制(针对重要场景提供多种处理方案,特定情况下一种方案通过即可,业务程序中可以设置开关,通过开关切换实现事务补偿)。

4.高可用

  • 首先在设计过程中要尽量避免系统的单点出现,因为单点系统面临严重的高可用问题,所以需要保证系统处于多机状态,俗称冗余。
  • 为了保证服务器正常运行,可对服务器进行监控,如探针、心跳等。
  • 为了提高服务器服务的可用性,可以进一步采取服务器负载均衡、主从切换,故障转移(如“哨兵”系统在主挂了之后leader哨兵采取的措施)等措施。

总结:在分布式系统设计过程中,存在以下几个难点

  • 各个子系统分别部署在不同机器上需要进行网络通信,所以解决网络因素(网络延迟、网络故障)就是必须要考虑的难点问题。
  • 数据一致性问题,在分布式系统中,由于数据架构需要提供多节点部署,不同节点之间通信就会存在数据差异,让业务不能正常运转,而如何让不同模块之间的数据保证完整性,一致性也是必须要解决的问题,这个问题一般采用分布式事务处理(如消息发布/订阅模式),牺牲一部分性能去保证数据一致性。

三. 分布式系统可以解决什么问题

1.系统宕机

  • 随着业务量增大,系统压力也会越来越大,如果放任不管,可能就会导致系统因为负载过高而宕机,所以需要通过优化让系统变得稳定、负载降低,最直接的方式就是增加系统容量,但是硬件扩展可能会有下面的问题,硬件设备费用过高且后续会带来更大的维护代价。所以就需要通过垂直或者水平按照一定维度将业务系统拆分成多个模块,降低耦合性的方式进一步优化。分布式系统具有良好的横向扩展性,通过横向扩展机器可以快速提高系统的并发量和吞吐量。分布式系统由于模块较多且调用过程长,所以从外界流量入口分发、代理服务、网络传输、容器、应用服务、数据存储都可能存在很高的优化空间。

2.系统瘫痪

  • 如机房停电、线路关闭、网络阻塞等都会导致,而系统在设计之初就需要考虑这些问题,通过不断探索、改进、完善增强系统健壮性,解决这些问题也有众多方案,如多机房部署就可以从根源解决因停电引起的事故。

3.系统故障

  • 由于分布式系统在设计之初为了提高服务可用性,就会设计多种故障转移方式,实在需要人工维修排查故障,又因为分布式讲究系统拆分模块化,使用更轻量化模块,所以能更快更准确的找到并解决问题。

4.系统臃肿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值