随着互联网的大量普及,越来越多的企业在不断迭代产品的同时,也在进行技术架构升级,将早期的单体式架构升级成分布式架构。升级改造的成本是非常之大的,那么为什么各大企业仍趋之若鹜的要做架构改造呢?
主要原因有三点:
1)单体式系统带来的成本太高了,互联网涌入网民的增多导致需要更好的计算能力、网络能力、存储能力,而只是通过扩展小型机、大型机来提高单机性能,太贵了,一般的企业承受不起。
2)数据为王的时代需要更多的数据进行分析,企业们需要更经济实惠的方式来存储数据、分析数据,分布式系统多节点显然是更好的选择;
3)在用户为王的互联网时代,互联网产品均要求7*24小时能提供服务,保障系统的高可用,通过增加机器来做好容灾准备的方式也演变成了分布式系统的方式。
综上所述,我们需要分布式系统。分布式系统的定义是由一组通过网络进行通信、为完成共同的任务而协调工作的计算机节点组成的系统,简单来说,就是通过网络把很多链接的计算机连接起来,协同工作,打造一个高性能、高可用的系统,对外提供服务。
分布式系统的学习包括两个模块--分布式计算&分布式存储。在分布式计算中,我们需要学习的知识点有四个:
1)服务如何找到另一个服务?
2)如何判断服务的请求发给哪一个实例?
3)如何避免系统的雪崩?
4)如何进行监控告警?。
在分布式存储中,我们需要学习的知识点也有四个:
1)如何判断数据存储规则?
2)如何数据分片?
3)如何复制数据?
4)如何做分布式事务?
分布式系统的分布式计算中,第一个问题是服务如何找到另一个服务呢?这块主要是结合微服务的思想在进行落地。通过将服务划分为生产者producer(提供相应的服务)、消费者consumer(发起请求的服务),再通过服务注册、服务发现,生产者节点将自己所能提供的服务、自己的IP地址端口等给到注册中心,消费者节点到注册中心根据自己的诉求获取需要的服务。
第二个问题是在服务找到之后,消费者节点应该将用户的请求发往部署着生产者节点的哪一个服务呢?如果是有状态的服务(即同一个服务下不同机器的数据不一样),通过路由来确认当前要访问的请求数据是在哪一个实例上,再进行请求的分发即可;如果是无状态的服务(即同一个服务不同机器的数据一样),通过hash、权重分配、轮询等规则将请求进行分发即可。
第三个问题是如何避免服务的雪崩(即部署某个服务的某台机器出了问题,大量的请求发过来,导致其他的机器承受不住,最后该服务的所有机器都挂了)?在分布式系统内有两个办法,1、快速减少系统负载来避免雪崩的方式,即熔断服务、降级服务、限流服务;2、通过快速增加机器节点,承受更多的服务请求,即弹性扩容。
最后一个问题是如何对分布式系统进行监控告警?在分布式系统内部,由于服务众多、机器众多,如果不了解系统整体的情况、服务与服务之间如何关联,当出现问题时排查问题就会变得非常艰难。通过在部署服务的每台机器上安装探针,采集数据,进行分布式的trace追踪,再结合一定的告警机器,可保障服务的高可用,在出现问题时快速排查、解决问题。
分布式系统的分布式存储中,第一个问题是用什么样的规则决定如何存储数据?业内流行的有三个理论,即ACID(即atomicity原子性、consistency一致性、isolation隔离性、durability持久性)、BASE(即BasicallyAvailable基本可用、SoftState软状态、EventuallyConsistent最终一致性)、CAP(即Consistency一致性、Availability可用性、Partition分区容错性)。这取决于不同的业务场景,在交易场景中,大部分企业会采取ACID原则,即交易操作不能接受任何错误,每个操作的步骤必须是原子的、操作与操作的数据是隔离的、操作完成后的数据是持久化的;在大部分场景中,企业一般采用BASE原则,即每个业务系统最开始的时候由于大业务量等情况,数据不要求强一致性,但可以通过采取一定的方式使得数据最后是一致的。
第二个问题是如何做数据分片?我们知道互联网系统会产生大量的数据,而单机是不可能存储所有的数据,因此需要解决数据如何存储在不同的机器上。在分布式系统中常用的规则就是Hash、一致性hash、按范围分片规则来将数据存储在不同的机器上。
第三个问题是如何做数据复制?为了保障服务的高可用,除了机器的设备准备之外,还需要对数据做处理,保障业务请求访问到任何一个节点的数据都是一致的、准确的。常用的解决方案有主从复制、一致性协议Raft等。
第四个问题是如何做分布式事务?在单机系统中,通过时间戳加序号的方式就可以实现事务功能,然而在分布式系统中,因为系统拆分成了微服务、微服务又分为多个节点进行部署,系统中的时间不能完全同步,这个时候可以采用整体系统选一台机器按单机的模式生产事务ID,同城多中心和异地多中心去该台机器获取事务ID,实现分布式事务一致性。
至此,分布式系统的学习就要告一段落了,我们再来回顾下本文从为什么需要分布式系统开始,介绍了当下互联网时代存在的问题、分布式系统的定义、分布式系统计算核心知识点、分布式系统存储知识点。目前头部互联网公司如阿里头条腾讯百度美团等之外、金融行业如银行保险等、传统行业如医疗教育健康等等,各行各业都开始进行技术架构重构,转单体式应用为分布式,因此掌握了分布式系统之后,在秋招、金九银十跳槽季中,一定会有助力去到心仪的公司噢~