dragonfly/docs/zh-CN/design/architecture.md

110 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 产品思考与设计
## 定位
提供企业级(高效、稳定、安全、低成本、产品化)的文件分发与管理服务,并成为在该领域的云原生最佳实践与标准解决方案。
## 解决的问题
**架构设计缺陷:** 现有架构很难满足日益增长的文件分发业务需要,在稳定性、效率以及安全性等方面逐渐暴露出不足,并受到越来越多的挑战
**价值渗透不足:** 当前只支持 HTTP 回源协议针对其他类型的存储HDFS、各云厂商的存储服务、Maven、YUM 等等)缺乏适配
**分发模式单一:** 目前只支持主动拉取模式,缺少主动推送以及主动同步能力
**产品化能力缺失:** 没有提供完善的控制台功能,比如分发任务管理与管控、数据大盘、多租户以及权限控制等等
## 核心能力
- 通过统一的回源适配层及实现支持各种不同类型存储HDFS、各云厂商的存储服务、Maven、YUM 等等)的 P2P 文件分发能力
- 支持更多的分发模式: 主动拉取、主动推送、实时同步、远程复制、自动预热、跨云传输等等
- 系统之间分离解耦,调度与 CDN 插件化,且支持按需部署,可轻可重,可内可外,灵活满足不同场景的实际需要
- 基于 grpc 全新设计的 P2P 协议框架,效率及稳定性更佳
- 支持加密传输、基于账号的传输鉴权与限流、多租户隔离机制
- 支持更高效的 IO 方式: 多线程 IO、内存映射、DMA 等
- 支持动态压缩、内存文件系统以及更高效的调度算法,提升分发效率
- 客户端通过 C/S 模式支持第三方软件原生集成蜻蜓的 P2P 能力
- 产品化能力: 支持文件上传、各种分发模式的任务管理、数据视图以及全局管控等功能
- 内外一套,核心特性相互共享,非通用特性各自扩展
- 与生态进一步集成: Harbor、Nydus镜像按需下载解决方案、各云厂商仓库服务等
## 架构设计
### 整体架构
![alt][arch]
### 关联关系
![alt][association]
### 镜像下载流程
![alt][download-process]
### 子模块架构
#### CDN 模块
![cdn][cdn]
### 子系统功能
#### Manager
- 动态配置管理
- 数据大盘 & 带宽计量
- 文件上传 & 分发管理与管控
- 文件同步管理
- 账号 & 权限控制
- 订阅 & 通知
- 多租户管理
- 命令通道服务(通道合一)
#### Scheduler
- 基于多维度的 P2P 调度策略
- 智能化调度算法(高级)
- 调度结果可量化对比以及支持 A/B Testing
- 调度策略插件化以及 CDN 子系统插件化
- 元信息下发管道
- 客户端下载结果和回源结果统计以及与监控服务的对接
#### CDN
- 多源适配能力,包括目录下载和 Range 下载功能
- DMA 读写
- 回源中转
- 分发预热
- 动态压缩
- 存储管理(种子存放、磁盘清理、块级存储)
- 内存文件系统
- 安全传输(对称加密、完整性校验等)
- 存储介质插件化
#### Dfget daemon
- 多源适配能力,包括目录下载和 Range 下载功能
- 高效 IO 机制
- 多下载任务的 IO 调度(高 IO 吞吐量)
- 减少文件读写次数:改进临时文件存放方式、文件完整性校验改进
- DMA 读写
- 流式传输
- 客户端下载 Proxy 能力http & https
- 单服务进程启动CS 模式)以及常驻和非常驻模式
- 失败回源处理
- 本地缓存能力(客户端 seeder 模式)
- 客户端优雅升级与部署方案
- 命令执行
#### Framework
- 高可用、高性能、易集成
- 一致性 Hash 算法选主
- 客户端连接管理
[arch]: ../images/arch.png
[association]: ../images/association.png
[download-process]: ../images/download-process.png
[cdn]: ../images/cdn.png