跳转到主要内容

ZEO - ZODB的单一服务器客户端/服务器数据库服务器

项目描述

ZEO是ZODB的客户/服务器存储,用于在多个客户端之间共享单一存储。使用ZEO时,一个较低级别的存储(通常是文件存储)在ZEO服务器进程中打开。客户端程序通过ZEO ClientStorage连接到该进程。ZEO为所有客户端提供对数据库的一致视图。ZEO客户端和服务器使用TCP之上的自定义协议进行通信。

ZEO的一些替代方案

  • NEO 是一个分布式服务器客户端服务器存储。

  • RelStorage 利用关系型数据库管理系统服务器提供客户端服务器存储。

文档可在 readthedocs 上找到。

变更日志

6.0.0 (2023-11-23)

  • 取消对 Python 2.7、3.5、3.6 的支持。

  • 添加对 Python 3.12 的支持。

  • 直接使用 async/await 而不是 @coroutine/yield 进行切换。

  • 取消对凭据对象的实验性支持:对应的 ClientStorage.__init__ 参数 credentials 保留但忽略。从现在开始,ZEO 只支持通过 SSL 证书进行身份验证。

    请注意,ZEO 5 从未支持通过 usernamepassword 进行身份验证 - 在 2016 年 ZEO 5.0 发布之前就取消了此类基本身份验证的支持。

  • 修复 Python 3.12.0b4 的问题(问题 231 <https://github.com/zopefoundation/ZEO/issues/231>_)。

  • 通过查找具有前缀 check(由 ZODB<6 使用)和 test(由 ZODB>=6 使用)的 ZODB 继承测试,确保测试与 ZODB<6ZODB>=6 都兼容(问题 233 <https://github.com/zopefoundation/ZEO/issues/233>_)。

5.4.0 (2023-01-18)

  • 重新实现并简化 ClientStorage 实现的 asyncio 部分。

    • 从具有显式回调的未来切换到 async/await 样式。

    • 使用标准 asyncio 功能来实现超时。

    • 重新设计实现 ZEO 客户端协议的类的 API。

    • 显著改进源文档和测试。

    • 修复多个并发错误。

    • 添加基于 cython 的可选优化;它加快了读取速度但减慢了写入速度。要使用它,请安装 cython(及其依赖项)并在 src/ZEO/asyncio 中运行 cythonize -i *.pyx

  • 取消对与 ZEO4 服务器的互操作性的支持。结果发现,与 ZEO5 服务器的互操作性相反,ZEO5 客户端在实现与 ZEO4 服务器的互操作性时存在并发错误,这些错误导致数据损坏。修复并不简单,我们相信在 2022 年没有人实际使用 ZEO5.client-ZEO4.server 配置。这就是为什么我们决定取消对 ZEO4 服务器的支持而不是修复它。

    有关详细信息,请参阅 问题 209

  • 如果 zeopack 脚本无法连接到服务器,则将其退出状态设置为 1。请参阅 #214

  • 删除 asyncio/mtacceptor 模块。结果发现,多线程 ZEO5 服务器存在并发问题,这些问题导致数据损坏。多线程服务器模式已被弃用并计划删除,因此修复方法是最终删除它。从现在开始,ZEO 服务器始终是单线程的。

    有关详细信息,请参阅 问题 209

  • 仅使用以下存储进行 ZEO 测试:FileStorage(具有服务器端 blob)、FileStorage(具有共享 blob 目录)、MappingStorage(没有 blob)。

    这些测试涵盖了影响 ZEO 的所有存储功能:没有 blob、有共享 blob 和有服务器端 blob;加载、存储、两阶段提交、撤销。因此,通过这些存储的测试提供高信心,ZEO 也适用于其他正确实现的存储。请参阅 #198

  • 使用 flake8 对代码进行代码审查。

  • 添加对 Python 3.10、3.11 的支持。

  • ConflictError 添加到未记录的服务器异常列表中(客户端/其应用程序应确定是否希望记录它们)。

    防止 无当前事务: tpc_abort() 服务器日志条目。存储API允许用无效事务(在这种情况下应忽略调用)调用 tpc_abort,而服务器的 tpc_vote 依赖于这一点。

    将服务器请求异常的日志消息标签从 无效请求 ... 更改为 ... 抛出异常:,提示服务器而不是客户端问题。

    参见 问题 156

  • 移除对 python setup.py test 的支持。这已经有一段时间没有工作了。从现在起,运行测试的唯一支持方式是通过 zope-testrunner

5.3.0 (2022-03-24)

  • 移除对 asyncio/mtacceptor 模块的测试,它似乎未使用,且带来了维护负担。该模块将在 ZEO 版本 6 中被移除。

  • 移除 Python 3.5 的 GitHub Actions 测试,因为它已达到生命周期的终点。

  • 添加对 Python 3.8 和 Python 3.9 的支持。

  • 添加对 asyncio.CancelledError 的更准确错误处理。参见 问题 165

  • 修复与 ZEO 存储的 blob 相关的 bug。参见 #150

5.2.3 (2021-08-09)

  • 确保 ZEO 满足 ZODB >= 5.6 的要求,即仅在无效化处理之后才更改 lastTransaction()。违反此要求可能导致竞争条件和相关数据损坏 #166

  • 添加针对 ZODB master 分支的自动化测试。参见 问题 177

  • 修复由加载和外部无效化之间的竞争引起的数据损坏。参见 问题 155

  • 改进客户端缓存与服务器不同步时的日志消息。参见 问题 142

5.2.2 (2020-08-11)

  • 移除对 Python 3.4 的支持。

  • 提供适当的 CA 测试证书,以便 Py3 的 SSL 测试成功。

  • 将已废弃的 Thread.isAlive() 替换为 Thread.is_alive()。参见 pull request 154

  • 将修改和刚创建的对象都包含到无效化中。参见 pull request 160

5.2.1 (2019-02-09)

  • 添加对 Python 3.7 的支持。

  • msgpack-python 切换到 msgpack。目前需要版本 < 0.6。

  • 在创建 ClientStorage 时停止调用已废弃的 checkSecure 方法。从 ZODB 5.2.2 及以上版本开始,这会发出警告。在旧版本中,这可能会发出日志消息,但被认为是一个 错误特性。参见 问题 134

5.2.0 (2018-03-28)

  • 修复:快速启动/ad-hoc/play ZEO 服务器依赖于测试依赖项。参见 问题 105

  • 在 Windows 下不允许将字符串作为地址传递给 ClientStorage,因为字符串地址用于 Unix 域套接字,Windows 上不支持。参见 问题 107

  • 将所有 async 属性重命名为 async_ 以与 Python 3.7 兼容。参见 问题 104

  • 修复以与 ZODB 5.4.0 中所做的某些更改兼容。

    为 ZODB 5.4.0 或已有 zodbpickle.binary OIDs 的数据库提供客户端更新。参见 问题 113

  • 现在ZEO同时使用pickle协议3处理Python 2和Python 3(之前Python 2使用的是协议1)。这与ZODB 5.4.0的更改相匹配。

5.1.2 (2018-03-27)

  • 修复:ZEO与ZODB 5.4.0的更改不兼容。

    (允许在RPC请求中使用zodbpickle.binary,这对于与Python 2上的ZODB 5.4.0兼容是必要的。参见问题107。)

5.1.1 (2017-12-18)

  • 在Python 2上所有类都是新式类(它们在Python 3上已经是新式类)。这提高了PyPy上的性能。参见问题86

  • 修复了在Python 2下使用ZConfig 3.2.0时删除UNIX套接字文件的问题。参见问题90

5.1.0 (2017-04-03)

  • 添加了对使用msgpack而不是pickle序列化ZEO消息的支持。这有助于为支持byteserver铺平道路,但它还允许ZEO服务器支持Python 2或3客户端(但不是同时),可能提供轻微的性能提升。

  • 可能修复了过时且未经验证的zeoctl脚本。

  • 移除了zeopasswd,因为在ZEO认证移除后,它已不再有意义,转而使用SSL。

5.0.4 (2016-11-18)

  • 修复:ZEO需要更改才能与最近的交易更改兼容。

    ZEO现在与最新的ZODB和transaction版本兼容。

5.0.3 (2016-11-18)

  • 暂时需要非最新版本的ZODB和transaction,直到我们可以解决一些最近的问题。

5.0.2 (2016-11-02)

  • 在Python 2上提供更好的性能。

  • 当pip尝试在不受支持的Python版本上安装ZEO时,提供更好的错误信息。参见问题75

5.0.1 (2016-09-06)

与打包相关的文档修复

5.0.0 (2016-09-06)

这是一个主要的ZEO修订版,它替换了ZEO网络协议实现。

新功能

  • SSL支持

  • 可选的客户端冲突解决。

  • 许多主要是内部清理。

  • ClientStorage``server-sync配置选项和server_sync构造函数参数,以在事务开始时强制服务器往返,等待事务开始时任何未解决的无效化被传递。

  • 客户端断开连接错误现在是暂时性错误。当应用程序重试引发暂时性错误的作业时,带有断开连接错误的作业将被重试。与断开连接时同步ZEO服务器调用有限时间相结合,此更改应允许因服务器重启而导致的短暂断开,以避免生成客户端可见的错误(例如500个web响应)。

  • ClientStorage的预取方法以预取oids。

    当oids被预取时,请求将一次性发出,但调用者不会阻塞等待结果。相反,当调用者在稍后尝试获取对象id之一的数据时,它要么立即从ZEO缓存中提供,如果对象id的预取已完成,或者调用者将阻塞,直到正在进行的预取完成。(不会发出新的请求。)

已删除的功能

  • ZEO认证协议。

    这将通过利用SSL的新认证机制来替换。

  • ZEO监控服务器。

  • 完整的缓存验证。

  • 旧于ZODB 3.9的服务器客户端支持。

  • 旧于ZEO 4.2.0的客户端服务器支持。

5.0.0b0(2016-08-18)

  • 添加了ClientStorage server-sync配置选项和server_sync构造函数参数,以在事务开始时强制服务器往返,等待事务开始时任何未解决的无效化被传递。

  • 在创建一个临时的服务器时,默认情况下不会创建日志文件。您必须传递一个log选项来指定日志文件名。

  • 现在 ZEO 服务器注册方法返回存储的最后一个事务,允许客户端在缓存验证过程中避免额外的往返。

  • 客户端断开连接错误现在是暂时性错误。当应用程序重试引发暂时性错误的作业时,带有断开连接错误的作业将被重试。与断开连接时同步ZEO服务器调用有限时间相结合,此更改应允许因服务器重启而导致的短暂断开,以避免生成客户端可见的错误(例如500个web响应)。

  • 修复了使用 ZEO 5 客户端与 ZEO 4 服务器时的错误。

5.0.0a2 (2016-07-30)

  • 添加了在创建客户端存储时传递凭证的能力。

    这是实验性的,因为传递凭证会导致连接到普通 ZEO 服务器失败,但它方便了对自定义 ZEO 服务器的实验。由于涉及多个层次的结构,使用自定义 ZEO 客户端进行此操作将会很尴尬。

    未来,我们预计将支持服务器安全插件,这些插件消耗凭证进行身份验证(通常是通过 SSL)。

    请注意,凭证对 ZEO 来说是不可见的。它们可以是具有真实值的任何对象。客户端仅仅将它们传递给服务器,服务器将来会将它们传递给一个插件。

5.0.0a1 (2016-07-21)

  • 添加了 ClientStorage 预取方法以预取 oids。

    当oids被预取时,请求将一次性发出,但调用者不会阻塞等待结果。相反,当调用者在稍后尝试获取对象id之一的数据时,它要么立即从ZEO缓存中提供,如果对象id的预取已完成,或者调用者将阻塞,直到正在进行的预取完成。(不会发出新的请求。)

  • 修复:具有签名证书的服务器客户端未加载默认证书,无法连接。

5.0.0a0 (2016-07-08)

这是一个主要的ZEO修订版,它替换了ZEO网络协议实现。

新功能

  • SSL支持

  • 可选的客户端冲突解决。

  • 许多主要是内部清理。

已删除的功能

  • ZEO认证协议。

    这将通过利用SSL的新认证机制来替换。

  • ZEO监控服务器。

  • 完整的缓存验证。

  • 旧于ZODB 3.9的服务器客户端支持。

  • 旧于ZEO 4.2.0的客户端服务器支持。

4.2.0 (2016-06-15)

  • 将 loadBefore 的行为改为更接近 load,特别是在加载锁方面。这允许 ZEO 与即将推出的 ZODB 5 一起工作,ZODB 5 使用 loadBefore 而不是 load。

    重新实现了 load 使用 loadBefore,从而通过现有测试广泛测试 loadBefore。

  • 与 ZODB 5(以及 ZODB 4)一起工作的其他更改

  • 修复:ZEO 缓存 loadBefore 方法未能利用当前数据。

  • 停止支持 Python 2.6 和 3.2。

  • 修复:当 StorageServer 创建失败时,出现 AttributeError: ‘ZEOServer’ 对象没有属性 ‘server’。

4.2.0b1 (2015-06-05)

  • 添加了对 PyPy 的支持。

4.1.0 (2015-01-06)

  • 添加了对 Python 3.4 的支持。

  • 添加了一个新的 ruok 客户端协议,用于在不创建完整的客户端连接和不记录服务器日志的情况下获取 ZEO 端口上的服务器状态。

  • 即使在多线程延迟的情况下,也在服务器端记录错误。

4.0.0 (2013-08-18)

  • 在设置 auth_digest 会话时避免读取过多的随机字节。

  • 优化 ZEO 客户端的套接字地址枚举(避免非 TCP 类型)。

  • 改进 Travis CI 测试支持。

  • 为所有线程分配名称以进行更好的运行时调试。

  • 修复:在 ‘ZEO.scripts.zeoqueue’ 中 Py3k 下的 “assignment to keyword” 错误。

4.0.0b1 (2013-05-20)

  • 依赖于 ZODB >= 4.0.0b2

  • 添加了对 Python 3.2 / 3.3 的支持。

4.0.0a1 (2012-11-19)

很长时间以来的第一次独立的 ZEO 发布。

自 ZODB 3.10.5 以来

  • 存储服务器现在会发出 Serving 和 Closed 事件,以便订阅者在使用动态端口分配(绑定到端口 0)时发现地址。例如,这可以用于更新 ZooKeeper 数据库中的地址信息。

  • 客户端存储有一个 new_addr 方法,可以用来更改服务器地址(们)。这可以用于,例如,从 ZooKeeper 数据库中的信息更新动态确定的服务器地址。

项目详情


下载文件

下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

ZEO-6.0.0.tar.gz (243.6 kB 查看哈希值)

上传时间 源代码

构建分发

ZEO-6.0.0-py3-none-any.whl (247.2 kB 查看哈希值)

上传时间 Python 3

由支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面