Tag: Backend

本地限流器实战:四种经典算法与实现思路

高 QPS 的后端服务,几乎一定需要“限流”(Rate Limiting)。 这里讨论的是本地限流器(local rate limiter):限流状态只存在于单个进程/单个实例中,不和其他实例共享。 它的目标很朴素: 在流量突增时保护服务自身(CPU/线程池/DB 连接/下游依赖) 让系统吞吐更可控,避免被瞬时尖峰打穿 本地限流最常见的四种算法: 固定窗口(Fixed Window) 滑动窗

Rate Limiter In Action

Backend systems that handle high QPS often need a local rate limiter to protect themselves. Here, “local” means the limiter runs within a single process and does not coordinate state across instances.

MySQL InnoDB Locks

InnoDB is MySQL’s transactional storage engine. After more than a decade of development, it has become the default choice for most production workloads. There are plenty of good deep-dives on InnoDB

多级缓存的设计与实现

在高并发的后端业务中,多级缓存是一种非常常见的设计。事实上,多级缓存策略在计算机硬件中也普遍存在。 为什么会有多级缓存?通常缓存都比原数据要小。设立缓存的目的很简单:某些数据经常被访问,我们不想每次都去最深的地方(这里一般是指数据库)查找,所以会在更方便取到数据的地方把这些数据保存起来。 那么,为什么要用多级缓存呢?对所有数据来说,访问频率并不一致。对于访问频率非常高的数据,我们称为热点数据。例

为什么不建议在 Redis 使用大 Key

Preview 公司里某位工程师小斌发现在一个 Redis 集群中的 some_big_list 经常出现慢查询,而且 QPS 特别高。初步定位是出现了一个热点的 Key。12newexplore> llen some_big_list500000 上面的命令发现,这个 some_big_list 是一个大 Key,导致 Redis Server 的服务器 CPU idle 很低,结果出现了

Java 里的构造函数需要加锁吗

写 Java 代码时,我们经常会用到 synchronized 关键字。synchronized 是一种相对重量级的锁,常见用法有两种。 对一个具体的变量加锁。 12345678Logger l = LoggerFactory.getLogger(getClass().getName());synchronized (l) { // do something}synch