分布式架构演变历史2

一,分布式架构中的常见概念

集群

    小店原来只有一名厨师,所有的工作都由他来做,后来顾客多了,忙不过来,又请了一名厨师,所有的工作由这两个人来承担,这两个人的关系就是集群

                                               

分布式

为了让厨师专心炒菜, 把菜做好,又请了配菜师傅负责切菜,备菜 备料。厨师和配菜师傅的关系就是 分布式

一个配菜师傅忙不过来,又请了个配菜师傅,这两个配菜师傅的关系就是集群

                                               


节点

节点是指一个独立按照分布式协议完成的一组逻辑的程序个体,在具体项目中,一个节点表示一个操作系统上的进程


副本

副本(replica、copy)指在分布式系统中为数据或服务提供的冗余

数据副本 指在不容的节点上持久同一份数据,当出现某一个节点数据丢失时,可以从副本上读取到数据。数据副本时分布式系统中解决数据丢失问题的唯一手段。

服务副本表示多个节点提供相同的服务,通过主从关系来实现服务的高可用方案

中间件

中间件位于操作系统提供的服务之外又不属于应用,它是位于应用和系统之间为开发者方便的处理通信输入和输出的一类软件,能够让用户关心自己应用的部分

分布式领域中冯诺依曼模型的变化

前面讲过经典理论-冯诺依曼体系, 计算机由运算器 控制器,存储器 输入和输出设备五大部分组成,不管架构怎么变化计算机仍没有跳出该体系的范畴

输入设备的变化

在分布式系统架构中,输入设备分两类,第一类互相连接的多个节点,在接受其他节点传送的信息作为该节点的输入;另一种 传统意义上的人机交互的输入设备

输出设备的变化

输出和输出一样,也是两种,一种是传统节点向其他节点传输信息时,当前节点可以看作输出设备,另一种就是传统的人机交互输出设备

控制器的变化

在单机控制器指的是CPU中的控制器,在分布式系统中,控制器的主要作用是协调和控制节点之间的动作和行为,比如负载均衡

运算器

在分布式系统中运算器是由多个节点来组成的,运用多个节点的计算能力来协同完成整体的计算任务

存储器

在分布式系统中,需要把承担存储功能的多个节点组织在一起,组成一个整体的存储,比如数据库,redis

分布式系统的难点

分布式系统对于集中式系统而言,在实现上会更加复杂,分布式系统将会更难理解,设计,构建和管理。同事意味这应用程序的根源问题更难发现。

三态

在集中式架构中, 调用接口结果只有两种,成功 失败。

在分布式架构中,会多出一种 超时 这个状态

分布式事务

这是一个必须面对的问题,事务就是一些操作的原子性保证,在单机的情况下,可以依靠数据库链接和组件轻易做到事务控制,但在分布式情况下,业务原子性操作很可能跨服务,这样就导致分布式事务。 例如A和B操作分别是不同的服务下的同一个事务操作内的操作,A调用B,A可以清楚的知道B是否成功提交从而控制自身提交还是回滚,但是分布式系统中调用会出现一个新的状况就是超时, A无法知道B是否成功,这时候A不知道该如何操作?如果强行保证事务的一致性,可以采取分布式锁,但是会增加系统复杂度而且增大系统的开销,而且事务跨的服务越多,资源消耗越大,性能越差,最好的解决方案就是避免分布式事务

还有一种就是重试机制,但是从事如果不是查询接口,必然涉及到数据库的变更,如果第一次调用成功但是返回成功结果,那调用第二次调用对调用方来说益阳市重试,但是对被调用方来说是重复调用。例如 A向B转账,A-100,B+100。这样会导致A扣了100,B增加200.这样结果就是错误的。因此需要在写入的接口要做幂等的设计。多次调用和单词调用是一样的结果。通常设置一个唯一键,在写入时查询是否存在,避免重复写入。但是等幂的设计的一个前提就是服务的高可用,否则无论增氧重试都不能调用返回一个明确的结果调用方会一直等待,虽然可以限制重试次数,但是这时候已经进入异常状态,甚至到了极端情况还是需要人工补偿,其实根据CAP和BASE理论 不可能在高可用的分布式情况下做到一致性,一般都是 最终一致性。

负载均衡

每个服务器单独不是,为了达到高可用,每个服务至少要两台机子,应为互联网公司一般使用可靠性不是特别搞得普通机器,长期运行宕机的概率大,所以两台机器能够大大降低服务不可用的可能性,大型项目会采用十几台甚至更多机器来部署一个服务,这不仅保证高可用,更能提升服务的QPS(每秒查询率),但是这样又带来一个问题,请求过来到底路由到那台机器?路由算法很多 有DNS路由,如果session过在本机,还会根据用户id或者cookie等信息路由到固定机器,当然现在应用服务器为了扩展方便都会设计为无状态,session会保存到专有的session服务器,所以不会涉及到拿不到session问题,那么路由规则是随机获取么?这是一个方法但是,实际情况逼着复杂,在一定随机范围内随机,但是在大的范围也会分很多个域,。例如为保证异地多活的多机房,跨机房调用的开销太大,肯定会优先选择同机房的服务,这个具体的参考机器的分布来考虑。


一致性

数据被分散或者复制到不同的机器上,如何保证各个机器间的数据一致性将成为一个难点。

故障的独立性

分布式系统有多个节点组成,整个分布式系统完全出问题的概率是存在的,但是在实际总出现更多的是某个几点出问题,其他的没有问题,这种情况下分布式系统需要考虑的更加全面。

猜你喜欢

转载自blog.csdn.net/yuhaiyang_1/article/details/80866012