服务设计
如果你在往长短 URL 真实的对应关系上想, 那么就走远了.
最理想的情况是: 我们用一种算法, 对每一个长 URL, 唯一的转换成短 URL. 还能保持反向转换的能力....按照上面的发号器策略, 是不能保证长短链接的一一对应的, 你连续用同一个 URL 请求两次, 结果值都是不一样的....高并发
如果直接存储在 MySQL 中, 当并发请求增大, 对数据库的压力太大, 可能会造成瓶颈, 这时候是可以有一些优化的....批量发号
每一次发号都需要访问一次 MySQL 来获取当前的最大号码, 并且在获取之后更新最大号码, 这个压力是比较大的....这样可以将对数据库持续的操作移到代码中进行, 并且异步进行获取和写入操作, 保证服务的持续高并发.
分布式
上面设计的系统是有单点的, 那就是发号器是个单点, 容易挂掉.