# 平台设计

    平台设计平台设计

    # 租户(组织)

    平台采用多租户架构设计,平台层面的所有资源对象全部关联上租户 ID,实现严格的租户隔离。一个租户推荐设置为一个组织。

    # 创建组织

    当前不是任何人都可以创建组织(马上会开放个人组织的创建),目前组织的创建需要联系平台超级管理员来完成。

    创建入口:超级管理员管理页面 -> 创建组织

    然后按提示输入组织名称等信息即可。

    有了组织后,首先应该做的事情是:组织管理员将自己组织内的相关用户添加为组织成员。组织成员的添加入口位于:

    管理中心 -> 组织设置 -> 通用设置 -> 组织成员

    # 受邀加入组织

    除了组织管理员手动添加用户以外,组织管理员还可以通过发送邀请链接的方式让用户自己注册并加入到组织,已注册的用户点击后直接可以加入到组织。

    邀请码获取路口:管理中心 -> 组织设置 -> 通用设置 -> 组织成员 -> 邀请

    点击邀请按钮后会生成类似以下链接

    加入组织邀请加入组织邀请

    注意:链接的有效期只有24小时,24小时之后会自动失效

    # 公开组织浏览

    在没有加入到任何组织的时候,可以选择公开组织进行浏览

    # 集群

    集群 (Cluster) 是一个由多台物理机或虚拟机组成的有机整体,是一个由 Kubernetes + Docker 组建的集群。集群主要用于资源的管理和服务的部署运行。

    一个集群内的所有节点(也就是主机)的网络是互通的,集群与集群之间的网络是相互隔离的。每一个集群由三种类型的节点(主机)组成,分别是 Master 节点、LB 节点和 Worker 节点。Master 节点负责整个集群的高可用管控,一般是 3 个节点;LB 节点是集群的访问流量入口,一般为 2 节点,LB 需要外网 IP 地址能够被用户访问;Worker 节点用于部署应用服务,节点数按需规划即可。

    一个集群除了需要安装有 Kubernetes + Docker 以外,还需要安装平台提供的 Agent 程序,用于监控相关数据的采集。

    集群属于企业的一种资源,集群需要被添加到企业内才能够使用。任何一个企业都可以拥有任意多个集群,比如:企业可以创建两个集群,一个集群用于应用的开发测试,另外一个集群用于应用的生产部署。

    # 项目和应用

    项目 (Project) 是研发运维的主要对象,一个项目就是多个应用的集合,在项目内包含了丰富的管理功能。应用 (Application) 是研发运维的最小单元,在应用内包含有应用的代码仓库、流水线等一系列 DevOps 工具。

    # 加入到项目

    平台对于项目成员是受邀机制,所以加入到项目需要项目管理员的受邀,项目管理员邀请项目成员的方式有两种:

    • 手动添加项目成员
    • 发送邀请链接,让成员加入到项目

    入口:组织 -> DevOps 平台 -> 项目 -> 项目设置 -> 项目成员

    # 业务应用

    业务应用主要是指处理某一类业务流程的微服务组合,比如会员管理的业务应用。

    应用分为多种类型,可根据具体的开发任务创建不同类型的应用。

    # 库应用

    库应用实际上就是一段编译好的二进制代码产物,可以在其他应用中被调用使用,比如一个人脸识别库,用户可以下载库然后根据库对接使用说明文档进行使用。

    # 移动应用

    移动应用主要是指移动 App 客户端,平台包含了移动应用开发商和证书管理的同时,还覆盖了代码构建、发布、上架、市场的全链路。

    # 环境

    环境 (Environment) 是应用的一个逻辑概念,每个应用拥有开发、测试、预发和生产四大环境。四个环境可以被设置共享一个集群,也可以分别设置一个独立的集群。如果资源预算充足的情况下,推荐每个环境独占一个集群,至少生产环境应该独占一个集群。

    WARNING

    不是所有类型的应用都拥有环境,那些不需要部署运行的应用就没有环境,比如:库应用。

    # 服务和 Runtime

    服务 (Service) 一般就是一个单体的进程,比如:一个 Java 进程,一个 PHP 进程。一个应用可能是一个单体服务,也可能拥有多个服务。

    TIP

    此处的服务 (Service) 不等同于 Kubernetes 的 Service,它们之间没有任何关系,只是刚好名字相同罢了。

    Runtime 就是一个应用部署后,所有服务的集合,也可以称为应用的运行实体。任何一个应用都可以被部署多份, 也即是多个 Runtime。

    # 容器

    容器就是 Linux Container,也是 docker 容器。一个服务进程一般运行在一个容器内,一个容器也称为服务的一个实例。为了高可用,服务通常会运行多个实例。

    # 角色和权限

    企业内的任何一个成员用户,都至少拥有一个角色,也可以同时拥有多个角色,不同的角色对应了不同的权限。

    TIP

    任何一个用户都可以被添加成多个企业的成员;也即是一个用户可以拥有多个企业。

    # 系统管理员

    系统管理员是整个系统的超级管理员,拥有企业管理的权限,覆盖企业的创建、编辑、删除、企业管理员追加和降级的权限。

    # 企业管理员

    企业管理员拥有企业内所有的访问和操作权限,是企业内的最高权限角色。将用户添加成企业成员、集群管理、创建项目等操作只有企业管理员才能够完成。

    # 企业研发工程师

    企业研发工程师主要是指参与项目管理、开发、测试等工作中的成员,企业研发工程师有权限访问 DevOps 平台和微服务治理平台,但是具体能够访问的项目取决于该成员在具体项目的角色权限。

    # 企业运维工程师

    企业运维工程师主要是维护管理企业中所有计算资源、服务、任务、中间件、运维告警等。

    具体权限有:

    • 集群添加、编辑、上下线、删除
    • 云资源管理( 包含云主机、网络、存储、云 addon 等管理)
    • 企业内所有服务、任务、addon 运维监控
    • 企业告警规则设置和告警消息查看
    • 运维报告管理和查看
    • 云账号追加、删除管理

    # 企业技术支持

    企业技术支持角色主要是用于解决定位平台自身问题所设,所以该角色能够查看所有功能,除企业工单系统外其他功能只有只读权限。

    # 企业数据管理员

    企业数据管理员拥有快数据平台中数据相关的管理权限,无其他企业项目开发和管理的权限

    # 企业数据开发工程师

    企业数据开发工程师能够基于快数据平台进行数据开发相关工作,目前拥有快数据平台中所有的权限

    # 项目所有者

    项目所有者是拥有项目最高权限的成员,项目所有者最多只有5位。

    TIP

    一个用户可以同时是多个项目的成员,甚至管理员。

    # 项目经理

    项目经理为项目的主要管理人员,为项目成本、质量、计划负责,其权限局限在项目内,不能跨项目使用。

    具体权限有:

    • 应用创建、编辑、删除
    • 迭代计划的创建、编辑、删除
    • 项目成员的添加、删除
    • 项目成员角色的分配
    • 项目设置管理权限
    • 项目 addon 的创建、删除

    # 项目主管

    项目主管在项目主要负责任务拆分和开发工程师任务的分配,为研发过程进度和质量负责。

    具体权限有:

    • 需求、任务、缺陷的管理
    • 任务工时的评估和人员分配
    • 项目成员的管理
    • 项目设置管理权限

    # 产品经理

    产品经理主要负责项目整体需求管理和迭代规划的管理。

    具体权限有:

    • 待办需求中需求的追加、编辑、删除

    # 项目开发工程师

    项目开发工程师是项目中具体任务的研发人员,在项目中主要为自己相关的需求、任务、缺陷负责。

    # 项目测试工程师

    项目测试工程师为项目的质量负责,在项目主要负责测试用例、测试计划以及测试实施工作。

    具体权限有:

    • 项目测试用例的管理
    • 项目测试计划的管理

    # 应用所有者

    应用管理员具有应用的最高管理权限,覆盖应用内所有的访问和操作权限,应用的四大环境( 开发、测试、预发、生产 )都可以被应用所有者访问和操作。

    # 应用主管

    应用主管是应用主要管理成员,和应用所有者相比,拥有除应用删除以外的所有功能,

    具体权限有:

    • 应用成员的添加、删除
    • 应用成员角色的分配
    • 应用修改和设置
    • 应用的删除
    • 应用所有代码分支的管理权限
    • 开发、测试、预发、生产环境的操作权限

    # 应用开发工程师

    是指具体应用的开发工程师,其权限有效范围只局限在应用内,跨应用无效,主要的职责是应用具体功能的开发工作。

    具体权限有:

    • 拥有代码仓库中开发、问题修复的分支管理权限( Feautre 和 Hotfix )
    • 开发和测试环境的操作权限

    # 应用测试工程师

    应用测试工程师在应用中主要有测试环境部署、下线的权限,具体代码仓库的操作权限取决于仓库保护规则。

    # 项目报告者 (Reporter)

    项目报告者主要是针对项目产品的外部客户或者项目关注人员,该角色在使用这个项目产品的时候,可以通过项目工单来提出相关产品 bug 、产品改善建议以及产品疑问咨询等方面的问题。