随笔分类 - 【阿肥的架构师之路】
摘要:一、Spring MVC执行过程解析 老规矩,开局一张图再开始吹牛皮~ (1)前端控制器DispatcherServlet 提供者:Spring框架提供 作用:接收请求,处理响应结果 (2)处理器映射器HandlerMapping 提供者:Spring框架提供 作用:根据请求URL,找到对应的Han
阅读全文
摘要:一、什么是ZAB协议? Zab 借鉴了 Paxos 算法,是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。基于该协议,Zookeeper设计为只有一台客户端(Leader)负责处理外部的写事务请求,然后 Leader 客户端将数据同步到其他Follower节点。即Zookeeper只有一
阅读全文
摘要:一、集群角色解析 Leader【领导者】 主要工作: 处理写请求和读请求 发表集群事务【写请求同步ACK】 协调集群内部服务 是否参与选举:是 Follower【跟随者】 主要工作: 处理非事务请求【读请求】,转发事务请求【写请求】给Leader服务器 参与集群事务过半投票【写请求ACK】 选举Le
阅读全文
摘要:一、引言 Zookeeper除了前面文章写的强大功能以外,另外一个常见应用就是注册中心了,比如Dubbo、SpringCloud等都可以使用ZK作为注册中心,那么注册中心为我们的系统做了什么工作呢?我们可以通过一张图片来了解一下。 二、代码实现 第1步:创建父节点 创建出来的父节点用于管理服务节点
阅读全文
摘要:一、简介 在日常开发过程中,大型的项目一般都会采用分布式架构,那么在分布式架构中若需要同时对一个变量进行操作时,可以采用分布式锁来解决变量访问冲突的问题,最典型的案例就是防止库存超卖,当然还有其他很多的控制方式如数据库乐观锁、redis实现分布式锁等,这篇文章我们讨论一下怎么使用ZooKeeper来
阅读全文
摘要:一、引言 我们在前面的学习中知道了zk主要是由文件系统数据结构+监听通知机制组成的,上一篇已经介绍了对zk进行的基础操作,这一篇我想写一下Curator是如何帮我们实现监听功能的。 二、watch的传统方式实现【标准观察模式】 现在我们先看看Curator对传统方式watch是如何进行实现的: 弊端
阅读全文
摘要:一、引言 前两篇写了一些概念性的和在服务器上操作的信息,那么这一篇我们来学习如何用Spring来对Zookeeper做一个整合。首先需要先简单介绍一些Curator这个客户端。 Curator Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户
阅读全文
摘要:一、Linux环境安装Zookeeper 话不多说,直接上命令,按步骤执行即可~ 1、查看JDK版本【Zookeeper需要Java环境】 java ‐version 2、下载并解压Zookeeper wget http://archive.apache.org/dist/zookeeper/zoo
阅读全文
摘要:一、前言 首先标题也写了,Zookeeper是主要做分布式系统间协调的一款神器,那么在学习之前先了解下什么是分布式系统: 分布式系统:本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统。 那么既然存在通信机制,就需要有一款中间接来协调分布式系统中的各个服务进行有条不紊地联系,
阅读全文
摘要:文章更新时间:2021/08/10 一、缓存穿透 定义:查询一个根本不存在的数据,则缓存层和存储层都不会命中。 弊端:缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。 造成缓存穿透的基本原因有两个: 1、自身业务代码或者数据出现问题。 2、一些恶意攻击、爬虫等造成
阅读全文
摘要:一、集群架构 架构图 Redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。 Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。 需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展。PS:官方推荐不超过1000个节点。 red
阅读全文
摘要:文章更新时间:2021/08/06 一、哨兵架构 架构图 sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下客户端第一次需要从哨兵找出redis的主节点 后续就直接访问redis的主节点,不会每次都通过 sentinel代理访问redis的主节点
阅读全文
摘要:一、主从架构 架构图 构建步骤 1、创建一个新的目录,模拟用【从根目录开始演示】 cd zhTools/redis-5.0.3 mkdir zhRedisDemo #创建目录 cd zhRedisDemo mkdir slave #创建主从模式的目录 cd slave mkdir 6380 #用于存
阅读全文
摘要:一、Redis的单线程问题 Redis是单线程吗? Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。 但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。 小结:命
阅读全文
摘要:一、常用数据结构 老规矩,开局一张图: 二、常用命令 String【字符串】 字符串常用操作 SET key value //存入字符串键值对 MSET key1 value1 key2 value2 ... //批量存储字符串键值对 SETNX key value //存入一个不存在的字符串键值对
阅读全文
摘要:文章更新时间:2021/07/30 一、前言 既然是要学习架构,用windows玩肯定是不够的,这篇文章快速过一遍怎么在linux环境上安装redis。 PS:windows版本安装戳这里~ 二、上干货~ 废话不多说,图也不放了,直接上命令,照着流程执行一遍就完成安装了~ 1、安装gcc编译环境 y
阅读全文
摘要:一、背景介绍 学习AQS前先了解一位巨佬,也就是java.util.concurrent包的作者Doug Lea Java并发编程核心在于java.concurrent.util包,而JUC当中的大多数同步器实现都是围绕着一些共同的基础行为去实现的,比如: 等待队列 条件队列 独占获取 共享获取等
阅读全文
摘要:一、背景分析 设计同步机制的意义 多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源,这种资源可能是:对象、变量、文件等。 共享:资源可以由多个线程同时访问 可变:资源可以在其生命周期内被修改 引出的问题:由于线程执行的过程是不可控的,所以需要采用同步
阅读全文
摘要:一、MESI概念 定义:MESI 是指缓存行的四种状态的首字母。 PS:每个缓存行有4个状态,可用2个bit【2位】表示,它们分别是: 二、多核缓存协同操作流程分析 假设有三个CPU A、B、C;对应三个缓存分别是缓存A、B、 C;并在主内存中定义了x的引用值为0。 1、单核读取 2、双核读取 3、
阅读全文
摘要:一、MVCC【多版本并发控制机制】 表现形式:Mysql在可重复读隔离级别下如何保证事务较高的隔离性,同样的sql查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。 好处:对一行数据的读和写两个操作默认不会通过加锁互斥来保证隔离性,避免了频繁加
阅读全文