首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >架构爬坑记——从0开始学习分布式锁

架构爬坑记——从0开始学习分布式锁

原创
作者头像
Java知音
修改2019-05-16 09:45:35
4140
修改2019-05-16 09:45:35
举报

锁的概述

1、为什么要用锁

  • 多任务环境中才需要
  • 任务都需要对同一共享资源进行写操作;
  • 对资源的访问是互斥的
  • Tips:
  • 任务通过竞争获取锁才能对该资源进行操作(①竞争锁);
  • 当有一个任务在对资源进行更新时(②占有锁),
  • 其他任务都不可以对这个资源进行操作(③任务阻塞),
  • 直到该任务完成更新(④释放锁);

2、锁是什么

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

3、JDK锁的那些事

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

JVM锁解决不了分布式环境多任务对共享资源竞争的协同操作问题!

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

4、分布式锁方案比较

  • 利用mysql的实现
  • 利用redis的实现
  • 利用zookeeper的实现
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

5、模板方法模式

——在父类中编排主流程,将步骤实现延迟到子类去实现。

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

1、定义锁的接口Lock

2、在AbstractLock模板锁里面实现getLock方法,实现通用的逻辑。

3、不能确实的步骤,作为虚拟方法,甩锅给子类实现。

4、子类只需要聚焦自己的小步骤逻辑,实现tryLock,waitLock,unLock方法。

Zookeeper

1、zookeeper简介

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

2、Zookeeper 数据结构

  • ZooKeeper数据结构类似Linux
  • 每一个节点都有值
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
  • zookeeper在底层其实只提供了两个功能
  • 管理(存储,读取)用户程序提交的数据;
  • 并为用户程序提供数据节点监听服务;

3、zookeeper 节点类型

有四种类型的znode:

  1. PERSISTENT-持久化目录节点
  2. 客户端与zookeeper断开连接后,该节点依旧存在
  3. PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
  4. 客户端与zookeeper断开连接后,该节点依旧存在,只是 Zookeeper给该节点名称 进行顺序编号
  5. EPHEMERAL-临时目录节点
  6. 客户端与zookeeper断开连接后,该节点被删除
  7. EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
  8. 客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

watcher(观察者模式)

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
  • 观察者模式要素:目标 — 店铺老板(事件源 )
  • 观察者 — 客户(事件消费者 )
  • 事件 — 电话响了
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

watcher机制图示

基于Zookpper分布式锁

1、zookeeper 基于同名节点的分布式锁

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

2、zookeeper相互监听的分布式锁

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

总结

这篇关于Zookpper分布式锁视频的简述就到这里结束了,当然仅仅看这里的图文,有些人可能摸不着头脑,我这边为大家准备了完整的视频。有需要的朋友可以需要的都可以关注我后台私信回复“架构资料”获取。

还有一些Java架构视频讲解,需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。

给大家推荐一个程序员学习交流群:856443934。群里有分享的视频,还有思维导图

群公告有视频,都是干货的,你可以下载来看。

一、阅读源码

阅读、分析源码是程序员最基本的码代码能力也是码农的根本所在,学习经典源码中所用到的经典设计思想及常用设计模式,能够帮你了解大牛是如何写代码的,从而吸收大牛的代码功力。在阿里面试中,MyBatis,Spring等框架的底层原理是经常会被问到的

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

开源框架解析

二、分布式架构

阿里巴巴有很多大团队,这种大团队里有很多小团队,到小团队之后,做的业务都不相同,如果想立足成为一线互联网公司中的万能选手,最主流的分布式架构中有很多知识都是必须要去了解与学习的。并且在阿里面试过程中,面试官会问到实际应用场景的问题:比如微服务化、用户量、并发量、业务复杂度以及可扩展程度等,这里不多赘述。本屌提供一个分布式架构的学习思路也是自己目前还在学习中的体系:

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

高性能架构专题

三、微服务架构

微服务是现在互联网架构技术中最火热的话题之一,也是本屌目前正在学习研究的方向。在阿里面试过程中,面试官很少会问到关于微服务相关的问题。但作为一名开发者,一名有技术梦想的程序员微服务架构是现在必须要去了解的主流技术,小编给自己制定了一个微服务技术的学习计划:

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

微服务架构专题

四、并发编程

并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出来一个最全面的学习大纲:

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

并发编程

五、性能优化

性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,特别是阿里巴巴这样的一线互联网公司最为注重,因此想进入阿里,性能优化一定是要去深入学习与理解的一环,本屌在性能优化这一块虽然不能算专家,也可以自信的说是精通了(注意:自己的简历上一定不要写精通xxxx,要不然面试官会怼死你。好在本屌这一块还算自信)

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

性能优化

六.设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

架构爬坑记——从0开始学习分布式锁
架构爬坑记——从0开始学习分布式锁

设计模式

一名开发人员必须有适合自己的兵器,也就是工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。下列是我自己常用的开发工具:

  • Maven的,项目管理
  • Jenkins,持续集成
  • sonar,代码质量管理
  • Git的,版本管理

以上是大佬收集总结的Java架构技术图谱,自己因为比较喜欢技术,所以收集了一些Java高并发、分布式、JVM、spring、源码分析和kafka等架构技术资料,如果你也对技术感兴趣可以来关注我。后续会有更多干货奉上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 锁的概述
  • Zookeeper
  • 基于Zookpper分布式锁
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档