【问题标题】:Safe way to generate unique primary keys from AWS Lambda functions with Node.js使用 Node.js 从 AWS Lambda 函数生成唯一主键的安全方法
【发布时间】:2020-06-07 18:03:46
【问题描述】:

我正在使用带有 Node.js 的 AWS Lambda 将项目插入到我的 DynamoDB 表中,并且需要为这些项目生成唯一的 ID。

我最担心的是 AWS Lambda 底层基础设施中的熵,以及每秒与大量 id 发生冲突的风险。

我正在使用 nanoid,但不确定它是否符合此要求。我正在使用的代码是这样的:

const { customAlphabet } = require("nanoid");
const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
const idSize = 20;
const nanoid = customAlphabet(alphabet, idSize);
const id = nanoid(); //=> "scLV4Vc7OrJ2Vpib9rz6"

nonoid 如何产生随机性?在 AWS Lambda 函数中使用是否安全(高熵和低碰撞变化)?如果没有,有什么替代方案?

【问题讨论】:

    标签: node.js amazon-web-services random aws-lambda amazon-dynamodb


    【解决方案1】:

    取自nanoid documentation

    为了有十亿分之一的重复机会,必须生成 103 万亿个版本 4 ID。

    对于 DynamoDB,总是存在发生冲突的风险,它是 BASE,因此您正在用性能交换一致性。

    如果您能够增加您的 ID 的字符串长度,这将减少您发生冲突的机会。

    如果您确实想使用 DynamoDB 并添加一致性,则添加了 transactional support。这会增加一点性能开销。

    【讨论】:

    • Lambda 函数的熵高吗?
    • Lambda 将是一个很好的运行源,我不会太担心函数执行本身的交叉碰撞。函数执行将跨越多个 MicroVM。有许多因素会增加 nanoid 函数的真正随机性:)
    猜你喜欢
    • 2019-02-02
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2020-04-06
    • 2021-09-23
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多