Docker(二)使用Swarm Mode创建集群

能使用 Docker Machine 的前提是宿主机需要是物理机,云主机目前不支持 Docker Machine 的创建。 Virtualbox 安装步骤可参考 cd /etc/yum.repos.d wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo yum install VirtualBox-5.2 Docker Machine 安装命令行安装 docker-machinebase=https:&#x2 ...

Docker(一)基本命令

Docker 基本服务命令启动 docker$ service docker start 重启 docker$ service docker restart 停止 docker$ service docker stop docker 自启动让它随服务器的启动而自动运行 $ update-rc.d docker defaults $ systemctl enable docker Docker 基础命令启动/停止/重启/杀掉容器docker start/stop/restart/kill 实例操作如下: $ docker st ...

MySQL死锁分析

背景以前接触到的数据库死锁,都是批量更新时加锁顺序不一致而导致的死锁,但是上周却遇到了一个很难理解的死锁。借着这个机会又重新学习了一下 mysql 的死锁知识以及常见的死锁场景。在多方调研以及和同事们的讨论下终于发现了这个死锁问题的成因,收获颇多。虽然是后端程序员,我们不需要像 DBA 一样深入地去分析与锁相关的源码,但是如果我们能够掌握基本的死锁排查方法,对我们的日常开发还是大有裨益的。 PS:本文不会介绍死锁的基本知识,mysql 的加锁原理可以参考本文的参考资料提供的链接。 死锁起因先介绍一下数据库和表情况,因为涉及到公司内部真是的数据,所以以下都做了模拟,不会影响具体的分析。 我们采用 ...

MySQL事务和隔离级别

1、数据库事务 ACID 特性数据库事务的 4 个特性: 原子性(Atomicity) 事务中的多个操作,不可分割,要么都成功,要么都失败,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 隔离性(Isolation) 多个事务 ...

Disruptor(五)DSL相关实战

本文主要讲解使用 Disruptor 的 DSL 演示生产者和消费者的数据交换,和以往的线程间通信不同,disruptor 使用消息传递的方式,通过 RingBuffer 进行线程间的数据传递和通信,下面分别从一对一和多对一的模型进行讲解。下面主要通过计算区间[0 , 100000000)中的所有数值相加为例子讲解 Disruptor 中的 dsl 使用。 1、一对一一个生产者和一个消费者之间进行数据传递,使用 disruptor 主要涉及到 RingBuffer 中的 ValueEvent 定义,ValueAdditionEventHandler 消费者处理,以及生产者发布。 1.1 Rin ...

Disruptor(四)RingBuffer多生产者写入

上一章主要介绍了单个生产者如何向 RingBuffer 数据写入数据,如何不要让 Ring 重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作,本章主要介绍多生产者向 RingBuffer 数据写入数据。 1、多生产者 MultiProducerSequencer 申请下一个节点和单生产者不同的是在 next 方法中会直接通过 cursor.compareAndSet(current, next)设置生产者的游标 cursor 的 sequence。大家很可能会问设置了生产者的游标后,没有提交数据之前,多生产者场景中消费者是否就能够获取到数据,答案是否定的,在 MultiP ...

Disruptor(三)RingBuffer单生产者写入

上一章主要介绍了消费者从 RingBuffer 读取数据,本章主要介绍单个生产者如何向 RingBuffer 数据写入数据。在 RingBuffer 数据写入过程中如何不要让 Ring 重叠,写入后通知消费者,生产者一端的批处理,以及多个生产者如何协同工作。在 RingBuffer 写入数据的过程涉及到两阶段提交(two-phasecommit)1)生产者需要申请 buffer 里的下一个节点。2)当生产者向节点写完数据,需要调用调用 publish 发布数据。 1、单个生产者 SingleProducerSequencer 数据写入在后台由 ProducerSequencer 负责所有的交互 ...

Disruptor(二)RingBuffer读取

上一章主要介绍 Ring Buffer 的数据结构,本章主要讲解如何使用 Disruptor 从 Ring Buffer 中读取数据。 1、消费者通过 ProcessingSequenceBarrier 读取数据能够读取数据的前提是数据已经写入到 Ring Buffer 中,关于数据的写入,后面一章节会详细讲解。RingBuffer 的元素的大小是 2 的 n 次方(上面 ringBufferSize 为 8,从序号 0 开始)。消费者(Consumer)是一个想从 RingBuffer 里读取数据的线程,它可以通过访问 ProcessingSequenceBarrier 对象和 RingBu ...