前言:由于对于公司的分布式系统很感兴趣,所以就研究了起来。。。
**前因:**分布式系统的由来?
集中式系统:
**概念:**一个主机带多个终端,终端仅仅负责数据的录入和输出,而运算,存储等全部在主机上进行
**应用:**上个世纪的应用,以及现在的银行系统。
**优点:**部署结构简单
**缺点:**系统庞大而复杂、难以维护、发生单点故障、扩展性差等等哈。
分布式系统:
概念:一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。简单的说就是一群独立的计算机集中共同对外提供服务,但是对于系统用户而言,就像是一台计算机在提供服务一样。
特征:
1、分布性:由于计算机之间是通过网络进行通信的,所以多台计算机位置在空间上是随意分布的
2、透明性:系统资源被所有计算机共享,一台计算机不仅可以使用自己本计算机的资源,还可以使用分布式系统中其它计算机的资源。
3、统一性:分布式系统若干计算机可以协作完成一个共同的任务
4、通信性:系统中任意两台计算机可以通过通信来交换信息。
**优点:**由于是普通计算机,性价比更高、处理能力更强、可靠性更高、可靠性更高、很好的扩展性
**缺点:**由于使用网络进行通信,性能有一定的影响、有产生数据一致性的风险。
**分布式:**是指在多台不同的服务器中部署不同的服务模块,通过远程调用协调工作,对外提供服务
**集群:**是指在多台不同的服务器中部署相同的应用或者服务模块,构成一个集群,通过负载均衡对外提供服务。
分布式的CAP理论:
首先从字面意思来看,CAP:分别代表C,一致性,A,可用性,P,分区容错性。
**1、一致性指:**所有节点在同一时间的数据完全一致,所以一致性说的是数据的一致性。
对于客户端来说,一致性指:多并发访问时更新过的数据如何获取的问题。
对于服务端来说,一致性指:更新如何复制分布到整个系统,以保证数九的最终一致。
注意一致性的前提,感觉是废话,就是有并发读写的场景。
一致性分为三种:
强一致性:对于数据库来说,要求更新过的数据都被访问到,这是强一致性,
弱一致性:如果能容忍更新后的数据后续部分或者全部访问不到,这是弱一致性,
最终一致性:经过一段时间后要求能访问到更新后的数据,这是最终一致性。
CAP中的一致性指的是强一致性。
**2、可用性是指:**服务一直是可用的,而且是正常的响应时间。
一般衡量一个系统的可用性,是根据停机时间来衡量的。
**3、分区容错性的解释是:**分布式系统中遇到某个节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
CAP 3选2的抉择:
其实,CAP中进行选择其中的两项而舍弃掉其中的一项时,这里P是不能舍弃的,所以,也就是从C和A中做出取舍。
1、选CP而放弃A
对于一些产品是舍弃了A(可用性的),比如redis、HBase(分布式存储)、Zookeeper(分布式协调组件)
A,其实是牺牲了用户的体验来保证强一致性的。
2、选AP而放弃C
说明:这里的一致性,放弃的是强一致性。但是可以达到弱一致性或者最终一致性。
这种选择在高可用的系统见得多,比如12306或者淘宝。
例子:是在抢票时,提交页面是可以抢的,或者购物车中有货的,但是最终付款时,显示没有了。
设计到钱财时,必须选择的是CP。
对于其它的场景选择的是,选择的是AP舍弃C的。