单点故障和分布式锁
单点故障:由于一个服务故障或阻塞导致后面的服务都不可用,致使整个系统陷入瘫痪
分布式锁:分布式锁是解决单点故障的一种方式,zookeeper既是其中之一被称为分布式协调技术
为什么要使用分布式锁:
因为在分布式应用中,存在多组服务即进程访问同一块数据的问题,比如,网上商城同时3个人下订单分别购买一个商品,而商品的数量为2,此时因为是3个独立的服务,彼此之间共享数据,那么就会出现数据不一致的问题。虽然单机环境即Java中提供了并发处理的API,即单进程多线程的并发处理,而分布式系统是多进程多线程,所以原有的单机部署的并发策略就会失效,为了解决这个问题,此时就需要一种跨JVM的互斥机制来控制共享资源的访问。
分布式锁应该具备的条件:
- 1.在分布式环境中,一个方法同一时间只能被一个机器的一个线程执行
- 2.高可用的获取与释放锁,即任何时候都能获取与释放锁,即分布式锁的解决方案本身(zookeeper)要高可用
- 3.高性能的获取与释放锁,任何时候请求与释放锁都能被快速响应
- 4.具备可重入特性,即多任务并发而不必担心数据错误
- 5.具备锁失效机制,防止死锁的发生
- 6.具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败,不能拿不到锁就陷入阻塞一直等待
解决方案:zookeeper
zookeeper:一个为分布式应用提供一致性服务的开源组件,
本博客为Swagger-Ranger的笔记分享,文章会持续更新
文中源码地址: https://github.com/Swagger-Ranger
欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com