google/LevelDB
Intro阅读和学习 LevelDB 源码是一项极具挑战性的任务,但也非常有意义。LevelDB 是 Google 开发的一款高效、轻量级的键值存储库,其核心基于 LSM 树(Log-Structured Merge Tree) 的设计。学习 LevelDB 源码的过程不仅有助于理解数据库底层存储的实现,还可以提高对系统设计和高性能编程的理解。
1. 理解 LevelDB 的基础概念在直接阅读源码前,先对 LevelDB 的核心原理有一个较深入的理解。包括:
LSM 树:LevelDB 的核心数据结构。
数据分为内存(MemTable)和磁盘(SSTable)两层。
数据写入先进入内存表,达到一定大小后转化为磁盘文件(SSTable)。
磁盘文件会进行后台合并(Compaction)以优化查询性能。
主要概念:
MemTable:存储在内存中的数据,基于跳表(SkipList)实现。
Immutable MemTable:达到大小限制后,转化为只读内存表,等待刷入磁盘。
SSTable:存储在磁盘上的有序不可变文件,支持高效的范围查询。
Write-Ahead Log (W ...
apache/brpc
https://github.com/apache/brpc
bvarbthreadprotobuf
【Rust crate】 Diesel
all-about-inserts
Diesel Migration
内网穿透理论与实践
内网穿透理论与实践正向代理与反向代理代理就相当于是中介。正常来说客户端将请求发送给服务器端,服务器端收到请求后将响应结果返回给客户端。设置代理后,请求和响应都将经过代理到达彼此。当客户端发送请求时,代理对其进行拦截,再由代理将其发送给服务器端。服务器端收到请求后,代理再对响应结果进行拦截,再由代理返回给客户端。
正向代理和反向代理的区别在于代理的对象不同。正向代理代理的是客户端,而反向代理代理的是服务器端。从用户角度来说,其根本区别在于正向代理对客户端是透明的,即客户端设置的。而反向代理对服务器端是透明的,即服务器端设置的。
正向代理可以隐藏用户的信息,并能够将其作为跳板访问我们无法访问的资源,如翻墙。反向代理可以隐藏服务器的信息,保障了内网的安全,同时能够用来实现负载均衡。
NAT静态 NAT静态 NAT 指的是将一个内部 IP 地址映射到一个外部 IP 地址。静态 NAT 通常用于服务器,因为服务器需要一个固定的 IP 地址。
静态 NAT 通常需要在路由器上手动配置,将一个内部 IP 地址映射到一个外部 IP 地址。这样,当外部用户访问外部 IP 地址时,路由器会将请求转发给内部 ...
【大三上】工业数据
HCCSA-iDME xMD-F 认证考试
工业软件产业及第一代工业软件体系工业软件导论工业软件的四梁八柱
研发设计类软件是四梁之一
四梁包括四大类核心的工业软件研发设计软件是工业软件的皇冠
凝结了制造业壁垒最高的多学科知识和机理CAD——Computer Aided Design 计算机辅助设计
CAD 是利用计算机进行工程涉及的研发设计类工业软件3D CAD:技术壁垒高,存在卡脖子风险CAE:Computer Aided Engineering 计算机辅助工程(仿真)
CAE 解决工业产品功能性能和机电热控等专业功能性能模拟仿真分析问题CAE 仿真:认识世界的第三范式
CAE 软件仿真方法是与理论方法、实验方法并列的人类认识世界的第三大方法CAE 典型学科及工具软件:涉及学科广EDA——Electronic Design Automation 电子设计自动化
EDA 解决了超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布线、发布、版图、设计规则检查等)等设计问题,相当于电子设计领域CAD、CAE、CAM的综合智能制造:生产数字孪生、资源(人、机、料)智能A ...
dtm
DTM 分布式事务管理器https://dtm.pub/
qs(Quick Start)二阶段消息
二阶段消息,可以完美替代现有的事务消息或本地消息表架构。无论从复杂度、便利性、性能,还是代码量,新架构都完胜现有架构方案,是这个领域的革命性架构。
二阶段消息是 dtm 首创的事务模式,用于替换本地事务表和事务消息这两种现有的方案。它能够保证本地事务的提交和全局事务提交是“原子的”,适合解决不需要回滚的分布式事务场景。下面我们来看看二阶段消息,如何解决这个业务场景的问题。
http_msg_doAndCommit 流程分析定义和实现与分布式事务相关的业务逻辑和数据库操作data.go 的主要作用是定义和实现与分布式事务相关的业务逻辑和数据库操作。在这里,我们定义了一个名为 SagaAdjustBalance 的函数,用于调整用户的余额。在这个函数中,我们首先判断事务的执行结果,如果事务执行失败,则返回错误;否则,我们执行核心的业务逻辑,即调整用户的余额。123456789// SagaAdjustBalance 1func SagaAdjustBalance(db dtmcli.DB, ...
Redis
Redis 是什么?架构是怎么样的?
Redis 基础认知redis 的数据类型redis 支持五种数据类型:
String 字符串
Hash 哈希
List 列表
Set 集合
Zset 有序集合
还有:
HyperLogLog:基数统计
Geo:地理位置
Pub/Sub:发布订阅
还有 Redis Module:
RedisBloom:布隆过滤器
RedisSearch:全文搜索
Redis-ML:机器学习Redis 和 Memcached 区别共同点
基于内存的数据库,都当作缓存来使用
都有过期策略
两者的性能都非常高不同
Redis 支持更多的数据类型
Redis 支持持久化,Memcached 不支持
Redis 原生支持集群模式,Memcached 需要依赖客户端来实现往集群中分片写入数据
Redis 支持发布订阅模型、Lua 脚本、事务等功能
为什么选择 Redis
高性能
高并发
Redis 是单进程Redis 是单进程的,这是 Redis 的特点之一。Redis 采用 IO 多路复用模型,通过监听多个文件描述符,来处理多个客户端的请求。Redis 通过非 ...
分布式事务夺命连环问
什么是分布式事务?分布式事务是指一个业务流程跨越多个分布式系统或服务的事务处理。他需要确保在多个参与者之间的数据一致性和原子性。
分布式事务中只有最合适的方案,没有最好的方案。根据业务场景的不同,选择不同的分布式事务解决方案。
请解释 2PC 协议的基本过程2PC 协议是指两阶段提交协议,是一种保证分布式事务的一致性的协议。
基本组成:
1个协调者(Coordinator):负责协调事务的提交和回滚。例如事务管理器。
n个参与者(Participant):事务的执行者,根据协调者的指令执行事务。例如数据库、消息队列等。它的基本过程如下:
准备阶段:协调者询问所有参与者是否可以提交事务,参与者返回事务的执行结果。
提交阶段:如果所有参与者在准备阶段都返回可以提交事务,进入提交阶段,协调者向所有参与者发送提交请求,参与者执行事务提交操作。
2pc解决了什么问题?比起一阶段提交有什么好处?两阶段提交(2PC, Two-Phase Commit)是一种分布式事务协议,旨在确保跨多个节点的分布式事务能够原子性地提交或回滚,从而解决单阶段提交无法协调多节点一致性的问题。
一阶段提交的问 ...
【xv6】夯实基础
第一个进程每个进程都有一个运行线程(或简称为线程)来执行进程的指令。线程可以被暂时挂起,稍后再恢复运行。系统在进程之间切换实际上就是挂起当前运行的线程,恢复另一个进程的线程。线程的大多数状态(局部变量和函数调用的返回地址)都保存在线程的栈上。
每个进程都有用户栈和内核栈(p->kstack)。当进程运行用户指令时,只有其用户栈被使用,其内核栈则是空的。然而当进程(通过系统调用或中断)进入内核时,内核代码就在进程的内核栈中执行;进程处于内核中时,其用户栈仍然保存着数据,只是暂时处于不活跃状态。进程的线程交替地使用着用户栈和内核栈。要注意内核栈是用户代码无法使用的,这样即使一个进程破坏了自己的用户栈,内核也能保持运行。
当进程使用系统调用时,处理器转入内核栈中,提升硬件的特权级,然后运行系统调用对应的内核代码。当系统调用完成时,又从内核空间回到用户空间:降低硬件特权级,转入用户栈,恢复执行系统调用指令后面的那条用户指令。线程可以在内核中“阻塞”,等待 I/O, 在 I/O 结束后再恢复运行。
p->state 指示了进程的状态:新建、准备运行、运行、等待 I/O 或退出状态中。 ...
高性能 Linux 服务器编程
TCP/IP 协议栈详解TCP/IP 协议族
协议栈层次
具体协议
应用层
telnet, OSPF, DNS
传输层
TCP, UDP
网络层
ICMP, IP
数据链路层
ARP, RARP
数据链路层
ARP (Adress Resolution Protocol)地址解析协议
RARP (Reverse Address Resolution Protocol)反向地址解析协议实现了 IP 地址到 MAC 地址的映射。RARP通常用于(无盘)磁盘less工作站,因为这些工作站没有存储自己的 IP 地址。网络层网络层实现数据包的路由和转发,主要协议有 IP 和 ICMP。
IP(Internet Protocol)互联网协议
ICMP(Internet Control Message Protocol)互联网控制报文协议ICMP 是 IP 协议的重要补充,主要用于网络故障的诊断和错误报告。ICMP的报文是封装在 IP 数据包中的。报文格式如下:12345678910111213141516struct icmp { u_int8_t ...