This work is licensed under a Creative Commons Attribution 3.0
Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode
自从 DiskFile API 发布以来,已经出现了许多不同的实现,它们提供了将 Swift 对象存储在第三方存储系统中的能力。通常,这些系统提供对象的持久性和可用性(例如,GlusterFS、GPFS),因此对象环只需要使用一个副本创建。
这种配置的典型部署方式是“PACO”部署,其中代理、账户、容器和对象服务都在同一节点上运行。对象环的构建方式是代理服务器始终将请求发送到本地对象服务器。对象服务器(及其第三方 DiskFile)然后负责将数据写入底层存储系统,该系统将根据其自身的策略分发数据。
在典型的 Swift 部署中,代理节点将数据发送到运行在不同节点上的对象服务器,对象服务器将数据直接写入磁盘。在第三方存储系统的情况下,对象服务器通常会建立另一个网络连接将对象发送到该存储系统,从而为数据路径增加一些延迟。
即使代理和对象服务器在同一节点上,由于通过本地网络进行 RPC 通信,仍然会引入延迟。
对于单副本 - PACO 部署的场景,代理服务器将直接将数据发送到第三方存储系统。为了实现这一点,我们希望直接从代理进程调用对象 WSGI 应用程序,而不是建立额外的网络连接。
此提议的解决方案侧重于减少代理到对象服务器的延迟。代理到账户和/或容器的通信将保持不变,稍后通过补丁解决。
已提交一个 WIP 补丁:https://review.openstack.org/#/c/159285/。最近对代理服务器中对象控制器所做的改进,提供了非常好的代码分离能力。
待办事项和需要进一步调查的地方
要测试补丁 159285,请按照以下步骤操作