←

短链接:Base62 短码,以及修改和统计为什么要拆开

短链接服务拆成四块:网关做分发和鉴权,用户服务管登录和资料,分组服务管短链归类,短链服务管创建、修改和访问统计。压力集中在后两块:访问量高,改完以后缓存和数据库可能不一致,不存在的短码还会把请求打进数据库。

短码

原始链接用 MurmurHash 得到一个十进制整数。这个数太长,不适合放进要被转发的 URL,所以再编码成 62 进制。字符集是 0-9、a-z、A-Z,可读,也不依赖额外的分隔符。

缓存

变更时先更新数据库,再删除缓存。下一次访问发现缓存没有,查库,再把结果写回。并发不高时这套够用:没有额外中间件,延迟也可以接受。并发读写下它仍会把旧值写回缓存,那一部分单独写在缓存一致性里。

修改短链接和写入访问统计会互相踩。分组变了,统计如果还拿着旧分组去自增,数字就记错。这里不用一把排他锁把所有请求串行化,用读写锁:读和读可以并行,写和写、读和写互斥。

不存在的短码用布隆过滤器和空值缓存挡在数据库外面。过滤器的误判怎么处理,同样留在后面那篇。