GH GambleHub

Yığma və caching optimallaşdırılması

(Bölmə: Texnologiya və Infrastruktur)

Qısa xülasə

iGaming-də CI/CD sürəti buraxılış sürətinə, dəqiqə dəyərinə və p99-un ən yüksək yüklərə davamlılığına birbaşa təsir edir. Açar - düzgün keşlər (asılılıqlar, artefaktlar, konteyner təbəqələri, aralıq kompilyasiya nəticələri), inkremental yığımlar və determinasiya. «Yaxşı» montaj dəyişməz giriş ilə tez təkrarlanır və keş-əlillik proqnozlaşdırıla və nəzarət edilə bilər.


1) Cache kartı və biz cache nə

Asılılıq: NPM/pnpm paketləri, pip wheels/Poetry, Maven/Gradle, Moda Go, Cargo crates, NuGet.
Ara kompilyasiya artefaktları: '~/.cache/pip', '~/.m2', '.gradle', '~/.cargo/registry/',' $GOMODCACHE ',' target/', 'build/',' node _ modules/.pnpm-store '.
Konteyner qatları: Docker layer cache (BuildKit/GHA cache), registry-based cache, multi-stage.
Alətlər və SDK: toolchains/mikroblular (JDK, Node, Python, Rustup targets).
Mono/poliepo meta: tapşırıqlar üçün Nx/Turborepo/Bazel remote-cache cache (lint/test/build).
Test məlumatları və e2e fiksturları: UI bandlları ilə tərtib edilmiş DB snepshotları.
ML/data: hazırlanmış datasetlər, embeddinqlər, kompilyasiya edilmiş mühərriklər (TensorRT/ONNX).


2) Sürətli və proqnozlaşdırıla bilən montaj prinsipləri

1. Determinision: versiyalar (lockfiles), pin əsas şəkillər, hermetic plugins → playback çıxış.
2. İdempotentlik: eyni montaj → eyni artefaktlar və hash.
3. İnkrementallıq: yalnız dəyişmiş (DAG/needs/matrix/affected).
4. Lokallıq və «istilik»: rannerlərin yanında/reyestrdə caches, zirvələrdən əvvəl istiləşmə.
5. Açıq əlillik: lockfile/konfiqurasiya faylları və məzmun hash üçün cache açarları.
6. Gigiyena: TTL/' expire _ in ', avtomatik təmizləmə, cache və artefaktların ölçüsünə nəzarət.
7. Təchizat zəncirinin təhlükəsizliyi: gizli üçün cache ≠ zibil qutusu; SBOM/artefaktların imzası məcburi olaraq qalır.


3) Docker/OCI: rebound olmadan sürətli görüntülər

Nümunələr

Multi-stage (builder → runtime).
Minimum runtime (distroless/ubi-micro, yalnız istədiyiniz so/ca-sertifikatlar).
Layların qaydası: əvvəlcə nadir dəyişən (deps), sonra kod.
'.dockerignore': '.git', testlər/fikstürlər, yerli caches istisna edin.
BuildKit: 'cache-from/to' → cob və budaqlar arasında ümumi cache.

Dockerfile nümunəsi (Node + 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 Actions)

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 ekosistemləri: nəyi keşləşdirmək və necə

Java/Kotlin (Maven/Gradle)

Remote cache Gradle, paralellik, konfiqurasiya-tələb.
Cache açarı: hash 'build. gradle[.kts]` + lockfiles + `gradle-wrapper. properties`.
build cache node-in obyekt storage/HTTP-də yayımlanması.
Paketlərdə inkremental kompilyasiya və test-split.

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

Node. js (npm/pnpm/yarn)

Lokal store cache ('~/.npm', '~/.cache/pnpm'), lockfile açarı.
Nx/Turborepo remote-cache (S3/Redis) tapşırıqlar üçün (lint/test/build).
'turbo run build --cache-dir = .turbo' və «affected» - monorepo rejimi.

Python (pip/Poetry)

Cache wheels + virtualenv; açar 'requirements. lock`/`poetry. lock`.
Ayrı bir mərhələdə təkərlərin montajı, matrislər arasında yenidən istifadə.
C uzantıları üçün - 'pip wheel' + 'auditwheel' builder-obrazında.

Go

Кэш `GOMODCACHE`, `GOCACHE`; 'GOTOOLCHAIN '/versiyası qeyd edin.
Addımları paylaşın: 'go mod download' → kodun surəti → 'go build'.
Böyük monoreplər üçün - Bazel/Bazelisk və ya laylı bild ilə 'mage'.

Rust

`~/.cargo/registry`, `~/.cargo/git`, `target/`; sccache (uzaqdan/yerli).
'Cargo budaqları arasında cache paylaşımı. lock`.

C/C++

ccache/sccache + kompilyator bayraqları və SDK versiyaları ilə açar.
Ayrı bir əsas görüntü toolchain çıxarılması.


5) Bazel/Nx/Turborepo: cache tapşırıqları və qrafik

Bazel remote cache (HTTP/Cloud) - ünvanlanan məzmun; ciddi möhürlənmə, qum qutusu.
Nx/Turborepo - problemlərin çıxışı və monorepoda «only-affected» icrası.
Əlillik: addım girişlərindən asılıdır (fayllar/bayraqlar/dəyişənlər).


6) Cash əlillik strategiyaları

Açar = giriş hash: lockfiles, kompilyator konfiqləri, manifestlər.
Yumşaq əlillik: 'restore-keys' (GHA )/prefiks (GLCI).
Sərt əlillik: kritik dəyişikliklər zamanı rotate namespace/açar.
Qatların ayrılması: deps vs sources - ciddi asılılıqlara toxunmadan kodu dəyişdirin.


7) İnkremental bild və matrislər

DAG/needs: asılı jobları paralel olaraq işə salın, ardıcıllıqları gözləməyin.
Paths-filter: yalnız təsirlənmiş komponentlər üçün tetikleyici.
Shard Tests :/seed kataloqlarına görə, müddəti bərabərləşdirin.
Warm-pool runner: əvvəlcədən qızdırılmış şəkillər/pik əvvəl caches (turnirlər/kampaniyalar).


8) Cache vs artefaktlar: fərqlidir

Cache: təkrar istifadə giriş/aralıq, «çirkli» sahə, TTL qısa/orta.
Artefaktlar: son montajlar (şəkillər, binarniklər, çartlar), dəyişməz, imzalanmış, SBOM ilə.
Qaydalar: cache aqressiv təmizlənir, artefaktlar - buraxılış siyasətinə uyğun olaraq saxlanılır.


9) Müşahidə, KPI və FinOps

Metriklər (paylayn/repo):
  • Hit-rate cache (%), Warm-start vs Cold-start time, orta/median müddət mərhələləri.
  • Cost per pipeline/job, cache/artefact ölçüsü, keçid (jobs/hour).
  • Monorepoda «affected-runs» payı, dəyişmədən yenidən yığılması (waste).
Alertlər:
  • Hit-rate-in həddindən aşağı düşməsi, «build image» vaxtının artması, artefaktların şişirilməsi, SLO-da səhvlər.

10) Təhlükəsizlik cache və supply chain

Cache/artefaktlarda heç bir sirr yoxdur; mask vars, sirləri skan.
Pin SHA xarici actions/plugins, yalnız etibarlı runners.
Konteyner/binar imzası (cosign), SBOM (CycloneDX/SPDX) və CD-də yoxlama.
İzolyasiya: 'dev/stage/prod' üçün ayrı namespace cache, foreign branches üçün «yalnız oxu» hüquqları.


11) Praktik şablonlar

GitHub Actions - 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 remote cache

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/data: ağır montaj sürətləndirmək

Yerli NVMe runner modelləri/embeddinq/dataset cache; hash versiyası.
Buraxılış artefaktları kimi TensorRT/ONNX mühərriklərinin əvvəlcədən yığılması; inferense təkrar istifadə.
Böyük modellər üçün Chunked-artefaktlar (splits); TTL və gecikmiş təmizləmə.


13) Giriş çek siyahısı

1. Lockfiles və əsas şəkilləri qeyd edin; BuildKit daxil edin.
2. Docker layları bölmək: deps → kod; '.dockerignore' əlavə edin.
3. remote cache qaldırın (Gradle/Bazel/Nx/Turbo); dependency proxy.
4. CI lockfile asılılıq cache konfiqurasiya; matrisləri və 'paths-filter' daxil edin.
5. Monorepoya «affected only» daxil edin.
6. Ölçmək hit-rate, warm/cold time, dəyəri; Alertlər qoyun.
7. SBOM/imza daxil, cache sirləri qadağan.
8. Pik buraxılışlardan əvvəl keşləri qızdırın; TTL/retention tənzimləmək.
9. Cache və runbooks əlillik sənədləşdirin «cache qırılmış».
10. «Əbədi» keşləri müntəzəm olaraq təmizləyin və ağır artefaktları arxivləyin.


14) Antipattern

deps quraşdırma əvvəl tez-tez dəyişən addımlar ilə böyük Dockerfile.
Açarsız ümumi «əbədi» cache/TTL → fleyka və zibil.
Artefaktlar və cache qarışdırılması; heç bir imza/SBOM.
Cache tools → «cache var, lakin təkrarlanmır».
Hər PR-də «hər şeyə» matrisləri; heç bir 'concurrency. cancel`.
İsti cache olmadan və dependency proxy olmadan vahid runner.


Nəticələr

Yığma optimallaşdırılması caches, inkrementality və determinization ilə sistem işidir. Dockerfile düzgün strukturu, binalar üçün uzaqdan cache, dependency proxy və əlillik intizamı sürətli, ucuz və təkrar edilə bilən konveyerlər verir. Müşahidə və təhlükəsizlik qaydaları əlavə edin və buraxılışlarınız tez-tez, sabit və qənaətli olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.