「 分布式 」 一月 20, 2021
PAXOS的一些理解
文章字数 4.5k 阅读约需 4 mins.
Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。
Paxos:多数派决议(最终解决一致性问题)
Paxos算法有三种角色:Proposer,Acceptor,Learner
Proposer:提交者(议案提交者)
提交议案(判断是否过半),提交批准议案(判断是否过半)
Acceptor:接收者(议案接收者)
接受议案或者驳回议案,给proposer回应(promise)
Learner:学习者(打酱油的)
如...
查看全文
「 DOCKER 」 十二月 20, 2020
docker安装
文章字数 1.7k 阅读约需 2 mins.
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本。
$ uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config...
查看全文「 NIO 」 十二月 05, 2020
DirectByteBuffer原理探究
文章字数 1.4k 阅读约需 1 mins.
DirectByteBuffer是Java用于实现堆外内存的一个重要类,通常用在通信过程中做缓冲池,如在Netty、MINA等NIO框架中应用广泛。DirectByteBuffer对于堆外内存的创建、使用、销毁等逻辑均由Unsafe提供的堆外内存API来实现。
下图为DirectByteBuffer构造函数,创建DirectByteBuffer的时候,通过Unsafe.allocateMemory分配内存、Unsafe.setMemory进行内存初始化,而后构建Cleaner对象用于跟踪DirectByteBuff...
查看全文「 UNSAFE 」 十一月 10, 2020
魔法类Unfase
文章字数 7.2k 阅读约需 7 mins.
如下Unsafe源码所示,Unsafe类为一单例实现,提供静态方法getUnsafe获取Unsafe实例,当且仅当调用getUnsafe方法的类为引导类加载器所加载时才合法,否则抛出SecurityException异常。
public final class Unsafe {
// 单例对象
private static final Unsafe theUnsafe;
private Unsafe() {
}
@CallerSensitive
public static...
查看全文
「 并发 」 十月 21, 2020
并发编程之伪共享
文章字数 1.7k 阅读约需 2 mins.
为了解决计算机系统中主内存与CPU之间运行速度差问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器(Cache)。在Cache内部是按行存储的,其中每一行称为一个Cache行。Cache行是Cache与主内存进行数据交换的单位,Cache行的大小一般为2的幂次数字节。
当CPU访问某个变量时,首先会去看CPU Cache内是否有该变量,如果有则直接从中获取,否则就去主内存里面获取该变量,然后把该变量所在内存区域的一个Cache行大小的内存复制到Cache中。同一时间只能有一个线程操作缓存...
查看全文「 系统设计 」 十月 07, 2020
前后端分离 , 如何保证接口安全性 ?
文章字数 1.4k 阅读约需 1 mins.
HTTP 请求中的来源识别
数据加密
采用https协议,保障数据传输过程中的安全
数据签名
将要提交的数据,通过某种方式组合成一个字符串,然后通过 MD5 算法生成一个签名。如果觉得单纯的 MD5 不够安全的话,还可以在 MD5 的时候加盐和加 hash 。
时间戳
在参数中加上当前请求的时间戳,服务端拿到这个请求后会拿当前的时间和请求中的时间做比较,比如在 5 分钟之内的才会流转到后面的业务处理,在 5 分钟以外的直接返回错误码。时间戳机制主要用来应对攻击者直接拿包进行非法的 ...
「 分布式 」 九月 21, 2020
分布式事务相关
文章字数 4.5k 阅读约需 4 mins.
CAP 定理指出对于一个分布式系统来说,不可能同时满足以下三点:
- 一致性 (Consistence): 等同于所有节点访问同一份最新的数据副本 (强一致性)
- 可用性 (Availability): 每次请求都能获取到非错的响应,但是不保证获取的数据为最新数据
- 分区容错性 (Partition tolerance): 系统中任意信息的丢失或失败不会影响系统的继续运作。
由 CAP 定理可知数据库的设计需要权衡取舍,所以可以把系统大致分为三类:
- CA: 单点集群,满足一致性,可用性的系统,通常...
「 ROCKETMQ 」 九月 08, 2020
RocketMQ事务消息
文章字数 5k 阅读约需 5 mins.
2PC
2PC 把事务的执行分为两个阶段,第一个阶段即 prepare 阶段,这个阶段实际上就是投票阶段,协调者向参与者确认是否可以共同提交,再得到全部参与者的所有回答后,协调者向所有的参与者发布共同提交或者共同回滚的指令,用以保证事务达到一致性。
2PC 是几乎所有分布式事务算法的基础,后续的分布式事务算法几乎都由此改进而来,其优缺点非常明显:
- 优点:在于已经有较为成熟的实现方案,比如 XA。
- 缺点:XA 是一个阻塞协议。服务在投票后需要等待协调器的决定,此时服务会阻塞并锁定资源。由于其阻...