avatar
文章
115
标签
60
分类
28

主页
文章
标签
分类
TranquilXuan
搜索
主页
文章
标签
分类

TranquilXuan

技术人的岔路口:深耕技术还是转向管理,如何做不后悔的选择?
发表于2026-08-11|认知思考|认知思考•职业成长•技术管理
技术人的岔路口:深耕技术还是转向管理,如何做不后悔的选择?大约两年前,我的 Leader 突然在 1 on 1 上问我:“你有没有想过将来带团队?”我当时一愣,下意识回答:“我还是想把技术做深一点。”Leader 没再追问,只是笑着说:“保持这个劲头也好。”但那个问题像颗种子埋进土里,每次深夜复盘手头的工作,它都会悄悄冒出一点芽。 那段时间,和我同批入职的同事已经开始带两三个应届生,名片上悄悄加上了“Team Lead”字样。我朋友圈里充满了“35岁危机”“技术转管理才能活”的文章。坦白说,我慌过。一边是手头正打磨到一半的查询优化器细节,一边是周围人“不上管理就等淘汰”的眼光。这种撕裂感,我猜你或许也正在经历。 后来我花了很长时间,把自己当作一个分布式系统去 profiling。我用工程师的办法审视自己:我的核心驱动力是什么?我的“单点瓶颈”在哪里?我最怕的不是选错,而是按别人的逻辑选了,然后后悔。 两张牌,翻开看:管理和技术的真实收益与代价先把诱惑和幻象分开。很多工程师对管理的想象,是“终于不用写代码了,开开会就能拿高薪,说出去还好听”。现实呢?管理其实是一张“责任牌”。你的时间被切 ...
Redis 缓存与 MySQL 架构深度优化实战:从多级缓存到热点探测与冷热数据分离
发表于2026-08-10|后端数据库中间件|MySQL•性能优化•Redis•缓存架构•热点探测
Redis 缓存与 MySQL 架构深度优化实战:从多级缓存到热点探测与冷热数据分离1. 问题的起源:当秒杀活动击垮了读库凌晨 1 点,监控警报狂响。订单服务的读库 CPU 使用率飙到 95%,接口响应时间从 5ms 恶化到 2 秒以上。事后复盘发现,某款限量商品有 2000 万人在线抢购,但库存只有 1000 件。请求会反复查询“是否已售罄”——这个热 key 造成了 MySQL 的灾难性读瓶颈。 这个场景暴露了传统缓存的三个致命缺陷: 热点不可预测:你不知道哪个 key 会突然变热。 缓存穿透/击穿:热 key 过期瞬间,流量直冲 DB。 Redis 单点瓶颈:即使 Redis 扛住了,单热 key 也可能打满单个 Redis 节点的带宽或 CPU。 本文将落地一个基于 Redis + Caffeine 本地缓存 的二级缓存架构,并集成自动热点探测与冷热数据分离机制,最终将数据库读负载降低 95% 以上。 2. 架构全景图我们在服务层与存储层之间构筑两层防线: 123456789101112131415+-------------------------------- ...
MySQL 查询优化器内部原理:基于代价的优化策略与执行计划生成实战
发表于2026-08-09|数据库后端|MySQL•查询优化器•执行计划•后端实战
MySQL 查询优化器内部原理:基于代价的优化策略与执行计划生成实战你刚写完一个慢查询,EXPLAIN 一看,走的是全表扫描。索引明明建了,为什么优化器就是不用?你加了 FORCE INDEX,查询快了,但心里没底——是不是统计信息有问题?还是优化器本身做出了错误判断? 这篇文章带你撕开 MySQL 优化器的黑盒子,从代价估算的数学逻辑到 Optimizer Trace 的诊断实战,彻底搞清楚执行计划到底是怎么选出来的。 一、查询优化器到底在优化什么一条 SQL 进入 MySQL 后,优化器的核心任务是从无数可能的执行方案中,选出代价最小的那个。这个代价不是凭空猜的,而是基于统计信息 + 计算公式精确计算出来的。 12345678910111213解析后的查询树 ↓ 逻辑优化(规则优化) · 常量折叠、子查询改写 · 外连接转内连接 · 条件化简 ↓ 物理优化(代价优化) · 统计信息收集 · 访问路径估算 · Join 顺序/算法选择 ↓ 生成执行计划(EXPLAIN 输出) 逻辑优化阶段不依赖统计信息,是纯粹的代数规则改写。物 ...
RabbitMQ 异步解耦实战:基于 MySQL 订单系统的消息队列设计与可靠性保障
发表于2026-08-08|后端数据库中间件|rabbitmq•mysql•异步解耦•消息队列•可靠性
RabbitMQ 异步解耦实战:基于 MySQL 订单系统的消息队列设计与可靠性保障电商订单系统在高并发场景下,一个下单请求往往要同步完成库存扣减、优惠券核销、通知推送等一系列操作,MySQL 的写入压力急剧上升,接口响应时间随之拉长。本文通过一个真实的 Spring Boot + RabbitMQ 集成案例,演示如何用消息队列将订单创建与后续业务解耦,同时引入生产者确认、消费者手动 ACK、死信队列和幂等性设计,构建一套生产级可靠性的异步处理方案。所有代码均可直接运行。 1. 问题场景:同步下单的性能瓶颈假设我们有一个订单核心服务,POST /order/create 请求需要完成以下操作: 写入订单主表 orders 扣减库存(调用库存服务或直接操作库存表) 发送短信/App 推送通知用户 记录操作日志 在初期业务量不大时,直接在 Controller 里按顺序同步调用这些逻辑可以接受。但当促销活动带来数万 QPS 时,问题暴露了: 数据库连接耗尽:每个请求都长事务跨多表写入,连接池很快打满。 响应时间恶化:库存扣减的锁竞争、通知服务的网络延迟拖慢整个请求。 故障传 ...
MySQL事务隔离级别详解:脏读幻读不可重复读现象与实战排查
发表于2026-08-08|后端数据库|MySQL•事务•隔离级别•脏读•幻读•不可重复读
MySQL事务隔离级别详解:脏读幻读不可重复读现象与实战排查电商系统中,两个用户几乎同时下单购买最后一件库存,一个订单成功扣减库存,另一个却因为读到了未提交的“脏数据”误以为还有库存 —— 这种经典的并发问题背后,就是事务隔离级别在起作用。本文将用两个终端窗口+完整SQL脚本,手把手演示脏读、不可重复读和幻读现象,并给出生产级的排查思路。 环境准备本文所有操作基于 MySQL 8.0 ,使用 InnoDB 引擎。你需要打开两个独立的会话(终端1和终端2),方便观察并发行为。 123456789101112-- 创建测试库与测试表CREATE DATABASE IF NOT EXISTS isolation_test;USE isolation_test;CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), balance INT) ENGINE=InnoDB;-- 插入一条初始数据INSERT INTO account VALUES (1, 'Alice&# ...
MySQL 间隙锁深入解析与排查实战
发表于2026-08-08|后端数据库|MySQL•间隙锁•InnoDB•死锁
MySQL 间隙锁深入解析与排查实战先看一个真实的生产故障:订单系统在并发创建订单时频繁出现 Deadlock found when trying to get lock,堆栈指向一个看似简单的 INSERT ... SELECT 语句。原以为只是行锁冲突,直到深入 InnoDB 的锁日志,才发现“罪魁祸首”是——间隙锁(Gap Lock)。本文就从这次故障出发,把间隙锁的原理、触发条件、排查工具和优化方案彻底讲透,所有示例均可在本地 MySQL 8.0 中复现。 从一个死锁场景开始我们有两张表:orders(订单)和 order_items(订单项),业务要求在创建订单时拷贝预置的商品模板到订单项。 1234567891011121314151617181920-- 建表语句(可复现环境)CREATE TABLE template_items ( id INT PRIMARY KEY AUTO_INCREMENT, template_id INT NOT NULL, product_name VARCHAR(100), INDEX idx_template ( ...
MySQL 索引优化实战
发表于2026-08-08|数据库|MySQL•索引•B+树•查询优化
从一个慢查询说起某天运维群里抛出一张慢查询截图: 1SELECT * FROM orders WHERE user_id = 10086 AND status = 1 ORDER BY create_time DESC LIMIT 10; 平均执行时间超过 2 秒,而 orders 表当天已有 800 万行数据。大家第一反应 — “加个联合索引就好”,可索引加完后,耗时依然在 500ms 以上,甚至偶尔不降反升。 问题出在哪?索引真的被用上了吗?为什么加了索引仍然慢?本文将从一个真实订单表切入,逐步拆解索引优化的全过程,让每一块内容都能直接在你的 MySQL 8.0 环境里复现。 索引的物理结构:B+树与页InnoDB 使用 B+树组织索引数据,所有节点按主键(或索引键)有序排列,叶子节点通过双向链表连接。在 InnoDB 中,无论是主键索引还是二级索引,底层都以 16KB 的页 作为最小存储单元,索引查找的本质就是不断向下加载页的过程。 12345 [10 | 25] <-- 根节点 / | \[1 ...
MySQL 锁机制深入:从行锁到间隙锁的加锁原理与死锁排查实战
发表于2026-08-08|数据库后端|MySQL•锁机制•死锁排查•并发控制
MySQL 锁机制深入:从行锁到间隙锁的加锁原理与死锁排查实战凌晨两点,监控告警:订单服务频繁报出 Deadlock found when trying to get lock; try restarting transaction。紧急排查后发现,只是一个看似无害的“清理过期订单”的 DELETE 操作,却把整个事务链条弄崩了。日志里清晰写着:Gap lock 与 Insert intention lock 互相等待。 这就是今天要深挖的主题:从 InnoDB 的行锁,到间隙锁,再到生产环境死锁的排查与预防。 一、InnoDB 的三大行锁InnoDB 在 可重复读(RR) 隔离级别下,为了解决幻读问题,在行锁的基础上引入了 间隙锁,形成了三种锁结构: 123Record Lock:锁住索引记录本身。Gap Lock:锁住索引记录之间的间隙,是一个开区间。Next-Key Lock:Record Lock + Gap Lock,是一个前开后闭区间。 以一个简单的主键表为例,如果存在 id=10 和 id=20 两条记录,Next-Key Lock 的分布如下: 123(-∞, 10] ...
Redis 缓存与 MySQL 数据一致性保障实战
发表于2026-08-06|数据库中间件|MySQL•实战•Redis•缓存一致性
Redis 缓存与 MySQL 数据一致性保障实战某电商商品详情接口 QPS 突然从 2000 飙到 8000,MySQL 的 CPU 瞬间打满 95%,接口响应从 50ms 恶化到 3s。监控显示大量慢查询集中在 SELECT * FROM product WHERE id = ? ——这是典型的高并发读瓶颈。引入 Redis 缓存层是成本最低的读扩展方案,但缓存引入后,数据不一致、穿透、雪崩、击穿等问题会接踵而至。本文将用完整的 Spring Boot + RedisTemplate 代码,逐一解决这些生产故障。 1. 架构演进:从纯 MySQL 到 Redis 缓存层原始链路:Client -> Controller -> Service -> MySQL 改造后:Client -> Controller -> Service -> Redis(命中) | Redis(未命中) -> MySQL -> 回写 Redis 需要解决的问题: 缓存穿透:查询一个不存在的数据,请求直达 DB 缓存雪崩:大量 key 同时过期,请求同时打向 ...
Doris 分区分桶设计与数据倾斜问题排查实战
发表于2026-08-05|数据库实战大数据|Doris•分区分桶•数据倾斜•OLAP
Doris 分区分桶设计与数据倾斜问题排查实战某天下午,业务方反馈「实时大盘」中今日订单统计查询耗时从 200ms 飙升至 3s,且伴随 BE 节点 CPU 使用不均。打开监控发现,集群中 3 个 BE 节点的磁盘 IO 和 CPU 出现了明显的高低差异——这正是典型的数据倾斜信号。对于依赖 MPP 并行查询的 OLAP 引擎而言,数据分布不均会让部分节点成为短板,拖垮整体查询性能。本文从原理出发,通过电商订单与日志分析两个实战场景,逐步演示 Doris 分区分桶的设计范式、倾斜排查方法和动态分区最佳实践。 1. 分区与分桶:把大象装进冰箱的正确姿势Doris 的表数据逻辑上被划分成 分区 (Partition) 和 桶 (Bucket/Tablet) 两级组织: 分区:按时间、地域等维度做逻辑切分,作用是管理数据生命周期和查询裁剪。一个分区通常对应一个目录,可以独立地进行备份、删除。 分桶:在一个分区内部,按指定列的 Hash 值将数据打散成多个物理 Tablet。Tablet 是 Doris 中最小的数据存储和负载均衡单元,分桶的均匀性直接决定了查询并行度和节点负载 ...
12…12
avatar
TranquilXuan
潜龙勿用,或跃在渊
文章
115
标签
60
分类
28
分类
  • MySQL1
    • 数据库1
  • 博客搭建5
  • 后端71
    • Java12
    • MyBatis5
    • Spring21
    • 中间件7
    • 工具库2
    • 性能优化1
    • 数据处理3
    • 数据库19
      • 中间件2
    • 软件工程1
  • 工程实践4
    • DevOps3
    • 博客搭建1
  • 数据库5
    • 中间件1
    • 后端3
  • 数据库实战1
    • 大数据1
  • 数据架构1
  • 认知思考5
  • 读书笔记15
  • 软件工程7
    • UML1
    • 设计模式6
标签
分区分桶 热点探测 博客搭建 大表 异步解耦 工具库 索引 软件工程 性能调优 读书笔记 rabbitmq 认知思考 死锁排查 中间件 死锁 隔离级别 可靠性 缓存架构 mysql Spring Deadlock 幻读 在线变更 脏读 实战 窗口函数 数据倾斜 工程实践 InnoDB Elasticsearch 数据库 数据架构 执行计划 设计模式 查询优化 不可重复读 DevOps B+树 后端 生产实战
归档
  • 八月 202614
  • 七月 20261
  • 一月 20253
  • 十二月 20245
  • 十一月 20241
  • 九月 202424
  • 八月 20245
  • 七月 202462
网站资讯
文章数目 :
115
已运行时间 :
本站总字数 :
12.8w
本站总访问量 :
最后更新时间 :
©2024 - 2026 By TranquilXuan
京ICP备2026046208号-1
搜索
数据库加载中