3

我正在设计一个 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 编码。

4

2 回答 2

5

给每台机器一个唯一的前缀。给每台机器一个计数器。要生成 ID,请递增计数器,并将其值附加到前缀。

如果您想混淆 ID,请对其进行加密 - 密码是一种可逆转换,因此将其应用于唯一值将产生唯一值。

于 2011-01-29T00:21:08.307 回答
2

一些想法:

  • 每天有 5 亿个请求。真的吗?
  • 使用 UUID。
  • 如果需要,不要使用 HTTP(因为这是更大的开销)并以二进制形式传输 UUID。
  • 您需要一定数量的字节来保证您的服务器返回一个真正唯一的ID。
  • 使用UDP怎么样?

无论如何,你到底想做什么?

于 2011-01-29T00:20:58.417 回答