← 返回首页
🏗️

平台工程实践

📂 devops ⏱ 2 min 254 words

平台工程实践

什么是平台工程

平台工程是构建和维护内部开发者平台的实践,旨在提高开发者生产力和用户体验。

核心原则

  1. 自助服务:开发者可以自主完成常见任务
  2. 标准化:提供标准化的工具和流程
  3. 抽象复杂性:隐藏底层基础设施复杂性
  4. 可观测性:提供统一的监控和日志

平台组件

内部开发者平台
├── 开发者门户
├── 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%

最佳实践

  1. 以开发者为中心
  2. 渐进式采用
  3. 文档即代码
  4. 度量和反馈
  5. 持续改进

总结

平台工程是提高开发者生产力的关键。通过构建内部开发者平台,可以标准化工具和流程,提升整体工程效率。