服务设计
如果你在往长短 URL 真实的对应关系上想, 那么就走远了.
最理想的情况是: 我们用一种算法, 对每一个长 URL, 唯一的转换成短 URL. 还能保持反向转换的能力....为了实现长短链接一一对应, 我们需要付出很大的空间代价, 尤其是为了快速响应, 我们可以需要在内存中做一层缓存, 这样子太浪费了....但是可以实现一些变种的, 来实现部分的一一对应, 比如将最近 / 最热门的对应关系存储在 K-V 数据库中, 这样子可以节省空间的同时, 加快响应速度....这样可以将对数据库持续的操作移到代码中进行, 并且异步进行获取和写入操作, 保证服务的持续高并发.
分布式
上面设计的系统是有单点的, 那就是发号器是个单点, 容易挂掉....类比可得, 我们可以用 1000 个服务, 分别发放 0-999 尾号的数字, 每次发号之后递增 1000. 这样做很简单, 服务互相之间基本都不用通信, 做好自己的事情就好了.