Amazon QLDB 有任何 scaling/performance 限制吗?
Amazon QLDB have any scaling/performance limits?
主 Amazon QLDB 页面显示
QLDB is also serverless, so it automatically scales to support the demands of your application.
然而,即使像 DynamoDB 这样的产品——具有几乎无限的自动扩展——也有一些扩展限制。 (例如,DynamoDB 每个分区键最多有 3k 个 RCU。)
我正在尝试找出 QLDB 的 scaling/performance 限制。每个密钥、table、分类帐或帐户是否有最大 TPS 或最大吞吐量?每个 table 或分类帐或帐户是否有最大存储大小?
截至 2019 年 10 月,QLDB Quotas and Limits 页面上未提及任何缩放限制。
QLDB FAQ page 说,
Amazon QLDB can execute 2 – 3X as many transactions than ledgers in common blockchain frameworks.
这是一个开始,但不是很有帮助,因为“2-3X”是一个相对广泛的范围,而且他们还没有具体说明他们认为哪些区块链框架是通用的。
有没有人找到任何关于此的信息(在文档中、在 AWS 博客文章中、从深入研究 session 等)是否有任何此类限制?
如您所见,任何系统都有限制。您问题的唯一真实答案需要对您的用例进行基准测试以查看您得到的数字。我不想误导你!
也就是说,我可以帮助您了解一些 QLDB 基础知识,这将帮助您建立一个心理模型,了解系统在不同工作负载下的行为方式。
要理解的第一个概念是文档修订模型。在 QLDB 中,文档被插入,然后被更新(修订),然后被删除。每个文档都有一个 QLDB 分配的 UUID,每个修订版都有一个 QLDB 分配的(严格单调递增和密集)版本号。可以通过 QLDB 会话发布交易(发送 PartiQL 语句)来修改文档。
接下来,交易。事务通常会读取某些状态,然后继续或放弃。例如,如果您正在构建一个银行应用程序,其用例是从 Mary 向 Joe 转账,交易可能是 "read the balance of Mary"、"read the balance of Joe"、"set the balance of Mary" 和 "set the balance of Joe"。在这两者之间,您的应用程序可以强制执行约束。例如,如果它确定 Mary 的余额小于转账金额,它将放弃交易。如果此交易成功,则会创建两个新修订(一个用于 Mary 的新银行帐户,另一个用于 Joe)。
下一个概念是开放式并发控制 (OCC),在 https://docs.aws.amazon.com/qldb/latest/developerguide/concurrency.html 中进行了解释。当您尝试提交事务时,如果另一个事务干扰您尝试提交的事务,QLDB 将拒绝它。例如,如果从 Mary 的账户中提取了另一笔款项(在您读取余额后),您的提交将由于 OCC 冲突而失败,从而允许您重试交易(并重新检查 Mary 是否仍有足够的钱)。因此,您的交易性质会影响您的表现。如果您正在读取帐户余额,然后根据读取的内容生成新余额,那么您的吞吐量将低于创建新帐户或将帐户更改为随机金额(两者都不需要任何读取)的吞吐量。
第四个概念是期刊。 QLDB 是一个 "Journal first" 数据库:所有事务首先写入分布式日志,然后用于更新索引存储。 QLDB 架构为您抽象了物理日志实现,但确实暴露了 "strand" 的概念,它是 Journal 的一个分区。每条链都有固定的容量(每秒新修订)。 QLDB 目前(2019 年末)将每个分类账限制为单链。
综上所述,希望能对您的问题有所帮助:
- 最大 TPS。理论上限为单个最大TPS
链。没有一个固定的数字,因为各种因素可能
有影响,不过TPS好几千
- 每个文档的最大 TPS。这永远不会超过最大 TPS,但受 OCC 的约束比其他任何东西都多。如果你只是
插入新文档(无读取),您将拥有零 OCC 冲突。
如果您正在阅读,您将受到我们阅读所需时间的限制
从日志更新我们的索引存储。 100 TPS 不错
起点.
- 每个 table 最大值。除了其他限制(即每个文档限制或链
极限)。
- 每个帐户最多。我们对 "QLDB Session" API 没有账户范围的限制。每个账本都是一个岛。
- 每个 table、分类帐或帐户的最大大小。这里没有限制。
有关会话的说明:我们对 QLDB 的默认限制为 1500 个会话。每个会话只能有 1 个活动事务,并且由于 PartiQL 查询时间、网络往返或您的应用程序正在处理的结果,每个事务都需要一些时间。这将对您的表现施加上限。我们确实允许客户提高此限制,如 https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html 所述。
关于你问题的另一部分(文档、例子和学习资料),我可以提供一些信息。 QLDB 于上个月发布,因此 re:Invent 2019 年是我们必须与客户互动并就开发人员需要更多帮助的地方获得直接反馈的第一个机会。我们在 re:Invent 2018 年进行了 300 人级别的演讲,今年还会再做一次。我将对我们的 Journal-first 架构给出 "Chalk Talk",并将涵盖其中的一些概念。会话将被录制并上传到 YouTube,但 Chalk Talks 需要您亲自到场。但无论哪种方式,这只是我们必须参与并更好地解释 QLDB 架构、优势和局限性的众多机会之一。欢迎随时提出问题,我们将尽最大努力回答问题并提高可用文档的质量。就“2-3 倍索赔”而言,这个数字是通过针对区块链框架和 QLDB 构建真实世界的用例(例如银行示例),并将这些学习提炼成一个数字来确定的。我们相信,如果不需要分布式账本,QLDB 的中心化特性可以提供很多好处,而性能就是其中之一。如果您有特定用例,其中 QLDB 不比区块链框架上的相同用例快,我们很乐意听到这些。
主 Amazon QLDB 页面显示
QLDB is also serverless, so it automatically scales to support the demands of your application.
然而,即使像 DynamoDB 这样的产品——具有几乎无限的自动扩展——也有一些扩展限制。 (例如,DynamoDB 每个分区键最多有 3k 个 RCU。)
我正在尝试找出 QLDB 的 scaling/performance 限制。每个密钥、table、分类帐或帐户是否有最大 TPS 或最大吞吐量?每个 table 或分类帐或帐户是否有最大存储大小?
截至 2019 年 10 月,QLDB Quotas and Limits 页面上未提及任何缩放限制。
QLDB FAQ page 说,
Amazon QLDB can execute 2 – 3X as many transactions than ledgers in common blockchain frameworks.
这是一个开始,但不是很有帮助,因为“2-3X”是一个相对广泛的范围,而且他们还没有具体说明他们认为哪些区块链框架是通用的。
有没有人找到任何关于此的信息(在文档中、在 AWS 博客文章中、从深入研究 session 等)是否有任何此类限制?
如您所见,任何系统都有限制。您问题的唯一真实答案需要对您的用例进行基准测试以查看您得到的数字。我不想误导你!
也就是说,我可以帮助您了解一些 QLDB 基础知识,这将帮助您建立一个心理模型,了解系统在不同工作负载下的行为方式。
要理解的第一个概念是文档修订模型。在 QLDB 中,文档被插入,然后被更新(修订),然后被删除。每个文档都有一个 QLDB 分配的 UUID,每个修订版都有一个 QLDB 分配的(严格单调递增和密集)版本号。可以通过 QLDB 会话发布交易(发送 PartiQL 语句)来修改文档。
接下来,交易。事务通常会读取某些状态,然后继续或放弃。例如,如果您正在构建一个银行应用程序,其用例是从 Mary 向 Joe 转账,交易可能是 "read the balance of Mary"、"read the balance of Joe"、"set the balance of Mary" 和 "set the balance of Joe"。在这两者之间,您的应用程序可以强制执行约束。例如,如果它确定 Mary 的余额小于转账金额,它将放弃交易。如果此交易成功,则会创建两个新修订(一个用于 Mary 的新银行帐户,另一个用于 Joe)。
下一个概念是开放式并发控制 (OCC),在 https://docs.aws.amazon.com/qldb/latest/developerguide/concurrency.html 中进行了解释。当您尝试提交事务时,如果另一个事务干扰您尝试提交的事务,QLDB 将拒绝它。例如,如果从 Mary 的账户中提取了另一笔款项(在您读取余额后),您的提交将由于 OCC 冲突而失败,从而允许您重试交易(并重新检查 Mary 是否仍有足够的钱)。因此,您的交易性质会影响您的表现。如果您正在读取帐户余额,然后根据读取的内容生成新余额,那么您的吞吐量将低于创建新帐户或将帐户更改为随机金额(两者都不需要任何读取)的吞吐量。
第四个概念是期刊。 QLDB 是一个 "Journal first" 数据库:所有事务首先写入分布式日志,然后用于更新索引存储。 QLDB 架构为您抽象了物理日志实现,但确实暴露了 "strand" 的概念,它是 Journal 的一个分区。每条链都有固定的容量(每秒新修订)。 QLDB 目前(2019 年末)将每个分类账限制为单链。
综上所述,希望能对您的问题有所帮助:
- 最大 TPS。理论上限为单个最大TPS 链。没有一个固定的数字,因为各种因素可能 有影响,不过TPS好几千
- 每个文档的最大 TPS。这永远不会超过最大 TPS,但受 OCC 的约束比其他任何东西都多。如果你只是 插入新文档(无读取),您将拥有零 OCC 冲突。 如果您正在阅读,您将受到我们阅读所需时间的限制 从日志更新我们的索引存储。 100 TPS 不错 起点.
- 每个 table 最大值。除了其他限制(即每个文档限制或链 极限)。
- 每个帐户最多。我们对 "QLDB Session" API 没有账户范围的限制。每个账本都是一个岛。
- 每个 table、分类帐或帐户的最大大小。这里没有限制。
有关会话的说明:我们对 QLDB 的默认限制为 1500 个会话。每个会话只能有 1 个活动事务,并且由于 PartiQL 查询时间、网络往返或您的应用程序正在处理的结果,每个事务都需要一些时间。这将对您的表现施加上限。我们确实允许客户提高此限制,如 https://docs.aws.amazon.com/qldb/latest/developerguide/limits.html 所述。
关于你问题的另一部分(文档、例子和学习资料),我可以提供一些信息。 QLDB 于上个月发布,因此 re:Invent 2019 年是我们必须与客户互动并就开发人员需要更多帮助的地方获得直接反馈的第一个机会。我们在 re:Invent 2018 年进行了 300 人级别的演讲,今年还会再做一次。我将对我们的 Journal-first 架构给出 "Chalk Talk",并将涵盖其中的一些概念。会话将被录制并上传到 YouTube,但 Chalk Talks 需要您亲自到场。但无论哪种方式,这只是我们必须参与并更好地解释 QLDB 架构、优势和局限性的众多机会之一。欢迎随时提出问题,我们将尽最大努力回答问题并提高可用文档的质量。就“2-3 倍索赔”而言,这个数字是通过针对区块链框架和 QLDB 构建真实世界的用例(例如银行示例),并将这些学习提炼成一个数字来确定的。我们相信,如果不需要分布式账本,QLDB 的中心化特性可以提供很多好处,而性能就是其中之一。如果您有特定用例,其中 QLDB 不比区块链框架上的相同用例快,我们很乐意听到这些。