一、什么叫分布式
将一个大的功能拆分成多个小的服务,协同完成。分布式解决的是中心化管理的问题,把所有的任务叠加在一个节点上处理,太慢了,压力太大了。分布式主要工作是分解任务,把智能拆解。应用的场景是:单台机器无法满性能的要求,必须融合多个节点,并且节点之间是有交互的。
二、分布式的优缺点
优点
- 系统可用性提升:传统的集中式存储或者计算是单点故障时,整个服务都无法正常使用。分布式下的服务体系,单台机器有故障,不至于导致整个服务不可用。比如:jc平台下的标准管理服务不能正常写数据,但是不影响检验服务的使用;再比如检验数据无法正常写入数据,不影响查询服务的使用等
- 系统并发能力提升:分布式的任何一个服务都可以进行水平扩展,通过nginx负载均衡分发到不同的服务器上。
- 系统容错能力提升:分布式下的统一服务的某节点down掉,不影响该服务的使用
- 低延迟:网路正常的情况下。提高了运算效率。
缺点
- 分布式依赖网络:服务间的通讯依赖网络
- 分布式维护成本高
- 分布式cap中无法同时满足,智能满足cp或者ap,需要根据实际场景确定
三、分布式理论
CAP:
Consistency 一致性,Availablity 可用性,Partition tolerance 分区容错性,三者无法同时满足
BASE:
Base Available 基本可用,soft state 软状态,Eventually consisten最终一致性,其来源于大型互联网分布式实践的总结,基于cap理论。
分布式事物:
- 基于mq的消息最终一致性方案:比如:检验业务完成后,会根据检验结果,不合格的数据生产质量异常单数据,在这个过程中数据会出现不一致的情况,项目中使用mq实现消息最终一致性,可靠性有rabbitmq保证,并做补偿机制,消费成功则回退,消费成功则不做处理,确保最终数据一致性。
- 基于xa协议的两阶段提交:rm,tm;准备和提交阶段。存在性能问题,单点故障问题。
- xa三段提交:把两端提交的提交阶段分成预提交和提交,预提交阶段设置了超时时间,如果超时未收到提交的请求,自动执行本地提交请求,可用性得到保证,但会出现数据不一致问题。
- TCC补偿机制:Try、Commit、Cancel三种指令的缩写,逻辑模式类似于xa的两阶段提交。是应用层的一种补偿方式,需要开发写比较多的补充代码,相比于两阶段提交,可用性强,数据一致性差一些。
分布式缓存:(具体redis知识可查看:http://note.youdao.com/noteshare?id=1e8eef0da45349e8f386107f7af8562a&sub=C396722216FA455FB348BACBD54958AA)
redis:
- 缓存穿透:查询缓存中不存在的值,绕过缓存,直达db,每次都查不到数据又不会写入缓存,循环往复。解决方案:布隆过滤器,查到缓存中不存在的key,设置默认值,减少请求数据库的次数。
- 缓存雪崩:热点key大批量过期。解决方案,key的过期时间设置错峰过期。
- 缓存击穿:访问热点key时,正好过期,直达db。解决方案,设置热点key永不过期;另外的方式,不管缓存是否有数据直接返回,然后采用同步或异步方式查询数据库并更新缓存。
redis与mysql保持数据一致:
缓存延时双删;删除缓存重试机制;canal机制+mq异步删除缓存。
四、分布式id(分布式数据库)
- uuid:缺点,无序,太长,
- 数据库自增:缺点,性能差
- 雪花算法:缺点,时钟回拨问题
- uidgenerator:AtomicLong的incrementAndGet()方法获得下一秒时间,不依赖机器时钟
- leaf:延迟等待,不行就抛异