GH GambleHub

Montaj optimizasyonu ve önbelleğe alma

(Bölüm: Teknoloji ve Altyapı)

Kısa özet

IGaming'deki CI/CD hızı, en yüksek yüklerde serbest bırakma oranını, dakika maliyetini ve p99 kararlılığını doğrudan etkiler. Anahtar, doğru önbellekler (bağımlılıklar, artifaktlar, kap katmanları, ara derleme sonuçları), artımlı yapılar ve determinizmdir. "İyi'bir yapı, değişmemiş girdi ile hızla tekrarlanır ve önbellek sakatlığı öngörülebilir ve kontrol edilebilir.


1) Önbellek haritası ve önbelleklediklerimiz

Bağımlılıklar: NPM/pnpm paketleri, pip tekerlekleri/Şiir, Maven/Gradle, Go mods, Kargo kasaları, NuGet.
Ara derleme eserleri: '~/.cache/pip', '~/.m2', '.gradle', '~/.cargo/registry/',' $ GOMODCACHE ',' target/', 'build/',' node _ modules/.pnpm-store '.
Konteyner katmanları: Docker katman önbelleği (BuildKit/GHA önbelleği), kayıt defteri tabanlı önbellek, çok aşamalı.
Araçlar ve SDK'lar: araç zincirleri/mikro görüntüler (JDK, Node, Python, Rustup hedefleri).
Mono/polirepo-meta: Görevler için Nx/Turborepo/Bazel uzaktan önbellek önbelleği (lint/test/build).
Test verileri ve e2e düzeltmeleri: UI paketleri tarafından derlenen veritabanı anlık görüntüleri.
ML/data: hazırlanmış veri setleri, gömmeler, derlenmiş motorlar (TensorRT/ONNX).


2) Hızlı ve öngörülebilir montaj ilkeleri

1. Determinizm: düzeltme sürümleri (lockfiles), pin baz görüntüleri, hermetik eklentiler - tekrarlanabilir çıktı.
2. Idempotence: Aynı montaj - aynı eserler ve karmalar.
3. Artımlılık: yalnızca değiştirileni yeniden oluşturma (DAG/needs/matrix/affected).
4. Lokalite ve "ısı": koşucuların yanındaki/kayıt defterindeki önbellekler, zirvelerden önce ısınır.
5. Açık engellilik: Lockfile/configuration files ve content hash tarafından önbellek anahtarları.
6. Hijyen: TTL/' expire _ in ', otomatik temizleme, önbellek boyutu kontrolü ve eserler.
7. Tedarik zinciri güvenliği: Sırlar için önbellek ≠ çöp; SBOM/Artefact imzası zorunludur.


3) Docker/OCI: yeniden birleştirmeden hızlı görüntüler

Desenler

Çok aşamalı (oluşturucu - çalışma zamanı).
Minimum çalışma süresi (distroless/ubi-micro, sadece gerekli so/ca-certs).
Katman sırası: önce nadiren değiştirme (deps), sonra kod.
'.dockerignore': hariç '.git', testler/fikstürler, yerel önbellekler.
BuildKit: 'cache-from/to' - işler ve dallar arasında paylaşılan önbellek.

Dockerfile örneği (Düğüm + pnpm)

dockerfile syntax=docker/dockerfile:1.7
FROM node:20-bookworm AS deps
WORKDIR /app
COPY pnpm-lock.yaml./
RUN corepack enable && pnpm fetch

FROM node:20-bookworm AS builder
WORKDIR /app
COPY --from=deps /root/.cache/pnpm /root/.cache/pnpm
COPY package.json pnpm-lock.yaml./
RUN corepack enable && pnpm install --offline
COPY..
RUN pnpm build

FROM gcr.io/distroless/nodejs20 AS runtime
WORKDIR /app
COPY --from=builder /app/dist./dist
USER 10001
CMD ["dist/server.js"]

BuildKit в CI (GitHub Eylemleri)

yaml
- uses: docker/setup-buildx-action@v3
- uses: actions/cache@v4 with:
path: /tmp/.buildx-cache key: buildx-${{ github.ref }}-${{ github.sha }}
restore-keys: buildx-${{ github.ref }}-
- uses: docker/build-push-action@v6 with:
push: true tags: ${{ env.IMAGE }}
cache-from: type=gha cache-to: type=gha,mode=max

4) Dil ekosistemleri: ne önbelleğe alınacak ve nasıl

Java/Kotlin (Maven/Gradle)

Uzak önbellek Gradle, eşzamanlılık, isteğe bağlı yapılandırma.
Önbellek anahtarı: hash 'build. gradle [.kts] '+ lockfiles +' gradle-wrapper. Mülkler '.
Oluştur önbellek düğümünü nesne depolamasına/HTTP'ye yayınlayın.
Artımlı derleme ve test pakete göre bölünür.

yaml
GitLab CI cache:
key: gradle-${CI_COMMIT_REF_SLUG}
paths: [.gradle/caches,.gradle/wrapper ]
script:
-./gradlew --build-cache --parallel build

Düğüm noktası. js (npm/pnpm/iplik)

Yerel mağaza önbelleği ('~/.npm', '~/.cache/pnpm'), kilit dosyası anahtarı.
Görevler için Nx/Turborepo uzaktan önbellek (S3/Redis) (tiftik/test/derleme).
'turbo run build --cache-dir = .turbo've monorepos için "etkilenen" mod.

Python (pip/Şiir)

Önbellek tekerlekleri + virtualenv; Anahtar 'requirements tarafından. Kilit'/' şiir. Kilit '.
Tekerleklerin ayrı bir aşamada birleştirilmesi, matrisler arasında yeniden kullanılması.
C uzantıları için - 'pip wheel' + 'auditwheel' oluşturucu görüntüsünde.

Git

Кэш 'GOMODCACHE', 'GOCACHE'; 'GOTOOLCHAIN'/sürümlerini düzeltin.
Adımları bölün: 'go mod indir' - kodun bir kopyası - 'go build'.
Büyük monoraylar için - Bazel/Bazelisk veya bir katman yapısı ile 'mage'.

Pas

'~/.cargo/registry', '~/.cargo/git', 'target/'; sccache (uzak/yerel).
Kargo'daki şubeler arasında önbellek paylaşımı. Kilit '.

C/C + +

Derleyici bayrakları ve SDK sürümlerine göre ccache/sccache + tuşu.
Araç zincirini ayrı bir temel görüntüde çıkarın.


5) Bazel/Nx/Turborepo: görev ve grafik önbellek

Bazel uzak önbellek (HTTP/Bulut) - içerik adreslenebilir; Sıkı sıkılık, kum havuzları.
Nx/Turborepo - görev çıkışlarının önbelleği ve monorepolarda "yalnızca etkilenen" yürütme.
Engellilik: adım girdilerine (dosyalar/bayraklar/değişkenler) bağlıdır.


6) Önbellek engellilik stratejileri

Key = girdilerin karması: lockfiles, derleyici yapılandırmaları, manifestolar.
Hafif sakatlık: 'Restore-keys' (GHA )/önekleri (GLCI).
Hard disability: kritik değişiklikler için ad alanını/tuşunu döndürün.
Katman ayrımı: deps vs kaynaklar - ağır bağımlılıkları kırmadan kodu değiştirin.


7) Artımlı yapılar ve matrisler

DAG/needs: bağımlı jabları paralel olarak çalıştırın, dizileri beklemeyin.
Yollar-filtre - Sadece etkilenen bileşenler için tetikleyin.
Parça testleri: dizinlere/tohumlara göre, süreyi hizalayın.
Sıcak havuz koşucuları: Zirvelerden önce önceden ısıtılmış görüntüler/önbellekler (turnuvalar/kampanyalar).


8) Eserler vs önbellek: ne kadar farklı

Önbellek: yeniden kullanılan girdiler/ara sonuçlar, kirli alan, TTL kısa/orta.
Artifaktlar: son montajlar (görüntüler, ikili dosyalar, grafikler), değiştirilemez, imzalanmış, SBOM ile.
Kurallar: Önbellek agresif bir şekilde temizlenir, eserler serbest bırakma politikasına göre saklanır.


9) Gözlemlenebilirlik, KPI ve FinOps

Metrikler (boru hattı/repo ile):
  • Önbellek isabet oranı (%), Sıcak başlatma vs Soğuk başlatma süresi, aşamaların ortalama/medyan süresi.
  • Boru hattı/iş başına maliyet, önbellek/artefakt boyutu, iş hacmi (iş/saat).
  • Monorepoda "etkilenen-çalışan" payı, değişmeden yeniden inşa (atık).
Uyarılar:
  • Hit-rate eşiğin altına düşer, görüntü oluşturma süresi artar, eserler şişer, SLO kaçırır.

10) Önbellek güvenliği ve tedarik zinciri

Önbellek/eserlerde sır yok; Maske varları, sır taramaları.
Pin SHA harici eylemler/eklentiler, sadece güvenilir koşucular.
Konteynerleri/ikilileri imzalama (cosign), SBOM (CycloneDX/SPDX) ve CD kontrolü.
İzolasyon: 'dev/stage/prod' için ayrı önbellek ad alanı, yabancı şubeler için salt okunur haklar.


11) Pratik şablonlar

GitHub Eylemleri - Dil + Konteyner

yaml name: ci on: [push, pull_request]
concurrency: { group: ${{ github.ref }}, cancel-in-progress: true }
jobs:
build:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4 with: { node-version: '20' }
- uses: actions/cache@v4 with:
path: ~/.cache/pnpm key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
- run: corepack enable && pnpm i --frozen-lockfile
- run: pnpm build
- uses: docker/build-push-action@v6 with:
tags: ${{ env.IMAGE }}
cache-from: type=gha cache-to: type=gha,mode=max

GitLab CI - Gradle uzaktan önbellek

yaml variables:
GRADLE_USER_HOME: ".gradle"
cache:
key: gradle-${CI_COMMIT_REF_SLUG}
paths: [.gradle/wrapper,.gradle/caches ]
build:
stage: build script:
-./gradlew --build-cache --no-daemon build artifacts:
paths: [ "build/libs/.jar" ]
expire_in: 3 days

Jenkins - ccache/sccache

groovy pipeline {
agent { label 'cpp' }
environment { CCACHE_DIR = '/cache/ccache' }
stages {
stage('Build') {
steps {
sh 'ccache -M 10G'
sh 'cmake -B build -S. && cmake --build build -j$(nproc)'
}
}
}
post { always { sh 'ccache -s' } }
}

12) ML/veri: ağır montajları hızlandırmak

Yerel NVMe koşucularındaki modellerin/gömmelerin/veri kümelerinin önbelleği; Karma sürüm oluşturma.
Ön montaj TensorRT/ONNX motorlar serbest eserler olarak; çıkarımda tekrar kullan.
Büyük modeller için chunked eserler (bölünmeler); TTL ve ertelenmiş temizlik.


13) Uygulama kontrol listesi

1. Kilit dosyaları ve temel görüntüler işlemek; BuildKit'i etkinleştir.
2. Ayrı Docker katmanları: deps _ code; '.dockerignore' ekleyin.
3. Uzak önbelleği yükseltin (Gradle/Bazel/Nx/Turbo); bağımlılık proxy başlatın.
4. CI'daki bağımlılık önbelleğini lockfile ile yapılandırın; matrisler ve 'yollar-filtre' içerir.
5. Monorepoda artımlı yapılar ve "yalnızca etkilenenler" girin.
6. Isabet oranını, sıcak/soğuk zamanı, maliyeti ölçün; Uyarı koyun.
7. SBOM/imzayı etkinleştirin, önbellekteki sırları reddedin.
8. Pik sürümlerden önce önbellekleri ısıtın; TTL/retention'u düzenler.
9. Belge önbellek özürlülüğü ve "önbellek bozuk'olarak çalışma kitapları.
10. Düzenli olarak "ebedi" önbellekleri temizleyin ve ağır eserleri arşivleyin.


14) Antipatterns

Deps yüklemeden önce sık sık değişen adımlarla büyük Dockerfile.
Anahtarlar/TTL olmadan paylaşılan "kalıcı" önbellek - pul ve çöp.
Eserler ve önbellek karıştırma; İmza yok/SBOM.
Araçların sıkıştırılmamış sürümleri - "önbellek, ancak tekrarlanmaz".
Her PR'de'herkes için "matrisler; Eşzamanlılık eksikliği. İptal et.
Sıcak önbellek olmadan ve bağımlılık proxy olmadan tek koşucu.


Sonuçlar

Montaj optimizasyonu, önbellek, artımlılık ve determinizm ile sistematik bir çalışmadır. Doğru Dockerfile yapısı, derlemeler için uzaktan önbellek, bağımlılık proxy'si ve engellilik disiplini hızlı, ucuz ve tekrarlanabilir boru hatları sağlar. Gözlemlenebilirlik ve güvenlik kuralları ekleyin - ve sürümleriniz sık, istikrarlı ve ekonomik olacaktır.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.