使用Dockerfile创建镜像

在Dockerfile中用到的命令有

FROM

​ FROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令。至于image则可以是任何合理存在的image镜像。
​ FROM 一定是首个非注释指令 Dockerfile.
​ FROM 可以在一个 Dockerfile 中出现多次,以便于创建混合的images。
​ 如果没有指定 tag ,latest 将会被指定为要使用的基础镜像版本。

MAINTAINER

​ 这里是用于指定镜像制作者的信息

RUN

​ RUN命令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。
​ 层级 RUN 指令和生成提交是符合Docker核心理念的做法。它允许像版本控制那样,在任意一个点,对image 镜像进行定制化构建。
​ RUN 指令缓存不会在下个命令执行时自动失效。比如 RUN apt-get dist-upgrade -y 的缓存就可能被用于下一个指令. –no-cache 标志可以被用于强制取消缓存使用。

ENV

​ ENV指令可以用于为docker容器设置环境变量
​ ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run –env key=value来修改环境变量。

查看更多

常用解惑

for(;;)和while(true)的区别

总结 for(;;) 比 while(true) 好

1
2
3
4
5
6
7
8
 编译前              编译后 
while (1) mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
//VS
编译前 编译后
for (;;) jmp foo+23h

对比之下,for (;;)指令少,不占用寄存器,而且没有判断跳转,比while (1)好。

也就是说两者在在宏观上完全一样的逻辑,但是底层完全不一样,for相对于来说更加简洁明

查看更多

paxos

1、Paxos算法的应用

Paxos算法及变种算法在分布式系统中应用广泛。
基于Paxos算法的变种有:ZAB、Raft
• Zookeeper 中的ZAB协议也是Paxos算法的变种。Zookeeper通过ZAB协议实现数据一致性,以提供数据一致性。
• Nutanix 中通过Paxos算法实施元数据在各节点的强一致性。

2、什么是Paxos算法

Paxos算法解决的问题是在一个可能发生消息可能会延迟、丢失、重复的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。这 个“值”可能是一个数据的某,也可能是一条LOG等;根据不同的应用环境这个“值”也不同。
一个典型的场景:在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。

3、Paxos算法的原理

例如:公司商定年会举办的地点,每个人都可以提出建议。在现实环境中我们可以在一个会议室共同讨论或在微信群中讨论(基于内存共享方式);但在基于消息传递的分布式环境中每个人只能通过手机短信与其它人通过。如何在这种会延迟、丢失的环境中确定一个年会举办地点;

Paxos算法是这样解决这个问题:

查看更多

高并发下的接口幂等性解决方案

一、背景

我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。

例如:

前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。
我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;
发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;
创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。
等等很多重要的情况,这些逻辑都需要幂等的特性来支持。

二、幂等性概念

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。

在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。

查看更多