mın*_*maτ 14 nfs network-share disk-cache openstack
用户数据存储在两个相当大(>1 PB)的 OpenStack Swift 存储集群上。让它们成为Cluster A和Cluster B。
此外,还有几个PoP需要与该数据进行交互。这些 PoP 中的服务器实际上是无盘的,这意味着没有用户数据存储在它们上面,也没有下载到它们。PoP 可以分为一般的世界区域(例如北美、南非、中欧等)。
一些 PoP 与任何集群的 Swift 端点相距很远,从而引入了不受欢迎的延迟。为了在一定程度上缓解这种情况,我想在每个区域中设置一个缓存网关服务器,它将缓存 r/w 请求到最近的集群。
目前,任何 PoP 中的客户端都通过永久安装的swift 虚拟文件系统访问用户数据,这是一个 FUSE 模块,将 Swift 对象存储安装为块设备(或多或少)。然而,svfs 并不是那么稳定,在未来,客户端应该通过 NFS 访问缓存服务器。
这是所需架构的一个分支的图:
+------------------+ +------------------+ NFS +------------------+
| Cluster A | SVFS | Region 1 Cache +----------> R1 PoP a Client |
| +----------------> | | |
|Persistent Storage| |Ephemeral Storage+----+ |Generates R/W Load|
+-----------------++ +------------------+ | +------------------+
| |
| +------------------+ | NFS +------------------+
| SVFS | Region 2 Cache | +-----> R1 PoP b Client |
+-----------------> | | |
|Ephemeral Storage| |Generates R/W Load|
+------------------+ +------------------+
Run Code Online (Sandbox Code Playgroud)
问题是:如何设置缓存服务器以使用所有可用资源(指定的缓存分区、RAM)在写入 svfs 挂载点之前尽可能积极地缓存尽可能多的数据?基本上归结为:如何在 linux 中缓存目录?
如果可能,应合并读取和写入,并且 FUSE 请求中的块大小应至少为 128k,以便在缓存需要写入集群时最大限度地提高吞吐量并最大限度地减少延迟。
附录 1:我已经在一些服务器上将集群装载模块从 svfs 切换到 S3QL。S3QL 的缓存稍微提高了性能。为了完整性,我将尝试获取一些性能数据。
归档时间: |
|
查看次数: |
2187 次 |
最近记录: |