木西笔记

个人博客

分布式事务二

分布式事务概述

基础理论 分布式事务 单机的事务我已经在我的隔离级别系列文章中总结过,分布式事务是针对分布式系统中对数据的修改发生的逻辑上满足事务特性的操作序列的要求。 分布式事务指的是事务的参与者、事务所在的服务器、涉及的资源服务器以及事务管理器等分别位于不同分布式系统的不同服务或数据库节点上。简单来说,分布式事务就是一个在不同环境(比如不同的数据库、不同的服务器)下运行的整体事务。这个整体事务包含一个或...

分布式事务一

CAP和BASE理论

基础理论 CAP 理论 CAP 定理(Consistency、Availability、Partition Tolerance Theorem),也称为 Brewer 定理,起源于在 2000 年 7 月,是加州大学伯克利分校的 Eric Brewer 教授于“ACM 分布式计算原理研讨会(PODC)”上提出的一个猜想。两年之后,麻省理工学院的 Seth Gilbert 和 Nancy Ly...

事务详解(2)-- 再谈隔离级别

基于锁调度的隔离级别

前言 在上一篇文章当中,我们讨论了事务的一般理论以及事务的隔离级别的起源,并讨论了SQL-92标准的问题的修正的论文 「A Critique of ANSI SQL Isolation Levels」。 改论文在标准的基础上推广出了异常现象P1-P3广义的解释,然后根据A1-A3的容忍度补充了标准内的隔离级别P0的个隔离级别。本文继续讨论 「A Critique of ANSI SQL Is...

事务详解(1)-- 隔离级别

【A Critique of ANSI SQL Isolation Levels】详解

概要 本文主要讨论的是事务隔离级别,从事务隔离级别的起源,标准和本质来深入分析事务并发控制下的隔离级别的原理和实现。阅读文本前,你需要具备事务的一些基本知识,本文的第一章节会回顾我们所熟知的有关隔离级别和事务的基础知识。如果你了解事务的一般基础知识,你可以跳过第一章节,直接阅读第二章节。 事务概述 什么是事务 事务由一组操作构成,我们希望这组操作能够全部正确执行,如果这一组操作中的任意一个步...

开源重试组件Attempt

开源 想做开源软件很久了,奈何一直没有启动起来。一来是没有契机,二来也没有想法。2020年由于一些变故,我从某团离职后来到了新公司。负责一个To B业务, 由于并发量和我以前负责的项目没法比,同时又是个to B的项目,因此 省去了火急火燎的去处理线上问题的时间。因此,更多的时间我拿来思考和总结。 同时也参加了软件架构师的培训中。虽然各大互联网企业对软考证书似乎并不care,但是我的目的不仅仅...

Java并发编程之volatile关键字

从Hotspot分析volatile的实现原理

概述 volatile关键字是Java并发编程当中不可或缺的一环,维序着Java共享变量的可见性和有序性。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来回顾一下volatile的应用场景。 Java是跨平台的,因此针对于不同平台,JVM实现方式也有所不同,但是必遵循一定的规范,来统一Java编程的基本原则,这个规范被成为Java虚拟机规范...

Java内存模型(2)

编译器重排序

前言 在我的Java内存模型(1)JMM是什么 中我已经阐述了JMM是什么以及CPU缓存模型和流水线的技术,下面针对于指令重排序中的编译器重排序做深入的讨论。 内存模型在JVM的应用 首先,我们再来重温一下,三种重排序。 重排序 指令重排序:在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。重排序分三种类型: 编译器优化的重排序 编译器在不改变单线程程序语义的前提下(代码中不...

CPU缓存一致性协议

深入理解内存屏障

CPU 结构 现代多核处理器,一个CPU由多个核组成,每个核又可以有多个硬件线程,比如我们说4核8线程,就是指有4个核,每个核2个线程,这在OS看来就像8个并行处理器一样。 CPU缓存有多级缓存,比如L1, L2, L3等: L1容量最小,速度最快,每个核都有L1缓存,L1又专门针对指令和数据分成L1d(数据缓存),L1i(指令缓存)。 L2容量比L1大,速度比L1慢,每个核都有L2缓存。 ...

CPU缓存一致性协议(2)

缓存一致性性模型

内存模型 内存模型的分类 内存一致性模型(memory consistency model)就是用来描述多线程对共享存储器的访问行为,在不同的内存一致性模型里,多线程对共享存储器的访问行为有非常大的差别。这些差别会严重影响程序的执行逻辑,甚至会造成软件逻辑问题。在后面的介绍中,我们将分析不同的一致性模型里,多线程的内存访问乱序问题。 在分析之前,我们先定义一个基本的内存模型,以这个内存模型为...

KeepAlived 详解

概诉 Keepalived 作用 keepalived顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用,主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。他很大程度上是为ipvs服务的,也不需要共享存储。Keepalived主要的任务就是去调用ipvsadm命令,来生成规则,并自动...