算法-Gossip协议
参考文献
Gossip协议
算法-共识算法
参考文献
一文读懂11个主流共识算法, 彻底搞懂PoS,PoW,dPoW,PBFT,dBFT这些究竟是什么鬼
分布式一致性与共识算法
Raft user study
Paxos
共识简介
所谓共识,简单理解就是指大家都达成一致的意思.
拜占庭容错算法
工作量证明(PoW,Proof of Work)
简单理解就是一份用来确认你做过一定量的工作的证明。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。
工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。
实用拜占庭容错算法(PBFT:Practical Byzantine Fault Tolerance)
非拜占庭容错算法/故障容错算法(Crash Fault Tolerance,CFT)
CFT 解决的是分布式的系统中存在故障,但不存在恶意节点的场景下的共识问题。 也就是说, ...
解决方案-汇总
参考文献
流量削峰
流量削峰的目的是在流量突增时,通过平滑处理请求,避免系统被过高的瞬时负载击垮.
开发层面:
限流,可以对每秒、每分钟、每小时等时间窗口内的请求数进行限制,避免短时间内请求量过大导致系统过载
解决方案-限流器
队列处理:对于瞬时流量过高的请求,可以使用 消息队列(如 Kafka、RabbitMQ)将请求异步处理.请求先入队列,后台系统根据处理能力逐步消费队列中的任务.
请求排队与优先级调度:通过 线程池 和 优先级队列 控制处理请求的优先级,对于非关键请求,可以将其排队等待
运维层面
通过 Nginx、HAProxy 等负载均衡工具,均匀分配请求到不同的后端服务节点,避免单点压力过大.
在流量突增时,通过 自动扩容(Auto Scaling) 技术,动态增加处理节点(如 Kubernetes 自动扩容、AWS EC2自动扩容等).
延迟响应
在高并发系统中,当无法快速处理某些请求时,通过延迟响应可以缓解系统的压力并防止系统崩溃.
开发层面
异步处理:对于不需要立即返回的操作,使用异步处理,如使用 Java CompletableFut ...
算法-指数退避算法
参考文献
https://en.wikipedia.org/wiki/Exponential_backoff
指数退避算法设计与原理
指数退避算法
实例
spring-retry
org.springframework.retry.interceptor.RetryInterceptorBuilder
示例
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106package cn.holelin.ct.pacs.manager;import cn.hutool.json.JSONUtil;import cn.holelin.ct.pacs.config.DefaultPacsServerProperties;i ...
Java基础-JDK各版本特性汇总(JDK1.0~JDK18)
参考文献
JRE Version
123456789101112131415161749 = Java 550 = Java 651 = Java 752 = Java 853 = Java 954 = Java 1055 = Java 1156 = Java 1257 = Java 1358 = Java 1459 = Java 1560 = Java 1661 = Java 1762 = Java 1863 = Java 1964 = Java 2065 = Java 21
JDK各版本特性汇总(JDK1.0~JDK18)
JDK版本
发布时间
代号
备注
1
1996年1月23日
Oak(橡树)
初代版本,伟大的一个里程碑,但是是纯解释运行,使用JIT,性能比较差,速度慢
1.1
1997年2月19日
Sparkler(宝石)
JDBC、支持内部类、RMI、反射等等
1.2
1998年12月8日
Playground(操场)
集合框架、JIT等等
1.3
2000年5月8日
Kestrel(红隼)
对Java的各个方面都做了大量优化和增强
1.4
2 ...
Linux-Mac M1 debug linux kernel
参考文献
搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
M1 Mac: Linux Kernel Development Environment Setup
搭建环境
使用ubuntu-20.04.5-live-server-arm64.iso镜像文件,使用虚拟机环境搭建Ubuntu20.04,在其基础上编译linux kernel
安装编译内核需要的依赖
1234567891011121314151617181920212223root@holelin:~# sudo apt install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache flex bison libelf-devReading package lists... DoneBuilding dependency treeReading state information... Donebison is already the newest version (2:3.5.1+ ...
MySQL-NULL
参考文献
技术分享 | MySQL默认值选型(是空,还是 NULL)
NULL值
在 MySQL 中的 NULL 是一种特殊的数据.一个字段是否允许为 NULL,字段默认值是否为 NULL.
字段类型
表定义中设置方式
字段值
数值类型 (INT/BIGINT)
Default NULL / Default 0
NULL / NUM
字符类型 (CHAR/VARCHAR)
Default NULL / Default ” / Default ‘ab’
NULL / ” / String
NULL 与空字符存储上的区别
表中如果允许字段为 NULL,会为每行记录分配 NULL 标志位.NULL 除了在每行的行首存有 NULL 标志位,实际存储不占有任何空间.如果表中所有字段都是非 NULL,就不存在这个标示位了
NULL的问题
数值类型,以 INT 列为例
在 min / max / sum / avg 中 NULL 值会被直接忽略掉
对 NULL 做加减操作,如 1 + NULL,结果仍是 NULL
order by 以升序检索字段的时候 NULL ...
MySQL-表维护
参考文献
MySQL 8.0 Cookbook
An Overview of DDL Algorithm’s in MySQL ( covers MySQL 8)
17.12.1 Online DDL Operations
表维护
使用Percona工具包
修改表结构
Linux工具-火焰图
参考文献
https://github.com/brendangregg/FlameGraph
Flame Graph
火焰图的类型
On-CPU火焰图: CPU占用高的问题
Off-CPU火焰图: I/O,网络阻塞,锁竞争,死锁导致的性能下降
内存火焰图: 申请,释放内存多,内存泄漏
Hot/Cold火焰图: 结合On-CPU和Off-CPU火焰图
其他火焰图: JVM,浏览器
如何读火焰图
X轴
由多个方块组成,每个方块表示一个函数
函数在X轴占据的宽度越宽,表示它被采样到的次数越多,可以简单的粗暴的近似理解为执行时间
Y轴
表示函数调用栈,调用栈越深,火焰越高
顶部是CPU正在执行的函数,下方是它的父函数
火焰图生成的步骤
采集堆栈
perf
SystemTap
sample-bt
折叠堆栈
stackcollapse.pl
生成火焰图
flamegraph.pl
Python-argparse
参考文献
https://docs.python.org/3/library/argparse.html
argparse
简单用法
12345678910# 创建解析器parser = argparse.ArgumentParser( prog='ProgramName', description='What the program does', epilog='Text at the bottom of help')# 添加参数parser.add_argument('filename') # positional argumentparser.add_argument('-c', '--count') # option that takes a valueparser.add_argument('-v ...