分布式环境的问题
分布式环境的特点
并发性
程序运行过程中,并发性操作是很常见的。比如同一个分布式系统中的多个节点,同时访问一个共享资源。数据库、分布式存储
无序性
进程之间的消息通信,会出现顺序不一致问题
分布式环境下面临的问题
网络通信
网络本身的不可靠性,因此会涉及到一些网络通信问题
网络分区(脑裂)
当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信
三态
调用一个接口的结果可能是 成功、失败、超时
分布式session
粘性Session : 用户访问集群某台机器后,后续请求也落到该机器上
优点:实现简单,没有额外网络开销
缺点:有机器down掉时,用户Session会丢失。
方案:nginx的ip_hash负载均衡方案
session复制:将一台机器上的session数据广播复制到集群中其余机器上
优点:实现简单,有机器down掉时不影响用户访问
缺点:有一定的网络开销
方案:开源方案tomcat-redis-session-manager
缓存Session
将session存入分布式缓存集群中的某台机器上
优点:可靠性好
缺点:稳定性依赖于缓存的稳定性,session信息要根据合理的策略写入缓存
方案:spring session
分布式事务
ACID(原子性、一致性、隔离性、持久性)
例如A和B操作分别是不同服务下的同一个事务操作内的操作,A调用B,A如果可以清楚的知道B是否成功提交从而控制自身的提交还是回滚操作,但是在分布式系统中调用会出现一个新状态就是超时,就是A无法知道B是成功还是失败,这个时候A是提交本地事务还是回滚呢?其实这是一个很难的问题。
事务跨越的服务越多,消耗的资源越大,性能越低,所以最好的解决方案就是避免分布式事务。
典型方案:XA事务方案、柔性事务、基于消息的最终一致、业务补偿与人工修正
数据一致性
数据被分散或者复制到不同的机器上,如何保证各台主机之间的数据的一致性将成为一个难点。
方案:分布式事务、分布式锁(redis\zookeeper)
故障
分布式系统由多个节点组成,整个分布式系统完全出问题的概率是存在的,但是更多的是某个节点出问题,其他节点都没问题。这种情况下我们实现分布式系统时需要考虑得更加全面些

浙公网安备 33010602011771号