1 项目概述
1.1 背景介绍及目标
存储服务部署包(program)以及 Faas 函数
1.2 名词说明
1.3 Roadmap
2 需求分析
需求分析重点是需求
2.1 功能需求
管理及存储 program 包(包含关联关系,默认配置,程序管理脚本等)
2.2 非功能需求
2.3 调研
2.3.1 helm
Helm 是 Kubernetes 的包管理器,类似于 Python 的 pip,centos 的 yum,主要用来管理 Charts。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
Helm:一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
Chart:一个 Helm 包,采用 TAR 格式。其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。
Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
Repository:用于发布和存储 Chart 的存储库。
chart到release的过程:
2.3.2 OSP
meta.yaml
Program 的 meta.yaml 文件描述了 Program 的元信息。
name 表示 program 的名字,Program 提交到平台时的 program name 需要与 meta.yaml 文件中的 name 保持一致(否则无法提交 program)。
requires 和 provides 描述的是关联关系的接口和名称,requires 和 provides 都不是必写的(如果没有相关关联关系则不用填写)
program 之间的 require 与 provide 相对应,拥有相同 interface 的 require 和 provide 可以建立关联。
requires 和 provides 中的 name 字段用于区分同一个 program 中多个不同的关联关系,会与具体的 hooks 名称对应。
ports 部分表示 Program 需要用到的端口名称,平台在创建 container 时会为每个端口名分配端口,通过 osp agent 工具 unit-get 可以跟进端口名获取端口(用于配置替换,在配置部分会详述)。
logrotate 部分表示 logrotate 的日志配置部分,每一行配置需要切分日志的绝对路径和日志保留天数(指定单个文件或者路径都是支持的)。control_cmd 表示切分日志之后执行的后置命令,对于 mv 走日志文件不释放文件句柄的程序,如 nginx,需要配置后置命令重新加载程序,释放文件句柄。日志每小时切一次,osp、omp、的日志默认保留 6 天。
bns: 平台会为每个 service 创建 bns 节点,program 中的 bns 信息就是包括需要注册到 bns 节点上的信息。
例如在 bns:ports 里填写了 main 端口是 port,stats 端口是 stats_port,那么在创建 bns 节点时将每个 unit 的 port 端口作为 bns 的 main 端口,stats_port 端口作为 bns 的 stats 端口。
config.yaml
平台支持服务的配置管理更新功能,Program 中的 config.yaml 描述了服务可以更改的配置项,包括配置项的名称、描述、类型和默认值。可够修改的配置项是service 粒度的(即配置项的值修改对于 service 下的所有 unit 都生效),service 创建时获取到配置项的默认值。
hooks
通过环境变量传递给 hook
数据模型
2.3.3 Redis 平台
agent 中集成了 install-redis、install-twemproxy 命令,仅用于安装时使用
2.3.4 SCS 平台
deploy 和 upgrade 放在一个接口里,根据参数区分是 deploy 还是 upgrade,逻辑相对比较重
3 总体设计
3.1 系统架构
3.1.1 创建 program, 生成配置模板
1> 存储 program
2> 存储 program 配置
3.1.2 关联 program, 生成初始配置
创建 service 时关联 program
3.1.3 使用 program, 拉取配置
创建 unit 时根据 service 配置的 program 进行部署
3.1.4 变更配置
变更 service 配置,service 通知 unit 进行拉取最新配置
3.2 模块简介
架构图中如果有很多模块,需要对各个模块的功能进行简要介绍;
3.3 设计与折衷
设计与折衷是总体设计中最重要的部分;
3.4 潜在风险
4 详细设计
详细设计重点在“详细”
4.1 模块 xx
(有了数据库+接口+流程,别的同学拿到详设文档,基本也能够搞定了)
4.1.1 交互流程
简要的交互可用文字说明,复杂的交互建议使用流程图,交互图或其他图形进行说明
4.1.2 数据库设计
4.1.3 接口形式
Last updated