自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 gRPC网络模型详解

gRPC是基于HTTP/2和Protocol Buffers的高性能RPC框架,采用分层架构设计:底层TCP通信支持TLS加密,HTTP/2层实现多路复用等特性,gRPC层定义协议交互格式。其网络模型采用多线程epoll处理,支持同步/异步调用,通过SO_REUSEPORT实现负载均衡,并具备自动伸缩能力。该框架支持跨语言开发,适用于微服务等分布式场景,提供高效的远程过程调用服务。业务层通过proto文件定义数据模型,实现订阅、配置、查询等功能。

2025-08-17 20:28:23 679

原创 探秘gRPC——gRPC原理详解

RPC(远程过程调用)协议实现分布式系统高效通信,gRPC作为现代高性能开源框架,基于HTTP/2和Protocol Buffer实现跨语言服务调用。其特点包括:服务定义与实现分离、支持同步/异步调用、利用HTTP/2多路复用提升性能,并提供四种通信模式(一元、服务端流、客户端流、双向流)。相比JSON,Protocol Buffer具有更高传输效率和复杂类型支持能力,通过.proto文件定义接口规范。gRPC适用于低延迟、高扩展的分布式系统开发,虽未内置负载均衡但提供扩展接口,是云原生应用开发的理想选择。

2025-08-16 19:13:36 882

原创 Kafka设计原理以及储存机制

Kafka是一个分布式消息队列系统,通过主题-分区机制实现高吞吐量消息处理。其核心特性包括:解耦生产消费、缓冲流量峰值、支持异步通信。生产者将消息写入分区,消费者组订阅主题进行消费,各自记录消费偏移量(Offset)。Kafka采用副本机制保证高可用,包含Leader和Follower副本,Leader故障时自动切换。分区策略支持轮询、随机和键保序三种方式。消费者组通过Range、RoundRobin和Sticky三种分配策略实现分区负载均衡。存储机制采用顺序追加日志和稀疏索引,支持海量数据高效读写。

2025-08-15 20:14:09 768

原创 MySQL缓存策略

本文介绍了MySQL缓存方案的核心要点:1)使用Redis缓存热点数据,提升读取速度;2)通过读写分离和主从复制优化MySQL性能;3)针对缓存与数据库不一致问题,提出以安全为主(先删缓存再写库)和以效率为主(先写缓存设过期时间)两种同步策略;4)分析了缓存穿透、击穿、雪崩三种常见问题的解决方案。该方案适用于读多写少场景,通过合理配置可兼顾性能与数据一致性。

2025-08-14 11:27:25 642

原创 MySQL事务原理分析以及隔离与锁

MySQL事务是保证数据库操作一致性的关键机制。摘要介绍了事务的ACID特性(原子性、一致性、隔离性、持久性)及其实现原理,重点分析了四种隔离级别(读未提交、读已提交、可重复读、可串行化)及其可能引发的并发异常(脏读、不可重复读、幻读)。详细解释了MVCC多版本并发控制机制和Read View的工作原理,以及在不同隔离级别下的行为差异。同时概述了MySQL中的各种锁机制(共享锁、排他锁、意向锁、记录锁、间隙锁等)及其兼容性关系,特别强调了间隙锁在可重复读隔离级别下的重要作用。

2025-08-13 15:56:37 732

原创 MySQL索引原理以及SQL优化

本文系统介绍了MySQL索引的相关知识,重点包括:1.索引类型(主键、唯一、普通、组合、全文索引);2.InnoDB存储结构(B+树、页管理、聚集/辅助索引);3.查询优化原则(最左匹配、覆盖索引、索引下推);4.常见索引失效场景(运算、隐式转换、模糊查询等);5.索引设计原则(高频查询、短索引、高区分度列)。同时阐述了Buffer Pool机制和索引选择策略,为数据库性能优化提供了实用指导。

2025-08-12 17:30:52 804

原创 MySQL语句,体系结构等基础知识解析

MySQL数据库核心技术与应用指南 本文系统介绍了MySQL数据库的核心知识体系,包括: 基本概念:MySQL作为开源关系型数据库的特点和SQL语言分类(DQL/DML/DDL/DCL/TCL) 体系结构:详细解析连接器、连接池、SQL接口、查询解析器等核心组件 数据库设计:三范式原理及反范式设计的应用场景 基础操作:涵盖数据库/表操作、增删改查等基本语句 高级查询:包括条件/范围/模糊查询、排序、聚合、分组和联表查询 视图概念:虚拟表的定义和使用场景 实战案例:通过具体SQL示例演示复杂查询的实现方法

2025-08-11 19:19:04 2304

原创 redis主从模型与对象模型

Redis提供了多种键淘汰策略(LRU、LFU、TTL、随机)和持久化方案(AOF/RDB)。AOF记录操作指令,支持always/every_sec/no三种同步方式,通过rewrite机制瘦身;RDB采用二进制快照存储,恢复更快但数据可能丢失。主从复制确保数据可靠性,哨兵模式实现自动故障转移。Redis Cluster采用去中心化设计,将数据划分为16384个槽位分布在多个节点,客户端通过CRC16哈希定位数据,支持槽位信息动态调整。集群配置自动持久化,确保一致性。

2025-08-10 16:44:57 1444

原创 redis存储原理与数据模型

Redis存储原理解析:采用单线程核心处理网络请求和执行命令,避免多线程加锁问题;使用散列表存储键值,通过哈希函数和取模定位,采用渐进式rehash解决扩容问题;跳表结构实现有序集合,通过概率优化保持性能;字符串根据长度选择embstr(≤44字节)或raw编码,64字节分界基于内存对齐和CPU缓存优化。

2025-08-09 20:16:58 739

原创 Redis原理,命令,协议以及异步方式

Redis概述与应用场景 Redis是一个开源的高性能键值存储系统,基于内存支持多种数据结构,包括字符串、哈希、列表、集合和有序集合。主要特点包括: 数据结构丰富:支持五种基础数据结构及其操作 内存数据库:数据主要存储在内存中,提供极高的读写性能 持久化可选:支持RDB和AOF两种持久化方式 广泛应用场景:缓存、消息队列、计数器、社交网络功能等 典型应用包括朋友圈互动统计、热点数据缓存、分布式锁实现等。

2025-08-08 19:24:58 969

原创 应用层协议设计以及ProtoBuf详解

协议设计与消息处理机制 协议是进程间通信的约定,确保数据理解的一致性。消息完整性判断方法包括:特定符号分界(如\r\n)、固定消息头+消息体结构(header+body)、以及增加字符流头部三种方式。 协议设计核心要素: 明确消息边界(起始/结束位置) 版本区分机制 消息类型标识 序列化协议选择(XML/JSON/Protobuf等) 主流序列化方法对比:

2025-08-07 14:57:57 1108

原创 C++日志库spdlog

spdlog是一款高性能C++日志库,支持多级日志记录、异步处理和多种输出目标。其特点包括零成本抽象、高效格式化、低内存占用和灵活配置,每秒可处理数百万条日志。开发中可设置不同级别(trace到critical),支持文件输出和自定义格式。异步日志通过线程池减少主线程影响。部署方式包括源码编译和apt安装。日志功能对软件调试和维护至关重要,spdlog为开发者提供了强大的日志记录解决方案。

2025-08-06 15:08:57 642

原创 分布式锁原理以及C++实现

分布式锁是用于协调分布式系统中多节点对共享资源访问的同步机制。其主要特性包括:互斥性(同一时间只有一个持有者)、锁超时(防止死锁)和容错性(服务高可用)。实现方式包括基于数据库唯一键约束、ZooKeeper等中间件。文中详细介绍了Redis实现的RedLock算法,包含Lock结构体定义、加锁解锁逻辑、时钟漂移处理等核心实现,通过多节点投票机制(quorum)确保可靠性,并提供了锁续期(continue_lock)功能。该实现考虑了分布式环境下的时钟差异、网络延迟等问题

2025-08-05 17:38:52 1387

原创 定时器原理红黑树,最小堆以及定时器c++实现

摘要:定时器是用于管理延时任务的工具,分为硬件和软件两种类型。其核心在于高效组织大量延时任务,通过数据结构(如红黑树、最小堆)和触发机制实现。红黑树因其支持重复键值和高效增删操作成为首选容器。触发机制可结合IO多路复用(如epoll_wait超时参数)或专用定时器接口(如timerfd)。代码示例展示了基于multimap的定时器实现,包含添加/删除任务、计算等待时间和处理超时任务等功能。该设计适用于需要精准管理延时任务的场景,如网络编程中的超时控制。

2025-08-04 17:22:11 1599

原创 网络缓冲区的设计以及C++实现

文章摘要:用户态网络缓冲区是用户程序直接管理的数据缓存区,用于提升网络吞吐量(如DPDK应用)。其设计需解决粘包问题、生产者/消费者速度差异等问题。常见缓冲区类型包括定长buffer(内存浪费)、ringbuffer(减少数据迁移)和chainbuffer(动态扩展)。文中详细介绍了基于C++的chainbuffer实现方案,包括移动构造、内存管理、读写指针操作等核心设计,并特别优化了数据拷贝流程(通过readv实现内核到内核的单次拷贝)。该设计兼顾了性能与扩展性,适用于高性能网络编程场景。

2025-08-03 19:42:52 1396

原创 学习笔记:无锁队列的原理以及c++实现

本文介绍了无锁队列的实现原理与关键技术点。首先对比了自旋锁和互斥锁的区别,指出无锁队列通过原子操作和内存屏障实现线程安全,避免了锁带来的性能开销。重点讲解了SPSC环形缓冲区的实现细节:1)使用64字节对齐避免伪共享;2)通过aligned_storage_t创建未初始化存储;3) 利用原子变量和位运算实现环形索引;4) 采用placement new和完美转发进行元素构造;5) 合理选择内存序保证多线程安全。最后给出了push、pop和size等核心方法的实现方法,包括使用移动语义减少拷贝开销的关键技术。

2025-08-02 21:02:52 874

原创 学习笔记:原子操作与锁以及share_ptr的c++实现

原子操作就是在一个线程进行这个操作时,别的线程只能看到这个操作实现前或实现后,别的线程不能访问也不能看到这个操作进行一半的样子,这个相对来说比较通俗,官方一点讲是指在多线程或并发环境中,一个操作不可被中断地完成,要么全部执行成功,要么完全不执行。这种操作能够避免竞态条件(Race Condition)和数据不一致问题。在c/c++编程过程中实现原子操作我会介绍三种方法:一是直接加互斥锁,互斥锁上锁后别的线程将不再可以访问上锁的部分,同时线程访问到上锁部分会进入休眠。

2025-08-01 21:50:14 978

原创 学习笔记:MySQL连接池原理及C++实现

MySQL连接池技术通过复用数据库连接解决高并发场景下的性能问题。文章介绍了连接池的实现原理,包括同步/异步两种模式:同步连接池在初始化阶段保证顺序执行,异步连接池通过队列实现并发处理。核心组件包括连接池管理类MySQLConnPool、连接类MySQLConn、工作线程MySQLWorker和SQL操作类SQLOperation,其中使用future/promise机制实现主线程与数据库的返回值传递。该技术通过减少连接创建开销和资源占用,显著提升了数据库访问效率(完整代码见Github)。

2025-07-31 20:53:49 722

原创 学习笔记:内存池以及c实现

本文探讨了内存池的两种实现方式:固定大小和可变大小内存池。固定大小内存池通过预分配固定长度的内存块,使用链表结构管理空闲块,核心操作包括初始化、分配和释放。可变大小内存池则采用大/小内存块分级管理,通过界限值区分分配策略,实现了更灵活的内存分配。文章详细阐述了两种内存池的数据结构设计、关键算法实现及内存管理策略,并对比了企业开发与个人项目中的使用场景。内存池技术能有效减少频繁分配开销,降低内存碎片,适用于游戏、网络服务等高性能场景。

2025-07-30 20:28:21 1092

原创 学习笔记:线程池的原理及C++实现

作为开发中常见的池式结构,线程池可以说非常重要了,作者开篇先献上关于线程池的几个问题。

2025-07-29 21:47:01 1161

原创 学习笔记:红黑树,以及基本操作的代码实现

红黑树作为开发中常见的存储和查找数据结构,很有必要了解一下构成以及一些基本的操作。二叉树其实是一种自平衡的二叉树,通过特定的规则确保树的高度始终保持在对数级别,从而保证插入、删除、查找等操作的时间复杂度为 (O(log n))。

2025-07-28 19:57:59 1597

原创 学习笔记:如何让UDP变得可靠

在阐述如何让UDP变可靠之前先讲讲为什么UDP不可靠UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,提供简单的、不可靠的数据传输服务。与TCP不同,UDP不保证数据包的顺序、可靠性或流量控制,但具有低延迟和高效率的特点,适用于实时性要求高的场景。这里具体讲解一下面向报文是什么意思,比如tcp与udp发一样的1000字节的数据,由于udp时面向报文,那么发生丢包则会全部遗失,tcp则可能只丢失一部分,这便是区别。

2025-07-27 16:42:02 932

原创 学习笔记:协程设计原理

在讲解协程之前,我们需要先了解一下同步代码和异步代码的优缺点:1.同步代码以epoll处理服务端连接来看,代码逻辑简单,管理sockfd清晰,但程序性能差,并发性能差强人意,服务器依赖epoll_wait的循环响应慢2.异步代码部将sockfd的操作,push到线程池中将io操作(recv,send)与epoll_wait 不在一个处理流程里面,使得io操作(recv,send)与epoll_wait实现解耦,这样做子模块好规划,程序性能好,但代码逻辑有很复杂。

2025-07-27 14:50:21 1160

原创 学习笔记:网络通信中的PosixAPI与TCP

本文系统介绍了Posix API网络通信中的TCP协议实现,分为连接建立、数据传输和连接断开三个阶段。在连接建立部分,详细解析了socket创建、bind绑定、listen监听和accept接收等关键API的工作原理,以及三次握手过程中半连接队列与全连接队列的转换机制。数据传输部分阐述了send/recv函数在内核缓冲区的操作特性。连接断开部分分析了四次挥手过程及TIME_WAIT状态的意义。

2025-07-25 11:01:35 1210

原创 学习笔记:reactor和http服务器C/C++实现

本文介绍了Reactor模式及其在网络编程中的应用。Reactor模式是一种事件驱动机制,通过多路复用器、事件分发器和事件处理器实现高效I/O处理。文章详细讲解了基于epoll的实现过程,包括accept、recv、send等回调函数的封装,以及连接状态管理。同时探讨了水平触发和边沿触发的区别,最后展示了如何基于Reactor模式构建HTTP服务器,包括处理请求、发送响应及文件/图片传输的实现方法。通过状态机管理实现了HTTP协议的分批响应功能。

2025-07-24 11:36:14 832

原创 学习笔记:io多路复用,select,poll,epoll

本文介绍了三种I/O多路复用实现方式:select、poll和epoll。select通过fd_set位集合监控文件描述符,但存在参数多和用户/内核空间频繁拷贝的问题。poll改用pollfd结构体数组,减少了参数但仍需内核拷贝。epoll通过epoll_create、epoll_ctl和epoll_wait系统调用,在内核维护红黑树和就绪链表,实现了高效的事件通知机制,特别适合高并发场景。

2025-07-22 15:02:16 1016

原创 学习笔记:网络io

在网络编程初学阶段,实现一个简单的一请求一线程的网络连接。

2025-07-21 16:25:16 936

原创 学习笔记:设计模式

设计模式不是代码过程中具体的编码模式,而是一种代码过程中解决问题的思路,方案。同时设计模式最重要的前提就是既有稳定点,又有变化点,这个会在后文详细解释。

2025-07-20 14:49:28 916 1

空空如也

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

TA关注的人

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