我目前正在构建一个小型 CDN 拓扑系统,正在寻找在所有服务器中同步某个文件夹内的文件的最佳方法。
我需要能够将文件上传到某个特定的 FTP,并将其复制到所有其他服务器。
需要同步的文件夹大小约为 50GB,我需要在最多 5 分钟内完成同步。
基本上,有两个选项:
1)在所有服务器之间进行某种文件夹同步,并同步该单个文件夹。2
)采用某种一对多 FTP 上传机制
所有服务器上的操作系统都是 Windows 2008 R2。
哪种方法更好?还有其他想法吗?
答案1
文件夹同步是基础操作。在 Windows Server 上,最好的建议是使用 DFS-Replication。它会监视 USN 日志(文件系统更改日志)中的更改并进行复制。
以下是一个简单的概述(我目前正在分析所涉及的底层 I/O):
对 Windows 系统上某个位置的读取访问权限
- Readfile() [win32 api]
- NTReadFile() [kernel32.dll]
- Ntdll.dll [传递给内核模式驱动程序]
- ntoskrnl.exe 用于调用子系统
- driver.sys 用于调用驱动程序,如下所示:
- ntfs.sys(USN 日志受影响)<----------
- ftdisk.sys / dmio.sys
- 磁盘系统文件
- RAID 控制器
- 硬盘
当您将数据附加到 DFS-R 成员服务器(“主”)上的文件时会发生什么:
- 在主服务器上,将数据附加到文件
- 按照目标,检查现有的暂存文件
- 在主服务器上,生成校验和并将其复制到 Staging
- 针对目标,检查现有文件
- 按照目标,检查现有的暂存文件
- 在目标上,根据校验和在安装中生成文件
- 在目标上,将文件移动到目标文件夹
- 在目标上,生成校验和并将其复制到 Staging
它对于成员之间的复制非常高效并且非常有效。