分布式架构
什么是分布式?
分布式是指将不同业务分布在不同的地方。是缩短单个任务执行时间来提升效率。比如一个任务由10个相互独立的子任务组成,每个子任务执行1个小时。在一台机器上执行需要10个小时。如果按照分布式方式的话,10台机器每台服务器计算一个子任务,执行完这个任务只需要一个小时。这种工作方式,体现在实际生产中的应用就是 Map/Reduce 分布式计算。与集群的差别
集群是指同一业务部署在多台服务器上。每台机器都能单独地完成相同的业务流程。一个节点down掉了,其他的节点可以替代。整个业务不受影响。避免单点故障的一种方式。通过单位时间内执行尽可能多的任务来提高效率。
比如上面的一个任务要1台服务器执行10小时。10台服务器10个小时就能执行10个任务。这样完成10个任务采用集群和分布式的效率是一样的。
分布式架构所遇到的问题
- 1:数据更新的并发性
单线程应用在运行效率上无法和多线程应用相提并论,因此模型相对简单。现有的计算机技术发展迅速,到了JavaWeb年代。多线程已经是默认的模型了。多线程的引入,不可避免地会遇到并发问题。并发的概念:如果逻辑控制流在时间上重叠,那么他们就是并发的。逻辑控制流就是一次程序操作。简单的如更新,修改等操作。 - 2:分布式一致性
分布式系统中,必然存在共享数据。这时候如果有客户A将 变量K 由 V1变更成V2。此时 客户B无法立即读取到K的最新之。在一段时间之后才能渠道。这种场景常见于数据库复制的延时。
分布式数据一致性问题简单的描述为:在对一个副本数据进行更新的同时,必须确保也能够更新其他的副本,否则不通副本之间的数据将不再一致。
数据一致性的级别:
强一致性:
写什么,读什么,可能耗费性能。
弱一致性:
不承诺立即可以读到写入的值。尽可能保证在某个时间级别(秒)后,数据能达到一致状态。
会话一致性:保证在同一客户端读到一致的值。
用户一致性:保证同一用户对写入的值立读取一致。
最终一致性:
弱一致性的一个特例,在一段时间内 能达到一致的状态。