[译]理解对象存储如何工作

  这一节简述Object Storage管理过程中每个概念。
The Ring
  Ring表示存储对象名字与其在磁盘上的物理存储位置之间的映射关系。accounts,containers和objects各有自己的ring。当其他组件需要实现任何对于accounts,containers和objects的操作,都需要同cluster里决定他们位置的适当的ring进行交互。

  Ring使用zones,devices,partitions,replicas来维护这些映射。默认每个partition在cluster中有3份备份,partition在映射中的位置由ring来维护。Ring同时也负责决定在failure场景中哪些device被用来handoff。
  数据可以使用ring中的zone这个概念来进行隔离。partition中的每个备份保证处于不同的zone,一个zone可以用一个driver,a server, a cabinet, a switch,或者一个datacenter来表示。
  Ring中的partition被均匀划分到所安装的所有设备里。当partition需要被移动时(例如增加一个设备到cluster里),ring确保一次移动最少量的partition,一次只移动一个partition的一个备份。
  权重被用来平衡cluster中不同driver上partition的分布。这可用于cluster中不同尺寸的driver.

  Ring主要是代理服务器与一些后台进程使用(如replication)。

Proxy Server
  Proxy Server负责把OSOS架构的其他部分联接在一起。对于每一个请求,代理服务器查找R中AcontainerO的位置,并且路由这些请求。公共API也透过代理服务器暴露给外部用户。
  大量的failures也在Proxy Server中进行处理。例如:一个object PUT操作,如果一个服务器不可用,则Proxy Server向Ring要求一个hand-off服务器,并且路由到那。
  当对象被传入或传出一个对象服务器里,都是直接透过代理服务器而没有被spool。
  可以在设置代理服务器的配置文件来使能它的account管理功能。

Object Server
  对象服务器是一个非常简单的blob存储服务器。它能存储、检索、删除本地设备上存储的对象。对象以二进制文件的方式存储在FS,同时metadata存储在文件的扩展属性里。这就要求底层FS支持文件的xattrs。一些FS默认是关闭xattrs的,比如ext3.
  对象存储路径来自对象名的哈希值与操作的时间戳。写操作总是成功,并且对象最新版总是被保留。删除操作也被看作是文件的一个版本(0字节的.ts文件)

Container Server
  主要工作是处理对象列表。它不知道对象在哪,只知道哪个对象在哪个container。listing存放在sqlite DB文件里,在container里备份的情况同对象备份一样。统计包含对象数量,以及container使用的存储量。

Account Server
  类似container Server,只不过他负责的是container的listing而不是objects的。

Replication
  Replication被设计用来在面临临时性错误(如网络中断,驱动失效)时保持系统的一致状态。
  Replication进程对比本地数据与远程拷贝,确保他们都是最新版本。Object Replication使用哈希表来迅速比较每个P的子项,container和A Replication使用哈希的联合,并且共享high water marks.
  Replication更新are push based。对于对象复制,更新就是节点之间的文件同步(rsync)事务。A和container则是透过HTTP push丢失的记录或者rsync整个数据库文件。
  Replicator确保数据从系统中移除。当一个item被删除,ts被设置为该item的最新版.Replicator查看ts并保证item从整个系统中移除。

Updaters
  有时containerA数据不能被立即更新,这通常发生在失效场景或高负载期间。如果一个更新失败,这个更新被排队到本地FS,updater将处理这些失败的更新。This is where an eventual consistency window will most likely come in to play.例如,假设一个container服务器负载未满,同时一个新的对象被放入系统,只要代理服务器响应客户请求成功,该对象立即可读。然而,container服务器不会立即更新对象列表,因此该更新将会被排队,因此container列表不是即刻就包含有该对象。
  在实践中,一致性窗口是唯一与updater运行频率一样大,又不被注意,因为代理服务器将路由列表请求到第一个响应的container服务器。这个负载未满的服务器可能不是那个为接下来的列表请求服务的服务器--其他的两个备份可能会处理这个列表。

Auditors
  Auditors对AcontainerO作完整性检查。如果发现损坏,文件会被隔离,replcation将从另外的备份那里再复制一份,取代坏掉的文件。如果是其他错误的话就记入日志(例如:对象列表在它所属的container里找不到)。

原文地址:https://www.cnblogs.com/Clisa/p/3461715.html