ScyllaDB Rust 驱动程序 1.0 内部:一个使用 Tokio 的完全异步的分片感知 CQL 驱动程序

主要观点:介绍了 ScyllaDB Rust Driver 1.0 版本的工程挑战和设计决策,包括错误类型重构、模块结构调整、移除公共 API 中的不稳定依赖、支持 Rustls 进行 TLS、抽象 TLS 后端、优化度量指标、迈向 1.0 版本的垫脚石以及未来的改进方向等。

关键信息:

  • 2021 年在 ScyllaDB 内部开发者黑客松期间诞生 Rust Driver 项目,目标是提供与 Apache Cassandra 兼容的 CQL 驱动实现及 ScyllaDB 特定优化,0.2.0 版本在 crates.io 发布,性能令人满意,后继续努力以实现正式发布和统一其他特定驱动。
  • 1.0 版本带来新特性,如重构错误类型使层次更清晰、更具类型安全性;调整模块结构以明确抽象层;移除公共 API 中的不稳定依赖以保证 API 稳定性和用户灵活性;支持 Rustls 简化 TLS 连接并去除对系统 C 库的依赖;引入 TLS 后端抽象层;优化度量指标以减少开销等。
  • 迈向 1.0 版本的过程中,在 0.11 和 0.15 版本中对序列化和反序列化 API 进行了改进,在 0.14 版本中重新设计了分页 API 以避免使用错误。
  • 未来计划包括添加 prelude 模块、进行更多性能优化、扩展 CQL 执行 API、设计测试工具、重写 CQL 执行 API 及引入 QueryDisplayer 等,且欢迎社区反馈。

重要细节:

  • 原始错误类型存在结构扁平、字符串化错误、难以匹配错误种类等问题,1.0 版本中错误类型更清晰,有明确的错误层次和转换,且错误类型被装饰为#[non_exhaustive]属性。
  • 模块结构从之前的杂乱无章变为更清晰的分层结构,明确各模块的抽象内容和导出策略。
  • 移除不稳定依赖通过使用特征标记来控制依赖的引入,避免对公共 API 的影响,同时给用户更多选择和灵活性。
  • Rustls 支持通过特征标记实现,用户可根据需求选择使用 OpenSSL 或 Rustls 作为 TLS 后端,且可同时使用多个版本的后端。
  • 度量指标优化方面,发现并解决了因互斥锁导致的性能问题,引入了无锁直方图,并将度量指标作为可选功能,减少资源消耗。
  • 序列化 API 重构利用 Rust 的类型系统加强了类型安全性,反序列化 API 改进避免了不必要的分配和转换,提高了性能和内存效率。
  • 分页 API 重新设计,使分页控制更清晰,避免了使用错误,引入了强类型的 PagingState 和 PagingStateResponse 抽象。
阅读 8
0 条评论