浅谈分布式架构(3)

3.分布式架构的难点

(1).分布式架构的三态

          分布式架构不仅有成功,失败,还有超时的状态。当超时时我们怎么处理?

(2).分布式架构的事务

          我们都知道事务就是一些列操作的 原子性保证,在单机的情况下,我们能够依靠本机的数据库连 接和组件轻易做到事务的控制,但是分布式情况下,业务原子 性操作很可能是跨服务的,这样就导致了分布式事务,例如A 和B操作分别是不同服务下的同一个事务操作内的操作,A调 用B,A如果可以清楚的知道B是否成功提交从而控制自身的 提交还是回滚操作,但是在分布式系统中调用会出现一个新状 态就是超时,就是A无法知道B是成功还是失败,这个时候A 是提交本地事务还是回滚呢?其实这是一个很难的问题,如果 强行保证事务一致性,可以采取分布式锁,但是那样会增加系 统复杂度而且会增大系统的开销,而且事务跨越的服务越多, 消耗的资源越大,性能越低,所以最好的解决方案就是避免分 布式事务。  还有一种解决方案就是重试机制,但是重试如果不是查询接口,必然涉及到数据库的变更,如果第一次调用成功但是没返回成 功结果,那调用方第二次调用对调用方来说依然是重试,但是 对于被调用方来说是重复调用,例如A向B转账,A-100,B + 100,这样会导致 A 扣了 100,而 B 增加 200。这样的结果不 是我们期望的,因此需在要写入的接口做幂等设计。多次调用 和单次调用是一样的效果。通常可以设置一个唯一键,在写入 的时候查询是否已经存在,避免重复写入。但是幂等设计的一 个前提就是服务是高可用,否则无论怎么重试都不能调用返回 一个明确的结果调用方会一直等待,虽然可以限制重试的次数, 但是这已经进入了异常状态了,甚至到了极端情况还是需要人 肉补偿处理。其实根据CAP和BASE理论,不可能在高可用分 布式情况下做到一致性,一般都是最终一致性保证。

(3).负载均衡

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

(4).数据一致性

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

(5).故障独立性

          分布式系统由多个节点组成,整个分布式系统完全出问题的概 率是存在的,但是在时间中出现更多的是某个节点出问题,其 他节点都没问题。这种情况下我们实现分布式系统时需要考虑 得更加全面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值