Subversion(SVN)体系架构
1. 总体架构分层
flowchart TD
A[客户端层] --> B[客户端库层]
B --> C[网络访问层]
C --> D[服务端层]
D --> E[存储层]


2. 客户端层(Client Interface)
命令行客户端(CLI)
svn checkout / commit / update
GUI客户端
- TortoiseSVN、SmartSVN 等
👉 本质:
都是调用统一的 Client Library(客户端库)
3. 客户端库层(Client Library)
Client Library
- 封装 SVN 操作 API(如 commit/update/log)
Working Copy Management Library
- 管理本地工作副本(.svn 元数据)
关键职责
| 功能 | 说明 |
|---|---|
| 工作副本管理 | 本地文件 + 元数据 |
| 差异计算 | delta 计算 |
| 冲突处理 | merge/conflict |
| 调用仓库接口 | 向下调用 Repository Access |
4. Repository Access 层(访问协议层)
4.1 支持三种访问方式
| 方式 | 协议 | 说明 |
|---|---|---|
| DAV | HTTP/WebDAV | 走 Apache |
| SVN | svn:// | 走 svnserve |
| Local | file:// | 本地直接访问 |
4.2 关键组件
DAV(mod_dav_svn)SVN(svnserve)Local(直接访问FS)
👉 这一层是协议抽象层
5. 网络层(Internet)
图中:
Ye Olde Internet (Any TCP/IP Network)
👉 说明 SVN:
- 支持 任意 TCP/IP 网络
- 可以公网 / 内网
- 协议可切换(HTTP / svn)
6. 服务端层(Server Side)
6.1 两种服务模式
方式1:Apache + mod_dav_svn
1 | Apache |
特点:
- 基于 HTTP / HTTPS
- 支持认证(LDAP、Basic)
- 企业常用
方式2:svnserve
1 | svnserve (daemon) |
特点:
- 轻量
- 协议:svn://
- 性能好
- 功能简单
6.2 对比
| 项目 | Apache | svnserve |
|---|---|---|
| 协议 | HTTP/HTTPS | svn:// |
| 认证 | 强 | 弱 |
| 性能 | 中 | 高 |
| 运维复杂度 | 高 | 低 |
7. 仓库层(Repository)
7.1 SVN Repository
核心数据结构:
- 版本历史
- 文件树
- revision(全局版本号)
7.2 存储后端(两种)
1)FSFS(主流)
1 | 文件系统存储 |
特点:
- 每个 revision 一个文件
- 易备份
- 性能好(现代默认)
2)Berkeley DB(已过时)
1 | 数据库存储 |
特点:
- 事务强
- 易损坏(崩溃风险)
- 已不推荐
8. 完整数据流
sequenceDiagram
participant User
participant CLI/GUI
participant ClientLib
participant RepoAccess
participant Server
participant Repo
User->>CLI/GUI: svn commit
CLI/GUI->>ClientLib: 调用API
ClientLib->>RepoAccess: 选择协议(DAV/SVN)
RepoAccess->>Server: 网络请求
Server->>Repo: 写入数据
Repo-->>Server: 返回结果
Server-->>ClientLib: 响应
ClientLib-->>CLI/GUI: 输出结果