我在阿里云万网购买的个人域名
zshell.cc
, 原先 CNAME 到了 github pages 的域名, 由于地缘政治风险, 已无法通畅访问, 于是我将博客迁移到了国内的 开放原子 atomgit pages, 本文记录了我如何利用 cloudflare 将域名解析完美迁移到 atomgit 的过程;
希尔的博客
兰之猗猗,扬扬其香。不采而佩,于兰何伤?
-
-
epoll 的原理详解
2002 年 linux 2.5.44 发布了 epoll, epoll 是 linux 实现高并发网络 I/O 处理的基础, 但凡存在网络 I/O 的系统或框架 (比如 nginx、netty、kafka、redis 等) 都离不开 epoll;
因此学习 epoll 的原理对于应用开发者理解网络框架的运行原理有着巨大的帮助; -
Raft 学习笔记
Raft (Resilience And Fault Tolerance) 于 2014 年由斯坦福大学的 Diego Ongaro 和 John Ousterhout 首次提出, 旨在用一种更简单易懂的算法来代替艰涩的 Paxos 算法;
本文将详细记录一下 Raft 的原理及各种细节; -
G1 收集器学习
在吸取了前辈 CMS 的经验教训之后, G1 的设计团队最终以一种脱胎换骨的姿态重磅推出了具有划时代意义的 Gabage First 收集器;
跳脱出 jvm 历史 GC 框架的局限性从 0 开始重新设计, G1 引入了 Region、Card、RSet 等多种创新性的数据结构, 极大地提升了年轻代及局部老年代收集的效率, 而这些设计思想也为后续的 ZGC、Shenandoah、Dragonwell Jade 等更先进的收集器所吸收采纳; -
redis 哨兵模式
在 redis 2.8 之前, 基本可以认为 redis 不支持高可用部署模式, 因为仅靠 redis 主从同步机制, 当主服务器出现故障时, 并不支持自动将从服务器提升为主服务器, 而是需要运维人员手动介入; 很明显, 单独的 redis 主从模式不具备在生产环境部署的条件;
2013 年 9 发布的 redis 2.8 提供了一种哨兵模式, 终于在实质上解决了 redis 的高可用部署问题; -
java 虚拟线程学习
虚拟线程作为 jdk 19+ 最重要的特性之一, 足以对所有 java 开发者构成巨大的吸引力; 我们即便无法很快在生产环境中升级到最新版本的 jdk, 但也应该足够重视, 尽早学习, 跟上时代节奏, 避免被职场淘汰;
-
美国的航空母舰
从一部小小的美国航母兴衰史, 可以影射出美国造船业的兴衰史, 甚至由此瞥见了整个美国工业的兴衰史;
从上世纪尼米茨级的一骑绝尘, 到如今福特级的拉胯与不堪用, 美国海军已经走到了一个历史极点, 军事霸权的基石摇摇欲坠, 待后续尼米茨的退役潮来临, 福特级将何去何从? -
LSM-Tree 的不可能三角
在 LSM 树 (Log-Structured Merge-Tree) 的设计中,读放大 (Read Amplification)、写放大 (Write Amplification) 和空间放大 (Space Amplification) 形成了一个类似 不可能三角 的权衡关系, 优化其中任意两个通常会恶化第三个; 这一现象类似于存储系统中的 RUM Conjecture (Read、Update、Memory overhead 不可能同时最优);
-
LSM-Tree 学习笔记
日志结构合并树是一种巧妙的数据结构, 它是一种妥协的艺术: 它在关注写性能的同时也尽量照顾到了读性能, 适用于写多读少、写多读中等的场景, 甚至在一些数据库产品中直接将其作为核心存储引擎 (如 TiDB -> TiKV 基于 RocksDB);
因此很有必要学习一下 LSM-Tree 的原理; -
Paxos 学习笔记
Leslie Lamport 于 1990 年提出的 经典 Paxos 是分布式共识算法的开山鼻祖, Google Chubby 的作者 Mike Burrows 就曾说过: 「这个世界上只有一种一致性算法, 那就是 Paxos」, 其他所有的一致性算法, 本质上都是对 Paxos 在实现层面的变体、优化或扩展;
因此 Paxos 算法是分布式理论入门的第一块基石, 欲涉足该领域, 就必须将其完全地、彻底地研究清楚;