Chris Blog

Finally you found me.

百度 - DLock源码解析

Understand how Baidu DLock works

简介 DLock是由Java实现的,一套高效高可靠的分布式锁方案。 使用Redis存储锁,通过Lua脚本进行原子性锁操作,实现了基于Redis过期机制的lease,并提供了一种基于变种CLH队列的进程级锁竞争模型。 整个组件的架构如下图所示 由于Github上的描述过于简略,并为了保持对文章的严谨性,在完整地读过源码后,我先简单地描述一下各个角色在该组件中的位置与功能。 该组件中...

百度 - UidGenerator源码解析

Understand how Baidu UidGenerator works

简介 UidGenerator是Java实现的,基于Snowflake算法的唯一ID生成器。UidGenerator以组件形式工作在应用项目中,支持自定义workerId位数和初始化策略,从而适用于Docker等虚拟化环境下实例自动重启、漂移等场景。 在实现上,UidGenerator通过采用RingBuffer来缓存已生成的UID,并行化UID的生产和消费,同时对CacheLine补齐,...

Spring Cloud Netflix - Eureka Server源码阅读

Understanding Eureka Peer to Peer communication

Eureka是一个基于REST并应用于AWS云服务的服务注册中心,并且经历过了Netflix公司的生产考验,绝对是我们值得细心研读的中间件。虽然我们可能并未接触过AWS,但在阅读Eureka之前应该简单地了解一下Amazon EC2中的某些概念,如地区和可用区域,这样能更好地理解Eureka中某些特定的术语。 在阅读本文之前,希望大家都已经对Eureka有简单的认识: Eureka ...

Wireshark - HTTPS握手现形记

SSL Handshake

Wireshark - HTTPS握手现形记 前言 本文章使用Wireshark抓取支付宝的首页 https://www.alipay.com ,以观察SSL的握手细节。在本次分析中支付宝采用的Cipher Suite是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。 Client Hello 客户端首先会发起Client Hello阶段的请求,与服务...

G1收集器与CMS收集器的对比与实战

G1 Garbage Collector vs CMS Garbage Collector

Concurrent Mark and Sweep - CMS垃圾收集器 简介 CMS(Concurrent Mark and Sweep)是以牺牲吞吐量为代价来获得最短停顿时间的垃圾回收器,主要适用于对响应时间的侧重性大于吞吐量的场景。仅针对老年代(Tenured Generation)的回收。 为求达到该目标主要是因为以下两个原因: 没有采取compact操作,而是简单...

Apache Curator - 选主与分布式锁

Leader Election and Shared Reentrant Lock

Leader Election 在分布式计算中,leader election是指定一个任务的组织者在几台计算机(节点)之间分配的过程。 在任务开始之前,所有网络节点都不知道哪个节点将作为任务的“领导者”或协调者。 然而,在执行了leader election算法之后,整个网络中的每个节点识别出一个特定的唯一节点作为任务负责人。 Curator的相关文档中强烈建议我们实现LeaderSe...

Apache Curator - 基础技法与节点监控

CRUD and Cache

前言 Apache Curator是一个针对于Apache ZooKeeper的分布式协调服务的Java库,使得操作Apache ZooKeeper变得更为简单和可靠。其中更包括了针对于常见使用场景的高层次封装,如分布式锁,服务发现与注册和选主等。 目前Curator的release版本有2.x.x和3.x.x,其中Curator 2.x.x是兼容ZooKeeper 3.4.x和ZooK...

JDK 1.8 ArrayList源码解析

预防间竭性失忆的ArrayList记事

简介 ArrayList是List接口的可扩容数组实现,在日常开发中为我们免去了思考数组扩容的逻辑,本文基于JDK 1.8.0_111的源码进行研究,由于ArrayList过于基础与常见,故免去冗长的描述。 结构 在深入研读源码之前,我们首先需要对ArrayList的Outline有个大概的了解: public class ArrayList<E> extends Abs...