怎样设计一个企业级的PaaS平台?

Tags: 系统设计 

目录

设计目标

为一家拥有数家子公司的大型集团设计一套PaaS平台,每家子公司按需购买服务。

设计思路

应用模版和镜像是项目的研发成果,研发人员可以将其发布到企业私有应用商店和私有镜像中心,在企业内部共享。企业可以将其发布到平台公有应用商店和公有镜像中心,在企业间共享。(免费,也可以收费)

研发人员只能使用自己开发的应用和镜像、企业私有应用商店中的应用、私有镜像中心的镜像。想要使用外部的应用和镜像,必须向企业管理员申请,由企业管理员将其加入到企业私有应用商店和私有镜像中心。

开发、测试、发布过程中的自动化过程,全部通过workflow实现,workflow可以灵活定制。

集团在控制台系统上操作,以区为单位统一管理所有的物理资源,一个区是一个独立的集群,区与区之间是完全割裂的,所有的区都可以连接到控制台。

需要跨区共享的服务例如数据库等设计成独立的系统。

平台管理员管理平台资源、开通企业账号。企业管理员管理企业资源、创建项目组,项目组可以在多个区申请资源。

角色说明

平台管理员:平台的管理员帐号。

企业管理员:向平台申请开通的企业帐号。

用户: 企业管理员创建的企业子账号。

平台公有镜像中心

平台管理员管理,镜像命名格式:

"企业名/项目名/镜像:TAG"

镜像全部是平台管理员、经过平台管理员审核的企业管理员提交的。

平台管理员:

审批、上线、更新、下线镜像。

企业管理员:

采购镜像,即将镜像添加到企业私有的镜像中心
向平台公有镜像中心提交企业私有镜像中心中的镜像。

用户:

向企业管理员申请采购镜像

平台公有应用商店

平台管理员管理,应用模版的命名格式:

"企业名/项目名/应用名:版本号"

应用模版都是由平台管理员和企业管理员发布的。

平台管理员:

审核、上线、更新、下线应用模版。

企业管理员:

采购应用模版,即将应用模版添加到企业的私有商店,供内部使用。
向平台公有应用商店提交企业私有应用商店中的应用模版。

用户:

向企业管理员申请采购应用模版

企业私有镜像中心

企业管理员管理,只对公司内部开放,镜像按照项目分组,命名格式:

"项目名/镜像:TAG"

企业管理员:

审核、上线、更新、下线镜像
向平台公有镜像中心提交企业私有镜像中心中的镜像。

用户:

在应用模版中引用企业私有镜像中心的镜像
向企业私有镜像中心提交项目中的镜像

镜像都是由企业管理员采购、企业管理员提交、或经过了企业管理员审批的企业内部用户提交的。

企业管理员采购、企业管理员提交的镜像被划分在默认项目中。

提交到平台公有镜像中心的镜像将按照”企业名/项目名/镜像:TAG”的格式命名。

企业私有应用商店

企业管理员管理,只对公司内部开放,应用模版按照项目分组,命名格式:

"项目/应用名:版本"

企业管理员:

审核、上线、更新、下线应用模版。
向平台公有应用商店提交企业私有应用商店中的应用模版。

用户:

使用企业私有应用商店中的应用模版创建应用
向企业私有应用商店提交项目中的应用模版。

应用模版都是由企业管理员采购、企业管理员提交、或经过了企业管理员审批的企业内部用户提交的。

企业管理员采购、企业管理员提交的应用模版被划分在默认项目中。

提交到平台公有商店中的应用将按照”企业名/项目名/应用名:版本号”的格式命名。

是否允许企业管理员创建多个私有应用商店?
    - 暂时只允许创建1个

是否允许企业管理员对外开放应用商店?
    - 不允许,应用模版必须发布到平台公有应用商店

企业项目管理

企业内部的资源以项目为单位进行分配管理,项目命名格式:

项目名

企业内部项目不允许重名。

权限说明:

平台管理员对所有项目拥有所有权限。

企业管理员对所在企业的所有项目拥有所有权限。

担任项目管理员的用户对自己所管理的、并且未被锁定或冻结的项目拥有全部权限。

作为项目成员的用户具有自己所在的项目小组分配到权限。

一个项目的组成:

项目管理员
项目小组(研发、测试、运维等)
项目小组权限
项目小组成员
项目应用模版
项目代码库
项目镜像
项目WorkFlow
开发环境
测试环境
生产环境

一个项目的生命周期:

1. 用户申请项目(给出预估的资源上限)
2. 企业管理员审批通过
3. 申请人自动成为项目管理员
4. 项目管理员创建项目小组(研发、测试、运维等)
5. 项目管理员为项目小组分配权限
6. 项目管理员为项目小组添加成员
7. 项目架构师(项目成员推举)创建项目的应用模版
8. 项目架构师按照应用模版,创建多个的代码库
9. 项目成员在代码库中贡献代码
10. 项目架构师创建项目的多个WorkFlow(自动构建、发布到研发环境、测试环境、生产环境等)
11. 项目架构师创建项目的告警策略、通知方式、鲁棒性策略(自动重启、自动扩容等)
12. 项目应用的访问量超出预期,项目管理员向企业管理员申请提高项目资源上限
13. 项目架构师发现参数配置不合理,更新应用模版,触发对应的WorkFlow,完成更新。
14. 项目新版本发布,项目架构师更新应用模版,触发对应的WorkFlow,完成更新。
15. 项目管理员岗位调动,企业管理员指定新的项目管理员
16. 项目成员岗位调动,项目管理员将其移出项目
17. 遇到突发事件,企业管理员锁定项目,项目成员不能再做任何改动
18. 项目下线,项目管理员向企业管理员申请解散项目
19. 企业管理员将申请解散的项目冻结(释放运行时资源,保留静态资源,不再允许改动)
20. 项目重启,企业管理员解冻项目,指定新的项目管理员。

项目间成果共享(应用模版的共享):

1. 项目管理员向企业管理员申请将项目的应用模版发布到企业私有应用商店
2. 企业管理员批准项目管理员的发布申请
3. 其它项目组在企业的私有应用商店中发现了该应用模版,直接用来在自己的项目中创建应用

企业间成果共享(应用模版的共享):

1. 企业管理员向平台管理员申请将企业私有应用商店中的应用模版发布到平台公有应用商店
2. 平台管理员批准了企业管理员的申请
3. 其他公司的用户在平台公有应用商店中发现了该应用模版,向所属企业的企业管理员发出采购申请
4. 其他公司的企业管理员完成采购
5. 其他公司的用户在所属企业的私有应用商店中发现了该应用模版,直接用来在自己的项目中创建应用

发布应用模版时,应用模版中的镜像会一同发布到对应的镜像中心,应用模版中的镜像名同时被替换。

镜像的共享过程与应用模版的共享过程类似,只需把应用模版替换成镜像,把应用商店替换成镜像中心。

分类索引

“企业项目管理”包含了这一节中的所有内容,这里单独列出来,一是为了厘清关系,二是考虑到将下面的内容展现在界面上后,用户可以快速地找到要查看的内容。

权限说明与“企业项目管理”中的权限说明一致:

平台管理员对所有项目拥有所有权限。

企业管理员对所在企业的所有项目拥有所有权限。

担任项目管理员的用户对自己所管理的、并且未被锁定或冻结的项目拥有全部权限。

作为项目成员的用户具有自己所在的项目小组分配到权限。

项目小组

项目小组按照项目划分,命名格式:

"项目名/小组名"

应用模版

按照项目进行分组,命名格式:

"项目名/应用名:版本号"

由企业管理员采购、企业管理员提交的应用模版位于默认项目组。

代码库

代码仓库按照项目进行分组,命名格式:

"项目名/代码库"

镜像仓库

镜像按照项目进行分组,命名格式:

"项目名/镜像:TAG"

由企业管理员采购、企业管理员提交的镜像位于默认项目组。

WorkFlow

企业的WorkFlow,按照项目进行分组,命名格式:

"项目名/WorkFlow:版本"

研发环境

研发环境中运行的应用:

"项目名/应用名:应用模版:模版版本"

应用模版可能是项目的应用模版,也可能是企业私有应用商店中的模版。

测试环境

测试环境中运行的应用:

"项目名/应用名:应用模版:模版版本"

应用模版可能是项目的应用模版,也可能是企业私有应用商店中的模版。

生产环境

生产环境中运行的应用:

"项目名/应用名:应用模版:模版版本"

应用模版可能是项目的应用模版,也可能是企业私有应用商店中的模版。


系统设计

  1. 各大云厂商的 API 设计风格
  2. Google 是如何实践 RESTful API 设计的?
  3. Netflix 的异地多活设计: Active-Active for Multi-Regional Resiliency
  4. Facebook 的缓存系统实践经验《Scaling Memcache at Facebook》
  5. 多机数据系统的正确性与一致性
  6. 《大型网站技术架构: 核心原理与案例分析》阅读摘录
  7. 《分布式金融架构课》阅读笔记2: 线性一致的分布式数据系统的实现过程
  8. 《分布式金融架构课》阅读笔记1: 单机&多机并发/多副本读写正确性和一致性
  9. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  10. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  11. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  12. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  13. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  14. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  15. 《MySQL实战45讲》阅读笔记: 索引类型/数据可靠性/事务/间隙锁/临时表等
  16. 系统性能分析方法论: 统计图谱工具
  17. 张磊《深入剖析Kubernetes》专栏的阅读笔记
  18. 代理服务软件haproxy、nginx、envoy对比,以及开源的API网关项目对比
  19. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义
  20. 阿里巴巴的应用限流和服务降级是怎样实现的?|如何打造平台稳定能力
  21. 陈皓《左耳听风》专栏的阅读笔记(持续更新)
  22. 好雨云帮,一款不错的国产开源PaaS
  23. 怎样为软件的不同版本命名?
  24. 怎样选择开源项目的license?
  25. Glusterfs的架构
  26. 怎样设计一个企业级的PaaS平台?
  27. 几种常见的LDAP系统
  28. DNS SRV介绍(一种用DNS做服务发现的方法)
  29. DNS,DNS-Domain Name System
  30. 思科的网络设备
  31. 虚拟化技术汇总
  32. 认证与授权系统的汇总
  33. 高可用实现方法汇总
  34. 编译器汇总
  35. Linux系统的优化方法
  36. CentOS7的一些变化
  37. 分布式系统的一些知识
  38. 计算机编程语言的特性汇总
  39. 网络通信的一些基础知识
  40. PCIE总线的一些知识
  41. 操作系统的API
  42. 网卡的一些知识
  43. Linux系统的构建过程
  44. 数据结构与算法
  45. CPU的相关知识

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球