总体架构
<p>我们的平台工程建设之路,介绍前期方案设计、中间踩坑历程。</p>
<h2 id="原则">原则</h2>
<p>分享我们平台工程建设的一些基本原则。</p>
<ol>
<li>以开发者为中心:赋能开发者,了解困难,解决问题,让开发者生活更轻松。</li>
<li>自动化:自动化手动和重复性任务,减少人为错误,提高效率。</li>
<li>标准化:标准化保持一致性,减少复杂性,减少团队认知负载,提供最佳实践和统一的编码结构。</li>
<li>模块化:松耦合且独立的模块,可独立开发、测试和部署。</li>
<li>弹性:可扩展水平扩缩容的能力,以及容错抗脆弱的能力。</li>
<li>安全:相比于微服务、云原生领域的安全,在平台工程里,更强调代码、基础设施、数据和其他资源的安全。</li>
<li>协作:平台工程师、开发人员、运维运营人员以及其他参与者之间的协作,提高生产力、促进创新并创造积极包容的工作环境。</li>
<li>持续改进:持续性反馈、评估、改进。</li>
</ol>
<h2 id="架构概述">架构概述</h2>
<p>为便于理解,我们仍然按照惯用架构模型,将架构分为 IaaS、CaaS、PaaS、Applications 这几个层级。</p>
<p>专业的运维人员作为 platform engineer 着重于 IaaS、CaaS、PaaS 建设,开发人员作为 application engineer 更专注于 PaaS、Applications 建设,为开发和运维提供工具、协作平台、基础应用。</p>
<pre class="mermaid">
C4Context
title 平台工程总体架构
Boundary(users, "Users", "用户接入") {
Person(superAdmin, "超级管理员")
Person(admin, "平台管理员")
Person(developer, "开发人员")
Person(maintenance, "运维人员")
}
Boundary(console, "Console", "开发者平台") {
Container(backstage, "Backstage","react","开发者门户")
Container(apps, "应用管理平台","Application","容器管理、应用管理、配置管理、自动化测试")
Container(ops, "统一运维平台","x-ops","数据库、中间件、日志、监控告警平台")
Container(iam, "IAM", "Keycloak", "统一用户、组织、角色权限管理")
}
Boundary(paas, "PaaS", "PaaS") {
ContainerDb(rds, "RDS", "PostgreSQL/MySQL", "PostgreSQL、MySQL 等关系型数据库")
ContainerDb(clickhouse, "ClickHouse", "ClickHouse", "BI、Logging、Metrics 等列式数据库")
ContainerDb(nosql, "NoSQL", "NoSQL", "ES、Redis、Mongo 等缓存数据库、文档数据库")
ContainerDb(mq, "消息队列", "Kafka", "Kafka、RocketMQ 等消息队列")
}
Boundary(caas, "CaaS", "CaaS") {
Container(k8s, "Kubernetes","k8s","K8S 容器平台")
Container(workflow, "编排引擎","Argo","流水线,流程、应用编排引擎")
Container(kms, "KMS","HashiCorp Vault","秘钥管理系统")
Container(harbor, "Harbor","harbor","容器镜像仓库")
Container(git, "IaC","GitLab","IaC、GitOps 源码仓库")
}
Boundary(iaas, "IaaS", "IaaS") {
Container(vm, "云主机","vm","云主机自带本地存储")
Container(cbh, "堡垒机","cbh","安全运维审计堡垒机")
Container(s3, "S3","S3/Minio","分布式对象存储")
Container(nfs, "NFS","nfs","共享文件存储")
}
UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="1")
</pre>
<h2 id="基础设施标准化">基础设施标准化</h2>
<p>基础设施标准化是平台工程建设的第一步,通过对基础设施服务进行标准化,减少开发人员和运维团队之间的摩擦,减少运维难度,大大降低出错的概率。</p>