Subversion(SVN)体系架构

1. 总体架构分层

flowchart TD
    A[客户端层] --> B[客户端库层]
    B --> C[网络访问层]
    C --> D[服务端层]
    D --> E[存储层]

b2ccf3ab8db1116abadec126eb31ed08.png

ea8da05975a084b1ca85c4d9de9c4828.png


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
2
3
Apache
├── mod_dav
└── mod_dav_svn

特点:

  • 基于 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: 输出结果