أساسيات هندسة المنصات

المسارات الذهبية والطرق الممهدة

3 دقيقة للقراءة

تسميها Netflix "الطرق الممهدة". وتسميها Spotify "المسارات الذهبية". المفهوم واحد: طرق موجّهة ومدعومة جيداً لبناء ونشر البرمجيات تجعل الطريق الصحيح هو الطريق السهل.

ما هو المسار الذهبي؟

المسار الذهبي هو سير عمل محدد مسبقاً ومعتمد من المؤسسة يوجه المطورين من الفكرة إلى الإنتاج باستخدام أفضل الممارسات والأدوات المعتمدة وحواجز الحماية الآلية.

الفكرة الرئيسية: يمكن للمطورين الذهاب "خارج الطريق"، لكن المسار الذهبي سهل جداً لدرجة أن معظمهم يختار البقاء عليه.

التطوير خارج الطريق:
┌─────────────────────────────────────────────┐
│  اختيار اللغة → اختيار الإطار →             │
│  إعداد CI/CD → تكوين الأمان →               │
│  النشر في مكان ما → أتمنى أن يعمل           │
│                                             │
│  الوقت: أيام إلى أسابيع                     │
│  الاتساق: منخفض                             │
│  الدعم: "أنت وحدك"                          │
└─────────────────────────────────────────────┘

تطوير المسار الذهبي:
┌─────────────────────────────────────────────┐
│  1. انقر "إنشاء خدمة جديدة"                 │
│  2. اختر القالب (Node.js API، إلخ)          │
│  3. املأ: الاسم، المالك، الوصف               │
│  4. انقر "إنشاء"                            │
│                                             │
│  الوقت: 5 دقائق                             │
│  الاتساق: عالي                              │
│  الدعم: فريق المنصة يدعمك                   │
└─────────────────────────────────────────────┘

مكونات المسار الذهبي

يتضمن المسار الذهبي الكامل:

# تعريف المسار الذهبي
apiVersion: platform.io/v1
kind: GoldenPath
metadata:
  name: nodejs-api-golden-path
spec:

  # ما ينشئه هذا المسار
  output:
    type: "Node.js REST API"
    includes:
      - "هيكل Express.js"
      - "تكوين TypeScript"
      - "إعداد اختبارات Jest"
      - "Dockerfile (بناء متعدد المراحل)"
      - "بيانات Kubernetes"
      - "GitHub Actions CI/CD"
      - "إدخال كتالوج Backstage"

  # التكاملات المكونة مسبقاً
  integrations:
    monitoring:
      - prometheus-metrics
      - opentelemetry-tracing
    security:
      - snyk-scanning
      - trivy-container-scan
    secrets:
      - vault-integration

  # حواجز الحماية (تُطبق تلقائياً)
  guardrails:
    - "لا أسرار في الكود (Gitleaks)"
    - "الصورة الأساسية يجب أن تكون معتمدة"
    - "يجب أن يكون لها نقاط نهاية صحية"
    - "يجب أن يكون لها حدود موارد"

  # التوثيق
  documentation:
    - "دليل البدء"
    - "سجلات قرارات الهندسة"
    - "قوالب كتب التشغيل"

بناء قالب مسار ذهبي

إليك قالب Backstage حقيقي لمسار ذهبي:

# قالب برمجيات Backstage
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: nodejs-api-template
  title: Node.js REST API (المسار الذهبي)
  description: |
    إنشاء Node.js REST API جاهز للإنتاج مع جميع
    تكاملات المنصة مكونة مسبقاً.
  tags:
    - nodejs
    - api
    - golden-path
spec:
  owner: platform-team
  type: service

  parameters:
    - title: معلومات الخدمة
      required:
        - name
        - owner
      properties:
        name:
          title: اسم الخدمة
          type: string
          pattern: "^[a-z0-9-]+$"
          description: "أحرف صغيرة، أبجدية رقمية مع شرطات"
        owner:
          title: المالك
          type: string
          ui:field: OwnerPicker
        description:
          title: الوصف
          type: string

    - title: البنية التحتية
      properties:
        database:
          title: هل تحتاج قاعدة بيانات؟
          type: boolean
          default: false
        databaseType:
          title: نوع قاعدة البيانات
          type: string
          enum:
            - postgresql
            - mysql
          ui:options:
            hidden: "{{ not parameters.database }}"

  steps:
    # الخطوة 1: جلب هيكل القالب
    - id: fetch-base
      name: جلب القالب الأساسي
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}

    # الخطوة 2: إنشاء مستودع GitHub
    - id: publish
      name: إنشاء المستودع
      action: publish:github
      input:
        repoUrl: github.com?owner=acme&repo=${{ parameters.name }}
        defaultBranch: main

    # الخطوة 3: التسجيل في الكتالوج
    - id: register
      name: التسجيل في الكتالوج
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

    # الخطوة 4: توفير قاعدة البيانات إذا لزم الأمر
    - id: provision-db
      name: توفير قاعدة البيانات
      if: ${{ parameters.database }}
      action: crossplane:create-claim
      input:
        claimType: AppDatabase
        claimName: ${{ parameters.name }}-db
        parameters:
          engine: ${{ parameters.databaseType }}
          size: small

  output:
    links:
      - title: المستودع
        url: ${{ steps.publish.output.remoteUrl }}
      - title: الخدمة في الكتالوج
        url: ${{ steps.register.output.entityRef }}

شجرة قرارات المسار الذهبي

ساعد المطورين في اختيار المسار الصحيح:

                  ┌──────────────────┐
                  │ ماذا تبني؟       │
                  │                  │
                  └────────┬─────────┘
           ┌───────────────┼───────────────┐
           ▼               ▼               ▼
    ┌──────────┐    ┌──────────┐    ┌──────────┐
    │ REST API │    │ واجهة   │    │ عامل    │
    └────┬─────┘    └────┬─────┘    └────┬─────┘
         │               │               │
    ┌────▼────┐     ┌────▼────┐    ┌────▼────┐
    │ Node.js │     │ React   │    │ Python  │
    │ أو Go?  │     │ أو Vue? │    │ أو Go?  │
    └────┬────┘     └────┬────┘    └────┬────┘
         │               │               │
         ▼               ▼               ▼
   [nodejs-api]    [react-app]    [python-worker]
   قالب            قالب           قالب

قياس نجاح المسار الذهبي

تتبع التبني والرضا:

# مقاييس المسار الذهبي
metrics:

  adoption:
    - name: "معدل استخدام القوالب"
      query: |
        count(services where template != null) /
        count(all_services) * 100
      target: "> 90%"

    - name: "الخدمات خارج المسار"
      query: "count(services where template == null)"
      target: "< 10%"

  efficiency:
    - name: "الوقت للنشر الأول"
      golden_path: "< ساعة واحدة"
      off_path: "3-5 أيام"

    - name: "وقت الإعداد"
      golden_path: "< يوم واحد"
      off_path: "2-4 أسابيع"

  quality:
    - name: "معدل نجاح فحص الأمان"
      golden_path: "99%"
      off_path: "75%"

    - name: "معدل الحوادث"
      golden_path: "أقل 2x"
      description: "مقارنة بالخدمات خارج المسار"

مبدأ "المسار السهل = المسار الصحيح"

الهدف هو جعل اتباع أفضل الممارسات أسهل من عدم اتباعها:

الجانب خارج المسار (صعب) المسار الذهبي (سهل)
إعداد CI/CD تكوين من الصفر مكون مسبقاً
فحص الأمان تكامل يدوي تلقائي
المراقبة إيجاد الأدوات، التكوين مدمج
التوثيق كتابة من الصفر مُولّد
النشر اكتشاف K8s نقرة واحدة

"اجعل حفرة النجاح هي الافتراضي."

في الوحدة التالية، سنغوص في Backstage—أشهر بوابة مطورين لبناء هذه المسارات الذهبية. :::

اختبار

اختبار الوحدة 1: أساسيات هندسة المنصات

خذ الاختبار