分布式系统和微服务架构越来越流行,特意卖了一本《SpringCloud微服务与分布式系统实战》来给自己充充电,也是掌握技术的必经之路。
大数据、高并发和快响应已经成为互联网系统的必然要求。
在之前的单机系统中,大量的数据会导致查找数据的响应时间边长。高并发会使系统因为繁忙而变慢,从而影响响应速度,单机故障也会是系统崩溃。
为了解决单机系统带来的问题,互联网系统就从单机系统演变位多台机器的系统。
分布式系统由一组为了完成共同任务而协调工作的计算机节点组成,它们通过网络进行通讯。
分布式系统在不同的硬件,不同的软件,不同的网络,不同的计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布式系统能满足互联网对大数据存储、高并发和快响应的要求,采用了分而治之的思想
。
好处:
在分布式系统中,会根据业务或者数据将系统合理切分给各个不同的节点的机器,从而让多个机器节点能够互相协作,完成业务的需求。
常见的切分方法如下:
微服务架构中大部分都是采用混合切分方法。
对系统进行拆分之后会带来很多问题,有兴趣可以去了解下分布式计算的八大谬论
。
如上,分布式系统有很多需要攻克的问题,这里了解一下通讯异常,网络分区,三态,节点故障等。
1)通信异常
通讯异常其实就是网络异常,网络系统本身是不可靠的,由于分布式系统需要通过网络进行数据传输,网络光纤,路由器等硬件难免出现问题。
只要网络出现问题,也就会影响消息的发送与接受过程,因此数据消息的丢失或者延长就会变得非常普遍。
2)网络分区
网络分区,其实就是脑裂现象。
比如:本来有一个交通警察,来管理整个片区的交通情况,一切井然有序,突然出现了停电,或者出现地震等自然灾难,某些道路接受不到交通警察的指令,可能在这种情况下,会出现一个零时工,片警零时来指挥交通。
但注意,原来的交通警察其实还在,只是通讯系统中断了,这时候就会出现问题了,在同一 个片区的道路上有不同人在指挥,这样必然引擎交通的阻塞混乱。
这种由于种种问题导致同一个区域(分布式集群)有两个相互冲突的负责人的时候就会出现这种精神分裂的情况,在这里称为脑裂,也叫网络分区。
3)三态
三态是什么?
三态其实就是成功,与失败以外的第三种状态,当然,肯定不叫变态,而叫
超时态
。
在一个 JVM 中,应用程序调用一个方法函数后会得到一个明确的相应,要么成功,要么失败。 而在分布式系统中,虽然绝大多数情况下能够接受到成功或者失败的相应,但一旦网络出现异常,就非常有可能出现超时/延迟,当出现这样的超时现象,网络通讯的发起方,是无法确定请求是否成功处理的。
4)节点故障
节点故障在分布式系统下是比较常见的问题,指的是组成服务器集群的节点会出现的宕机或“僵死”的现象,这种现象经常会发生。
所以,分布式系统的核心问题就在于:
总结为一句话就是:如何保证多个节点之间保持一致性,服务于企业实际业务
。
了解了分布系统的特点以及会碰到很多会让人头疼的问题,这些问题肯定会有一定的理论思想来解决问题的。
最著名和最具影响力的理论是 CAP原则和 BASE理论。它两也是最基础的理论思想。
分布式系统中主要的特点是一致性、可用性和分区容忍。
Eric Brewer教授针对这 3个特点在 2000年提出了 CAP原则,也称为 CAP定理。
CAP 其实就是一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个词的缩写。
CAP原则指出:任何分布式系统都不能同时满足这 3个特点。
一致性(Consistency):保证所有节点在同一个时刻具有相同的、逻辑一致的数据。
在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。
如果能够在分布式系统中针对某一个数据项的变更成功执行后,所有用户都可以马上读取到最新的值,那么这样的系统就被认为具有【强一致性】。在 CAP原则中的一致性是指强一致性。
可用性(Availability):保证每个请求不管成功还是失败都有响应。但是不保证获取的数据为最新数据。
可用性是指系统提供服务必须一直处于可用状态,对于用户的操作请求总是能够在有限的时间内返回结果。
重点理解【有限的时间】和【返回结果】:
分区容错性(Partition tolerance):系统中任何的信息丢失或者失败都不会影响系统的继续运作。
分布式系统在遇到任何网络分区故障的时候,仍然需要能够对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。不能出现脑裂的情况。
CAP原则指出:任何分布式系统都不能同时满足这 3个特点。
在 CAP原则中的一致性是指强一致性
。
根据 CAP原则,分布式系统只能满足3种情况:
一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本需求,最多只能同时满足这三项中的两项(P 是必须的,因此只能在 CP 和 AP中选择
)。
所以,架构师应该从一致性(A)和可用性(C)之间寻求平衡,系统短时间完全不可用(C)肯定是不允许的,P 又是必须的。那么在分布式环境下必然也无法做到强一致性(A),从而针对强一致性(A)演化出了 BASE理论。
BASE理论是对 CAP 原则中一致性(C)和可用性(A)权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 原则逐步演化而来的。
BASE理论的核心思想就是
:即分布式系统即使无法做到强一致性,也可以采用适当的方法来达到最终的一致性。即放弃强一致性,来保证系统的可用性,从而达到最终一致性。
**通俗来理解 BASE理论:**即使我们无法做到强一致性,但分布式系统可以根据自己的业务特点,采用适当的方式来使系统达到最终的一致性。
在 BASE理论中,一致性分为强一致性和弱一致性。
BASE 是 Basically Available(基本可用)、Soft Sstate(软状态) 和 Eventually Consistent(最终一致性) 这三个短语的简写。
基本可用:指分布式系统在出现故障的时候,保证系统有响应返回,保障系统实现基本可用。
允许损失部分可用性(服务降级、页面降级),来保证核心可用,体现在“时间上的损失”和“功能上的损失”。
比如:在高并发的场景下,部分用户双十一高峰期淘宝页面卡顿或降级处理,提示“系统繁忙,待会再来”。
其实就是前面讲到的三态,既允许系统中的数据存在中间状态,既系统的不同节点的数据副本之间的数据同步过程存在延时,并认为这种延时不会影响系统可用性。
软状态:指允许分布式系统出现
中间状态(延时态)
。而该中间状态不会影响系统整体可用性。
这里的中间状态是指不同的 Data Replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。
比如:分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。
最终一致性:指分布式系统中所有数据副本经过一段时间的数据同步后,最终能够达到一致的状态,以保证数据的正确性。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
强一致性:又称线性一致性(linearizability )
弱一致性:
最终一致性:
顺序一致性:
最受欢迎的分布式系统架构就是微服务架构了。
微服务架构是将一个单体系统拆分为多个相对独立的服务,每一个服务拥有独立的进程和数据,每一个服务都是以轻量级的通信机制来进行交互的,从而达到协同的效果。
一般服务都是根据业务模块来进行的,可以是独立的产品。
微服务没有明确的概念和定义,但是微服务存在一定的风格,只要系统架构满足一定的风格,就可以被称为微服务架构。
Eric Brewer教授提出了微服务的九个风格。有兴趣自行了解。
开发中,一般我们遵守 REST原则的 Web服务,即RESTful
。
1)字面含义上
2)拆分单体系统上
3)从两者关系上
分布式服务框架有很多,单独使用他们可能会比较上手。
SpringCloud的开发团队就把各家开源的分布式服务框架,进行了整合,就形成了现在的 SpringCloud的组件。
注意
:SpringCloud没有重复造轮子,而是通过技术进行整合。
SpringCloud就是通过这种方式构建了一个较为完整的企业级实施微服务的方案。同时开发团队将分布式框架通过 SpringBoot进行了封装,屏蔽了难懂的细节,给开发者提供了一套简单易懂、易部署和易维护的分布式开发工具包。
SpringCloud 是一套目前较完整的微服务解决框架,功能非常强大。注册中心、客户端调用工具、服务治理等。
SpringBoot 是一个快速开发框架,能够帮助我们快速整合第三方常用框架(Maven 依赖继承关系),完全采用注解化,简化XML配置,内置嵌入Http服务器(Tomcat、Jetty、undertow),默认嵌入Tomcat服务器。最终以Java应用程序进行执行(java -jar xxx.jar)。
两者的关系:
常见的组件如下:
SpringCloud未来有去 Netflix组件的趋势,比如:Resilience4j将会作为新的熔断器。
参考文章:
– Stay Hungry. Stay Foolish. 求知若饥,虚心若愚。