自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(156)
  • 收藏
  • 关注

原创 如何设计好一张表

最终目标是通过这些“微小”的字段,构建出健壮、可观测、易维护的数据资产体系。ABA问题防御‌:高并发场景下,通过update_time作为乐观锁版本号,避免并发覆盖(伪代码:UPDATE table SET col=new_val WHERE id=1 AND update_time=old_update_time)。默认值策略‌:create_time/update_time默认由数据库自动填充(如MySQL的DEFAULT CURRENT_TIMESTAMP),而非应用层写入,避免时区问题。

2025-04-04 13:07:14 374

原创 【无标题】

各种算法Java。

2025-02-28 20:01:38 324

原创 杂记。。。

CRDT通过数学严谨的数据结构设计,为分布式系统提供了去中心化高可用的解决方案,但其落地需权衡内存开销、时钟一致性和业务操作约束。在Redis等数据库场景中,需结合具体命令特性选择CRDT类型,并设计配套的冲突解决与垃圾回收机制‌多租户实现需根据场景平衡‌隔离粒度‌与‌资源成本轻量级场景可采用字段隔离或单库多租户‌12;高要求场景建议物理隔离或Kubernetes CRD管理‌34。QoS设计需聚焦‌资源公平性‌与‌SLA保障‌,通过动态策略提升系统弹性‌4。

2025-02-27 16:38:02 939

原创 各种协议设计

这篇论文《End-to-End Arguments in System Design》由J.H. Saltzer、D.P. Reed和D.D. Clark撰写,首次发表于1981年,是计算机系统设计领域的经典文献之一。端到端原则是系统设计中的一种“奥卡姆剃刀”原则,它指导设计者将功能放置在最适合的层次(通常是应用层)。因此,通信子系统的可靠性功能只能减少应用层的重传次数,而不能替代应用层的功能。:只有在应用层才能确保功能的完整性和正确性,底层系统提供的功能只能作为性能优化手段,而不能替代应用层的实现。

2025-02-06 20:00:19 679

原创 多主策略记录

当某个节点不可用时,系统会将本应写入该节点的数据暂时存储在其他节点上,并在目标节点恢复后将其转移回去。它通过为每个节点维护一个向量(数组),记录该节点和其他节点的事件顺序,从而解决分布式系统中的并发冲突。:在替代节点上存储数据的同时,记录一个“Hint”,指示数据应最终写入的目标节点。:接收消息时,合并本地向量时钟和接收到的向量时钟,取每个元素的最大值。:当目标节点恢复后,替代节点将数据转移回目标节点,并删除Hint。:每个节点维护一个向量,向量的每个元素对应一个节点的逻辑时钟。

2025-02-05 14:56:43 793

原创 热点账户优化和影子表压测

该方案需结合业务容忍延迟的特性,配套完善的对账机制,是金融级高并发系统的经典设计模式。优势:无锁插入,支持每秒10万+写入(MySQL单机插入约5万/秒,分库分表后可更高)。在高并发交易场景(如红包发放、秒杀活动)中,若直接对核心账户余额进行实时更新(用户请求 → 缓冲账户(高速写入) → 异步合并 → 核心账户(批量更新):用户实时余额=核心账户余额 + 未合并的缓冲变动(前端展示用)。轻量级记账表,仅记录流水(用户ID、操作类型、金额、状态)。核心账户更新:单次合并处理500用户,整体3万+ TPS。

2025-02-03 19:12:06 639

原创 动态分库分表

在生成用户ID时,通过特定规则(基因)携带业务属性(如地域、业务线),确保关联数据落在同一分片。用户ID = 业务线(2位) + 用户注册时间(4位年月) + 自增序列(10位)。增加分片数量时(如从8个扩容到16个),需对所有数据重新取模,导致全量数据迁移。业务关联数据(如用户与订单)分散在不同分片,难以高效实现JOIN。涉及多分片的查询(如统计全表)需要聚合多个分片结果,性能低下。按基因维度扩容(如新增一个地域分片),仅需迁移该地域数据。计算分片,确保同一业务线、同一时间段的数据在同一分片。

2025-02-03 18:59:05 647

原创 混沌工程记录

验证线性一致性的核心是通过记录操作历史、分析全局顺序,并结合工具自动化检测。对于分布式存储系统,建议使用Jepsen进行故障注入测试,并结合Porcupine或TLA+进行形式化验证,同时设计严格的读写测试用例覆盖边界场景。

2025-02-03 18:37:17 968

原创 LSM对于特殊数据的优化手段

另外,可能需要提到其他现有的改进方案,如FloDB针对写入优化的两层结构,但用户的问题更侧重于不同工作负载的优化,而不是通用的结构设计。每个部分的结构可以统一,先说明该工作负载的特点,然后存在的挑战,再提出优化策略,并举例现有的实现(如LHAM、RocksDB的PlainTable、WiscKey等)。最后是追加为主的数据。首先,用户提到的LHAM是针对时态数据的优化,通过在组件上附加时间戳范围,并调整合并过程,确保时间范围不重叠,这样查询时就能快速定位到相关的组件,避免扫描不必要的数据。

2025-01-26 19:43:07 800

原创 FloDB 设计与思考

另外,考虑GC的问题,原来的堆上数据结构会有大量小对象导致GC压力,而FloDB的哈希表可能设计为更紧凑的结构,或者使用off-heap的内存管理,但这里用户提到的是哈希表在堆上可能的问题,而FloDB可能采用了不同的内存管理方式,比如并发哈希表使用更少的小对象,或者批量迁移减少了对象的频繁创建和销毁,从而减轻了GC负担。总结来说,FloDB的设计通过分层结构,将高频的写入操作由高效的哈希表处理,然后批量迁移到跳跃表,这样既保证了写入的高吞吐,又利用跳跃表的有序性支持范围查询。

2025-01-26 19:36:36 627

原创 Feed流系统

主要是对于大v的优化,分级策略。

2025-01-24 19:41:26 108

原创 递归的本质

字节面试题叠罗汉,很遗憾没想出来,看了答案挺巧妙的,但是居然是个案例题。。。复习一下递归的本质。

2025-01-23 23:34:03 352

原创 IM系统设计

利用last message id作为这个作为最后一个消息体。利用ZSET来维护连接的定时心跳,来续约运营商的连接不断开。读多写少,一般采用写扩散成timeline来做。timeline和批量未读和ack。

2025-01-22 18:54:08 155

原创 抢红包系统设计

对单个红包金额的操作可以拆成多行记录,减少对单行记录的冲突。支付成功幂等和事务需要判断。

2025-01-22 14:52:03 237

原创 数据平滑迁移

如果开启双写后还有延迟,可能导致ub行为!,所以双写后还要观察。全量 binlog的位置需要持久化,后续增量需要接着按这个同步。灰度切流,白名单放行,观察........... 关闭双写。如果业务对不停机的要求不高的话,可以采用停机等待增量。从关闭双写开始,不可回滚,有数据丢失风险!需要继续监控双写写新库的情况,可能还需要回退。最小id和最大id需要并发。同时binlog同步有延迟。

2025-01-21 20:47:32 215

原创 点赞系统设计

可以监测到热点的时候可以进行本地cache TTL进行缓存。补偿任务与幂等性的权衡,复杂度?为什么用hbase存储。

2025-01-21 14:11:53 191

原创 评论系统设计

1.索引和数据分离。缓存cache miss。

2025-01-21 01:35:21 118

原创 多级缓存以及热点监测

注意local cache的TTL需要大于 redis的TTL, 因为数据一致性的问题,当然这种情况不一定可以保障数据的实时一致性,但是可以保障TTL的最终一致性得到保障。请求先经过nignix或者gateway进行路由转发到无状态的服务器上,然后local cache, 分布式cache, db三层架构,双层缓存。本质上还是缓存穿透问题,boomfilter。事件驱动通知:callback,让用户决定如何处理,限流还是扩容之类的,还是短时间不过期。和传统分布式缓存一样还是还是采用标准的写db, 删缓存。

2025-01-21 01:01:47 492

原创 一文说透分布式事务

多个节点,如何实现ACID,一致性,可用性,性能如何取舍都是挑战。设计需要考虑,事务状态在哪里感知(需做高可用),以及出现故障和分区,是不断像2pc重试还是需要回滚以及回滚方式,以及业务入侵程度。同步与异步,一致性的考虑(任何时间都有可能故障,需要做分类讨论故障情况)

2025-01-05 14:56:56 799

原创 mini-spring源码分析

应用上下文ApplicationContext是spring中较之于BeanFactory更为先进的IOC容器,ApplicationContext除了拥有BeanFactory的所有功能外,还支持特殊类型bean如上一节中的BeanFactoryPostProcessor和BeanPostProcessor的自动识别、资源加载、容器事件和监听器、国际化支持、单例bean自动初始化等。而ApplicationContext面向spring的使用者,应用场合使用ApplicationContext。

2024-11-27 15:27:57 849 1

原创 重构以及代码治理质量工程合集

硬书精读:重构改善既有代码的设计(下)_哔哩哔哩_bilibili

2024-07-06 15:10:18 150

原创 一种更快的Kmeans原理与实现

如果我们预先计算出了这两个质心之间的距离D(j1,j2),则如果计算发现2D(x,j1)≤D(j1,j2),就可以知道D(x,j1)≤D(x,j2)。在距离计算方面,每次迭代的最小距离计算次数为k*(k-1)/2,对于较大的k(例如矢量量化),这可能是主要的开销。我们不维护每一对点的距离的上界,只维护一个数据点到它的锚定点的距离的上界u(x)。我们维护每一个数据点x到中点c的距离的下界l(x,c),一开始赋值为距离,迭代的时候,根据定理2,d)的时间复杂度,其中k是中心点的数量,d是数据的维度。

2024-01-20 15:39:31 882

原创 linux 内存

but 它又不能被杀掉,这就会导致随着它的内存开销变大,OOM killer不停地被唤醒,从而把其他进程一个个给杀掉,我们之前在生产环境中就遇到过类似的案例。系统内存不足时会唤醒OOM killer来选择一个进程给杀掉,在我们这个例子中它杀掉了这个正在内存泄漏的程序,该进程被杀掉后,整个系统也就变得安全了。如果此时系统中有很多进程都在申请内存,那么这些申请内存的进程都会被阻塞在这里,这就形成了一个恶性循环,甚至会引发系统长时间无响应(然后是cat /proc/meminfo。这两个是最开始排查的用的。

2024-01-12 19:48:40 577

原创 linux磁盘总结

linux读写磁盘,如果都是采用directIO的话,效率太低,所以我们在读写磁盘上加了一层缓存,page_cache。读的话,如果page_cache有的话,就不用向磁盘发出请求。写的话,也直接写入的page_cache就行了,异步刷回磁盘(操作系统不crash,不会丢失)。如果查看page_cache的大小:cat /proc/meminfo。

2024-01-11 12:03:58 1072

原创 LLVM入门

LLVM的IR中间层面的抽象很好的解耦了高级语言和机器环境,不想gcc N * M的复杂度。LLVM的IR可以解释执行,同时也可以编译执行。数据库编译查询可以通过两者混用来提高效率。前端生产AST树通过各种优化pass生成DAG,然后通过我们的后端生产汇编代码。同时我们熟知的clang只不过是llvm编译组件的前端。前端要注意有语义分析,这可能就是C++说的语义吧。

2024-01-04 11:52:22 365

原创 网络协议疑点记录

这种算法的基本思路是:当一个路由器启动的时候,首先是发现邻居,向邻居 say hello,邻居都回复。在 BGP 里面,除了下一跳 hop 之外,还包括了自治系统 AS 的路径,从而可以避免坏消息传得慢的问题,也即上面所描述的,B 知道 C 原来能够到达 A,是因为通过自己,一旦自己都到达不了 A 了,就不用假设 C 还能到达 A 了。eBGP 和 iBGP。距离矢量路由算法,bellman-ford算法,每个路由节点知道全局的路由信息,通过和邻居交换信息得到,然后一个问题就是好消息传的快,坏消息传的慢,

2023-12-10 19:59:40 1237

原创 消息队列好文收集

Kafka之ISR机制的理解-优快云博客

2023-11-29 21:49:23 554

原创 quic协议

QUIC协议原理浅解-腾讯云开发者社区-腾讯云

2023-11-22 14:47:27 477

原创 epoll协程简述

当有需要等待的时候,就切换出去,要用汇编保存这个栈rsp。让出的时候,要根据协程上下文保存这个栈。运行时,要根据协程上下文恢复出这个栈。

2023-11-17 20:48:13 227

原创 网络解析(二)

这个过程就和发往同一个网段的其他机器是一样的:将源地址和目标 IP 地址放入 IP 头中,通过 ARP 获得网关的 MAC 地址,将源 MAC 和网关的 MAC 放入 MAC 头中,发送出去。每只手的 IP 地址都和局域网的 IP 地址相同的网段,每只手都是它握住的那个局域网的网关。如果是同一个网段,例如,你访问你旁边的兄弟的电脑,那就没网关什么事情,直接将源地址和目标地址放入 IP 头中,然后通过 ARP 获得 MAC 地址,将源 MAC 和目的 MAC 放入 MAC 头中,发出去就可以了。

2023-10-18 00:18:24 550

原创 网络解析(一)

那什么叫三层设备呢?很多人看到这里就会想,既然这样,整个互联网的通信,全部用 MAC 地址好了,只要知道了对方的 MAC 地址,就可以把信息传过去。对于 192.168.1.6 这台机器来讲,虽然路过它家门的这个包,目标 IP 是它,但是无奈 MAC 地址不是它的,所以它的网卡是不会把包收进去的。在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

2023-10-16 12:20:20 153

原创 tcpdump

tcpdump命令介绍与常规使用讲解_哔哩哔哩_bilibili

2023-10-06 15:13:13 80

原创 linux内核分析:docker与隔离

在内核里面,对于任何一个进程 task_struct 来讲,里面都会有一个成员 struct nsproxy,用于保存 namespace 相关信息,里面有 struct uts_namespace、struct ipc_namespace、struct mnt_namespace、struct pid_namespace、struct net *net_ns 和 struct cgroup_namespace *cgroup_ns。如果你不相信任何一个云,怕被一个云绑定,怕一个云挂了自己的应用也就挂了。

2023-10-06 12:14:03 312

原创 linux内核分析:虚拟化

我知道我不是物理机内核,我知道我是虚拟机,我没那么高的权限,我很可能和很多虚拟机共享物理资源,所以我要学会排队,我写硬盘其实写的是一个物理机上的文件,那我的写文件的缓存方式是不是可以变一下。和用户态 qemu 对应的内核 KVM,对于虚拟机有一个结构 struct kvm 表示这个虚拟机,这个结构会指向一个数组的 struct kvm_memory_slot 表示这个虚拟机的多个内存条,kvm_memory_slot 中有起始页号,页面数目,表示这个虚拟机的物理内存空间。

2023-10-05 15:49:14 183

原创 linux内核分析:网络协议栈

接下来的调用链为:ip_route_output_ports->ip_route_output_flow->__ip_route_output_key->ip_route_output_key_hash->ip_route_output_key_hash_rcu。在 ip_rcv 中,得到 IP 头,然后又遇到了我们见过多次的 NF_HOOK,这次因为是接收网络包,第一个 hook 点是 NF_INET_PRE_ROUTING,也就是 iptables 的 PREROUTING 链。

2023-10-04 15:09:25 333

原创 常见C++缩写知识点

1.ADL。

2023-10-02 20:40:50 230

原创 智能指针那些事

​《Effective Modern C++》学习笔记之条款二十一:优先选用std::make_unique和std::make_shared,而非直接new - 知乎

2023-10-02 20:01:20 177

原创 守护进程解析

3、若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程);2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程;,如果调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话。会话:会话(session)是一个或多个进程组的集合,进程调用 setsid。

2023-10-02 17:22:04 156

原创 继承,虚函数内存模型

C++中虚函数、虚继承内存模型 - 知乎

2023-09-28 20:58:28 63

原创 linux RCU文章汇总

浅析linux kernel RCU机制 - thinkycx.meLinux RCU机制深入理解 Linux 的 RCU 机制-腾讯云开发者社区-腾讯云

2023-09-28 16:46:48 72

paxos 算法推导中文版

paxos 算法推导中文版。清晰描述paxos的前世今生。

2023-06-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除