平台工程实践
平台工程实践
什么是平台工程
平台工程是构建和维护内部开发者平台的实践,旨在提高开发者生产力和用户体验。
核心原则
- 自助服务:开发者可以自主完成常见任务
- 标准化:提供标准化的工具和流程
- 抽象复杂性:隐藏底层基础设施复杂性
- 可观测性:提供统一的监控和日志
平台组件
内部开发者平台
├── 开发者门户
├── CI/CD流水线
├── 基础设施即代码
├── 可观测性平台
├── 安全合规
└── 文档和知识库
Backstage
安装Backstage
# 创建Backstage应用
npx @backstage/create-app@latest my-app
cd my-app
yarn install
yarn dev
组件定义
# catalog-info.yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: myapp
description: My application
annotations:
github.com/project-slug: myorg/myapp
backstage.io/techdocs-ref: dir:.
tags:
- nodejs
- api
links:
- url: https://grafana.example.com/d/myapp
title: Grafana Dashboard
spec:
type: service
lifecycle: production
owner: team-backend
system: myplatform
providesApis: [myapp-api]
内部开发者门户
# 软件目录
apiVersion: backstage.io/v1alpha1
kind: System
metadata:
name: myplatform
description: My platform system
spec:
owner: platform-team
components:
- myapp
- myapi
- mydb
自助服务
# 自助服务目录
apiVersion: backstage.io/v1alpha1
kind: Template
metadata:
name: new-service
title: Create New Service
description: Create a new microservice
spec:
owner: platform-team
type: service
parameters:
- title: Service Information
properties:
name:
title: Service Name
type: string
description:
title: Description
type: string
language:
title: Language
type: string
enum:
- nodejs
- python
- go
steps:
- id: fetch-template
name: Fetch Template
action: fetch:template
input:
url: ./skeleton
- id: create-repo
name: Create Repository
action: github:repo:create
input:
repoName: ${{ parameters.name }}
- id: create-component
name: Create Component
action: catalog:register
input:
repoContentsUrl: ${{ steps.create-repo.output.remoteUrl }}
catalogInfoPath: /catalog-info.yaml
实践:平台架构
# 平台架构
version: '3.8'
services:
# 开发者门户
backstage:
image: backstage/backstage:latest
ports:
- "7007:7007"
volumes:
- ./app-config.yaml:/app/app-config.yaml
# GitOps
argocd:
image: argoproj/argocd:latest
ports:
- "8080:8080"
# 监控
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
# CI/CD
jenkins:
image: jenkins/jenkins:lts
ports:
- "8081:8080"
volumes:
- jenkins_data:/var/jenkins_home
volumes:
jenkins_data:
开发者体验指标
| 指标 | 说明 | 目标 |
|---|---|---|
| 部署频率 | 每天部署次数 | >10次/天 |
| 变更前置时间 | 代码到生产的时间 | <1小时 |
| 恢复时间 | 故障恢复时间 | <1小时 |
| 变更失败率 | 失败部署比例 | <5% |
最佳实践
- 以开发者为中心
- 渐进式采用
- 文档即代码
- 度量和反馈
- 持续改进
总结
平台工程是提高开发者生产力的关键。通过构建内部开发者平台,可以标准化工具和流程,提升整体工程效率。