我正在设计一个 HTTP 服务,每天最多可处理 5 亿个请求(由多台独立机器提供服务)。
对于每个请求,我必须生成唯一 ID 并将其返回给用户。ID 必须在 10 分钟的窗口内 100% 唯一。(首选 1 天,全局唯一 ID 是理想的。)生成该 ID 不需要服务器-服务器通信。
愚蠢的伪会话示例:
客户端:GET /foo 服务器:内容类型:text/xml <根> <id>ab9d1972-2844-11e0-86b2-000c29544403</id> <其他数据/> </root>
在此 HTTP 服务的上一代中,我使用了 UUID。
我对 UUID 很满意,但有一个问题:它们太长了。在这个数量的请求中,这个额外的大小在日志文件的磁盘空间浪费中是显而易见的。
创建简短但唯一的标识符的最佳方法是什么?我想,为了让事情变得有价值,算法应该最多产生一半的 UUID 长度,同时全天都是唯一的(10 分钟应该更短)。
理想情况下,建议的算法将在纯 C 中具有健全、轻量级的生产质量实现。
更新:在 GET 请求中传递时,生成的 ID 不应需要 URI 编码。