OpenStack Swift允许在群集上的多个位置复制和分发对象。
是否保证在成功PUT
操作后,我可以立即GET
该对象,还是必须等待对象在群集上传播?
答案 0 :(得分:6)
当Swift返回PUT操作成功时,可以保证它已写入仲裁(即(numReplicas / 2)+ 1)。例如,使用3x副本策略,将在确认写入请求之前写入两个副本。由于只有一个副本可用于要读取的对象,该对象立即可用。在正常对象复制器服务周期期间写入剩余的副本,并根据环配置进行放置。
至于它是否存在于容器列表中,可能会有点复杂。在Liberty版本中,有一个名为container_update_timeout
的配置设置,默认值为1.这表示如果对象服务器在不到1秒的时间内从容器服务获得确认,则更新同步发生,并在成功归还给客户。但是,如果容器服务花费的时间比此长,或者设置的值非常低(例如0),则容器更新将捆绑在一起并异步提交给容器服务。
这样做是为了提高多区域部署中的性能,其中更新的容器元数据可能不存在于请求更新的对象服务的同一数据中心甚至同一国家。
答案 1 :(得分:0)
假设容器服务器处于负载状态,并且新对象被放入系统。 只要代理服务器成功响应客户端,对象就会立即可用于读取。但是,容器服务器未更新对象列表,因此更新将排队等待以后的更新。 因此,容器列表可能不会立即包含该对象。