凸函数是如何工作的

这是一篇关于 Convex 后端平台工作原理的介绍文章,主要内容如下:

  • 引言:Convex 已发展为繁荣的后端平台,本文将介绍其工作原理,从系统概述开始,逐步引入系统的核心状态和运动状态。
  • 概述:以部署 James 的swaghaus应用为例,介绍 Convex 的部署和服务架构,包括 Web 应用和后端端点,Convex 部署的核心是运行在云端的数据库,直接运行convex/文件夹中的应用代码作为事务,并提供端到端类型系统和一致性保证。
  • Convex at rest

    • Functions:公共流量通过querymutationaction注册的公共函数流向 Convex 应用的后端,函数运行器使用 V8 执行 JavaScript,并对convex/目录中的代码进行打包和编译,创建更小且执行更快的代码单元和源映射。
    • Tables and schema:应用可以在schema.ts文件中指定表和数据验证器,Convex 支持稍扩展的 JSON,包含 64 位有符号整数和二进制数据,每个文档都有唯一的文档 ID,Convex 设计为既支持无模式文档数据库,也支持模式驱动的关系模型。
    • The transaction log:Convex 数据库将表存储在事务日志中,这是一个只支持在末尾追加条目和查询指定时间戳条目的数据结构,每个文档版本都有一个单调递增的时间戳,事务日志包含所有表的文档混合在一起,每个时间戳定义一个数据库快照,通过应用事务日志中的增量可以创建指定时间戳的数据库快照,为了提高查询效率,还可以在事务日志之上构建索引。
  • Starting it up: The sync engine

    • Concurrency and race conditions:为实现 Web 规模,后端需要同时执行多个请求,引入并发会带来竞态条件问题,如两个用户同时添加最后一件商品到购物车,可能导致数据不一致。
    • Transactions:事务是数据库读写的原子组,封装了应用逻辑,Convex 确保所有事务是可序列化的,开发者无需担心竞态条件,在 Convex 中,可序列化的事务可以并行运行并独立提交,不会相互干扰。
    • Read and write sets:Convex 使用乐观并发控制实现可序列化,事务有开始时间戳、读取集和写入集,通过检查写入集与读取集是否有重叠来确定事务是否可序列化。
    • Commit protocol:提交者是事务日志的唯一写入者,它接收最终的事务,决定是否可以提交,并将其写入事务日志,如果事务与其他事务的写入集有重叠,则会中止事务并返回错误,函数运行器会重试事务。
    • Subscriptions:可以使用读取集实现查询的实时更新,客户端订阅查询结果的变化,订阅管理器维护所有活动订阅的读取集,高效地检测查询结果是否改变。
    • Functions: Sandboxing and determinism:JavaScript 运行时具有沙盒化和确定性,确保突变的可重试性和查询订阅的精确性,通过控制 V8 运行时和暴露的环境来实现这些保证。
  • Putting it all together: Walking through a request:以加载 Swaghaus 应用为例,介绍客户端请求到 Convex 后端再返回的过程,包括执行查询、执行突变和更新订阅等步骤。
  • 结论:文章介绍了 Convex 的主要工作原理,但还有很多内容未涵盖,如 actions、auth 等,Convex 是一个集成了多种功能的后端平台,方便开发者构建全栈 AI 项目。
阅读 39
0 条评论