我正在设计一个HTTP服务,每天可以处理多达5亿个请求(由超过一个独立的机器提供支持)。
对于每个请求,我都必须生成唯一的ID并将其返回给用户。 ID必须在10分钟的时间窗口内保持100%唯一性。(最好是1天内全局唯一的ID。)不需要进行服务器间通信来生成该ID。
愚蠢的伪会话示例:
客户端:GET /foo
服务器:Content-Type: text/xml
<root> <id>ab9d1972-2844-11e0-86b2-000c29544403</id> <other_data/> </root>
在此HTTP服务的上一代中,我使用了UUIDs。
我很满意UUIDs,但有一个问题:它们太长了。在这么多的请求中,在日志文件的磁盘空间浪费中,这个额外长度是可以注意到的。
创建一个短而又唯一的标识符的最佳方法是什么?为了使事情值得,算法应该产生至少不到UUID长度的一半,同时在整个一天中保持唯一(10分钟的时间应该更短)。
理想情况下,建议的算法应该具有明智,轻量级且生产质量的C实现。
更新:生成的ID在传递GET请求时不需要进行URI编码。
ceil(log(max_val)/log(num_different_chars))
。 - Oliver Charlesworth