2024/7/13

数据库连接池参数怎么定:不是越大越好

连接池配小了报「获取连接超时」,配大了数据库 CPU 打满。这两个极端我都遇到过,最后发现参数得按公式算,不能凭感觉。 先理解连接数不是免费的 每个 MySQL 连接在服务端对应一个线程,占内存(默认约 256KB 起,…

  • 数据库
  • 2024/7/13
  • 4
  • 2024/6/8

    Elasticsearch 的倒排索引与中文分词

    用 ES 做搜索,最常见的两个问题是「搜不到」和「搜出一堆不相关的」。这两个问题的根源往往都在分词和索引设计上。 倒排索引是什么 普通数据库是「文档 → 包含哪些词」,倒排索引反过来:「词 → 出现在哪些文档」…

  • 中间件
  • 2024/6/8
  • 4
  • 2024/3/9

    PostgreSQL 的 JSONB 和 GIN 索引:什么时候值得用

    MySQL 5.7 也有 JSON 类型,但 PostgreSQL 的 JSONB 更成熟:支持索引、有丰富的操作符、能部分更新。这篇记一下实际用法和边界。 JSON vs JSONB json 保存原始文本,保留空格和键顺序;jsonb 保存解析后的二进制,…

  • 数据库
  • 2024/3/9
  • 4
  • 2024/1/13

    Nginx 限流:limit_req 的三个参数怎么调

    接口被人刷的时候,第一道防线通常是 Nginx 限流。配置只有几行,但参数理解错了,要么没挡住,要么把自己的正常用户挡了。 基本配置 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; server { …

  • 中间件
  • 2024/1/13
  • 4
  • 2023/11/11

    缓存与数据库的一致性:四种方案和它们的取舍

    “先更新数据库还是先删缓存”这个问题,面试常问,实际项目里也真的会出错。这篇把几种方案摊开说,重点是各自的失败场景。 方案一:先更新 DB,再删缓存 最常用的 Cache Aside。 def update(id, data): db.upda…

  • 数据库
  • 2023/11/11
  • 4
  • 2023/10/23

    结构化日志与链路 ID:让线上问题可追溯

    日志打得不好,出问题时只能靠 grep 在一堆文本里拼时间线。花半天时间把日志格式统一一次,之后每次排障都能省下几倍时间。 一、别再打纯文本 这样的日志机器读不了: 用户 1024 下单失败,余额不够,订单 o8891 …

  • 后端
  • 2023/10/23
  • 4
  • 2023/8/12

    分库分表之前,先算清楚这笔账

    “数据量大了要分库分表”这句话害了不少项目。分片带来的复杂度是长期的:跨库 join 没了、事务要改成最终一致、扩容要迁移数据、运维要管更多实例。动手之前先算几个数。 第一步:现在到底多大 SELECT table_name, …

  • 数据库
  • 2023/8/12
  • 5
  • 2023/7/11

    限流的三种实现:计数器、漏桶和令牌桶怎么选

    限流不是为了拒绝用户,而是为了让系统在超载时仍然能服务一部分请求。三种常见算法适用场景差别很大,选错了要么挡不住峰值,要么误伤正常流量。 一、固定窗口计数器 最简单的做法:每分钟一个 key,INCR 后判断值…

  • 后端
  • 2023/7/11
  • 3
  • 2023/7/8

    Kafka 的分区和消费者组:一图说不清但能讲明白

    Kafka 的并发模型就两条规则:一个分区只能被同组的一个消费者消费;不同组之间互不影响。把这两条吃透,很多问题就解释得通了。 分区是并行的单位 一个 topic 分成多个 partition,每个 partition 内部有序,parti…

  • 中间件
  • 2023/7/8
  • 5
  • 2023/3/18

    MySQL 主从延迟:从 Seconds_Behind_Master 说起

    读写分离之后最常见的抱怨是“刚提交的数据查不到”。多数情况就是主从延迟。 先确认是不是延迟 SHOW SLAVE STATUS\G 关注三行: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 12 前两个…

  • 数据库
  • 2023/3/18
  • 4
  • 2023/1/19

    一次接口超时排查:从线程池排队到连接复用

    线上某个列表接口偶尔超时,监控上看到 P99 突然从 80ms 涨到 3s,但数据库慢查询日志里什么都没有。这类问题通常不在 SQL 本身,而在请求排队。记录一下当时的排查路径。 一、先分清时间花在哪 给一次请求打上分段…

  • 后端
  • 2023/1/19
  • 3
  • 2023/1/14

    RabbitMQ 消息不丢:从生产到消费的四道关

    “消息丢了”是消息队列最常见的投诉。丢可能发生在四个环节,每一个都要单独兜住,少一环就可能出问题。 第一关:生产者到交换机 网络抖动、交换机不存在、Broker 挂了,消息都可能没送到。开启 publisher confirm:…

  • 中间件
  • 2023/1/14
  • 4