From c6fa0bff6ae5360b27ab32231d824d4911fa3956 Mon Sep 17 00:00:00 2001 From: Stanislav Hubacek Date: Wed, 3 Jun 2026 14:47:26 +0200 Subject: [PATCH] commit --- .DS_Store | Bin 0 -> 8196 bytes .opencode/agents/kb-research.md | 43 +++ .opencode/agents/kb-reviewer.md | 89 +++++ .opencode/agents/kb-source-scout.md | 53 +++ .opencode/opencode.json | 17 + CICD.md | 498 ++++++++++++++++++++++++++++ CLOUD.md | 315 ++++++++++++++++++ CONNECTIVITY.md | 204 ++++++++++++ DATABASES.md | 394 ++++++++++++++++++++++ DATACENTERS.md | 155 +++++++++ GPU.md | 126 +++++++ HARDWARE.md | 10 + HYPERVISORS.md | 154 +++++++++ INFRASTRUCTURE.md | 10 + MONITORING.md | 386 +++++++++++++++++++++ NETWORKING.md | 396 ++++++++++++++++++++++ PROVISIONING.md | 195 +++++++++++ README.md | 38 +++ REVIEW.md | 89 +++++ SERVER-CONFIG.md | 285 ++++++++++++++++ SERVER-HW.md | 329 ++++++++++++++++++ STORAGE.md | 90 +++++ sources/.DS_Store | Bin 0 -> 6148 bytes sources/README.md | 21 ++ sources/cicd/sources.md | 35 ++ sources/cloud/sources.md | 37 +++ sources/databases/sources.md | 34 ++ sources/infrastructure/sources.md | 70 ++++ sources/monitoring/sources.md | 49 +++ sources/networking/sources.md | 40 +++ templates/ADR.md | 50 +++ 31 files changed, 4212 insertions(+) create mode 100644 .DS_Store create mode 100644 .opencode/agents/kb-research.md create mode 100644 .opencode/agents/kb-reviewer.md create mode 100644 .opencode/agents/kb-source-scout.md create mode 100644 .opencode/opencode.json create mode 100644 CICD.md create mode 100644 CLOUD.md create mode 100644 CONNECTIVITY.md create mode 100644 DATABASES.md create mode 100644 DATACENTERS.md create mode 100644 GPU.md create mode 100644 HARDWARE.md create mode 100644 HYPERVISORS.md create mode 100644 INFRASTRUCTURE.md create mode 100644 MONITORING.md create mode 100644 NETWORKING.md create mode 100644 PROVISIONING.md create mode 100644 README.md create mode 100644 REVIEW.md create mode 100644 SERVER-CONFIG.md create mode 100644 SERVER-HW.md create mode 100644 STORAGE.md create mode 100644 sources/.DS_Store create mode 100644 sources/README.md create mode 100644 sources/cicd/sources.md create mode 100644 sources/cloud/sources.md create mode 100644 sources/databases/sources.md create mode 100644 sources/infrastructure/sources.md create mode 100644 sources/monitoring/sources.md create mode 100644 sources/networking/sources.md create mode 100644 templates/ADR.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..df542e7d28ad76f955ac05a58a68766fde901e2b GIT binary patch literal 8196 zcmeHMTWl0n7(U;$&>1GcPz#jH*sUuRO9^ecNJU}0Z6lYK+qU$=rS9$wbi#C|?96Vd zO|?F0L`Zzmcz+}618NknFDBj-;{!pW#6*mVPrPUZA54t@nKRqamL~e30iBba^Pm6x z|9{T>|9t;BduAD9Nal?O#wr)4FeiD8s}oIxbX-tj&LGSg!j%!;P!Oz6 zcCkR6At7kgMiGc2Fg*f1eae`}T$X3K>+kPwh9n+3HjhV7KKM?r_r0JBAn7 zri4IIWTjtQHafbdv7x@HF1Ds|-B?|0w4reWF`Js!kBuqv!uZD73RV*S7b#p5~IY}qY+5-YQ0955AgApoJp-1R%`V-MN7+_ z9=R;0SgSTDnx}LgqxUaN*Q*<4%}~1RbjGyBP?Ne@)^;l01>vz6tWdYgN>A1u93*Ev zF_zR@W$knMFkiSm?fJWhOsDurNqw6v_jv>9oVk0L&{wo*m*wC!(l|G1Gc4cD1<}}5 zt?Rvfs%FD54RU&E<&tterFY5Nd9u+gr(hA@=^Y5z%kd)G;)z<(jej^83wl9}> z94kiGk6WJ z;|;uzkMJ=*#b>yP?{OJF;0mtd8h(=$sa#qv>C){|jkHRtl~zkzq^;66X|L2L^-BZ7 z2dS8FhbDXqI?@P{DLV-z9DNDo2`8Psal%#Izis=Do$WVm!hJiBr`T;33l}Ypt*BkQ ze$#!;6F?NWEkgDB6bMj1DOUp22gsO;SdoirRTrg&d19uN)XI4J$``nH^&M)JHj5HR zuq$hbolQw2*wuAaRhmS(D%kplDpf0?OjH8f4RypKWSZ_#RjrhAQpmRG#Ile{w$L;@ z!{mPo>tC?*>>GBOT_LRhffC4Aj2Kp;j2kj>%ZY zuhX$yNaY;cb&isxm;sZGZauC~5X==_h)e{n1R IubuyY0xNcR5&!@I literal 0 HcmV?d00001 diff --git a/.opencode/agents/kb-research.md b/.opencode/agents/kb-research.md new file mode 100644 index 0000000..f294024 --- /dev/null +++ b/.opencode/agents/kb-research.md @@ -0,0 +1,43 @@ +--- +description: > + Zpracovává [todo] položky v knowledge base. Hledá v souborech sources//sources.md položky se statusem + [todo], rešeršuje téma, zapracuje nové poznatky do příslušného KB souboru a změní status na [done]. + Spouštět s konkrétním požadavkem, např. "zpracuj všechny todo v sources/cicd/". Používat pro rozšiřování + knowledge base o nová témata z nespracovaných zdrojů. +mode: subagent +permission: + edit: allow + read: allow + bash: allow + webfetch: allow + websearch: allow +--- + +Jsi **KB Research Agent** — tvým úkolem je systematicky zpracovávat `[todo]` položky v knowledge base. + +## Workflow + +1. **Analýza** — projdi `sources//sources.md` v zadané oblasti a identifikuj všechny řádky se `[todo]` +2. **Rešerše** — pro každou todo položku: + - Pokud má URL, načti obsah (webfetch) + - Pokud je to kniha / standard, vyhledej aktuální informace (websearch) + - Získej klíčové koncepty, definice, best practices +3. **Zapracování** — rozšiř příslušný `.md` soubor v kořeni KB o nové poznatky +4. **Update zdroje** — změň `[todo]` na `[done]` + +## Pravidla + +- Neodstraňuj existující obsah — pouze přidávej a rozšiřuj +- Udržuj konzistentní formát (tabulky, seznamy, hlavičky) +- Piš česky, fakticky, bez subjektivních názorů +- Každý nový koncept doplň krátkým popisem +- Pokud narazíš na `[done]` položku, nech ji být +- Na konci vytvoř summary: co bylo zpracováno, co bylo přidáno + +## Příklady použití + +Uživatel: "zpracuj všechny todo v sources/cicd/" +→ Projdeš sources/cicd/sources.md, zpracuješ každý [todo] záznam a rozšíříš CICD.md + +Uživatel: "zpracuj [todo] položku o CAP theorem" +→ Najdeš konkrétní todo o CAP theorem (v sources/databases/), provedeš rešerši a rozšíříš DATABASES.md diff --git a/.opencode/agents/kb-reviewer.md b/.opencode/agents/kb-reviewer.md new file mode 100644 index 0000000..00c6a19 --- /dev/null +++ b/.opencode/agents/kb-reviewer.md @@ -0,0 +1,89 @@ +--- +description: > + Kontroluje konzistenci, kvalitu a aktuálnost celé knowledge base. Prochází všechny .md soubory, + ověřuje formátování (tabulky, nadpisy, seznamy), křížové odkazy mezi soubory, duplicitní obsah, + zastaralé informace a konzistenci se zdroji v sources/. Spouštět např. "proveď review celé KB" + nebo "zkontroluj konzistenci CICD.md". +mode: subagent +permission: + edit: allow + read: allow + webfetch: allow + websearch: allow +--- + +Jsi **KB Reviewer** — tvým úkolem je auditovat kvalitu knowledge base. + +## Kontrolní oblasti + +### 1. Formátování a konzistence + +- [ ] Všechny soubory mají stejnou strukturu nadpisů (začínají na `#`, sekce `##`) +- [ ] Tabulky mají konzistentní formát (zarovnání, oddělovače `|---|`) +- [ ] Kódové bloky používají ``` s jazykovým tagem +- [ ] Seznamy jsou jednotně odsazeny +- [ ] Diagramy (ASCII / Mermaid) jsou čitelné + +### 2. Křížové odkazy + +- [ ] Témata, která se překrývají mezi soubory, na sebe vzájemně odkazují + - Např. "monitoring v CICD" → odkaz na MONITORING.md + - Např. "cloud networking" → odkaz mezi CLOUD.md a NETWORKING.md +- [ ] README.md obsahuje všechny aktuální soubory +- [ ] Každý `.md` soubor v kořeni je zmíněn v README.md + +### 3. Duplicity + +- [ ] Stejný koncept není vysvětlen na více místech s rozdílnými informacemi +- [ ] Pokud se koncept opakuje, je konzistentní (stejná čísla, definice, doporučení) + +### 4. Aktuálnost + +- [ ] Verze nástrojů odpovídají aktuálním stabilním vydáním (ověř webem) +- [ ] EOL technologie jsou označeny nebo odstraněny +- [ ] Žádné "brzy bude" — pokud není splněno, označ jako outdated +- [ ] Licence a ceny (kde uvedeny) jsou aktuální + +### 5. Konzistence se zdroji + +- [ ] Každý fakt v KB by měl mít dohledatelný zdroj v `sources/` +- [ ] Pokud je zdroj v `sources/` označen `[done]`, měl by být odpovídající obsah v KB +- [ ] Pokud `sources/` obsahuje zdroj k tématu, které v KB chybí — upozorni + +### 6. Pravopis a styl + +- [ ] Žádné překlepy +- [ ] Konzistentní terminology (nepoužívat "VM" i "virtuální stroj" v jednom souboru) +- [ ] Anglicismy jsou tam kde dávají smysl (vysvětlené při prvním použití) + +## Report + +Na konci vygeneruj přehledný report: + +```markdown +## Review report — YYYY-MM-DD + +### Problémy (nutno opravit) +- [soubor.md:řádek] popis problému + +### Doporučení +- [soubor.md] popis + +### Stav +- ✅ Kontrola formátování: OK / N problémů +- ✅ Křížové odkazy: OK / N chybějících +- ✅ Duplicity: OK / N nalezeno +- ✅ Aktuálnost: OK / N zastaralých +- ✅ Konzistence se zdroji: OK / N nesrovnalostí +``` + +## Příklady použití + +Uživatel: "proveď review celé KB" +→ Projdeš všechny soubory a vypíšeš kompletní report + +Uživatel: "zkontroluj konzistenci NETWORKING.md" +→ Zaměříš se jen na jeden soubor, zkontroluješ ho ze všech úhlů + +Uživatel: "najdi duplicity mezi CLOUD.md a INFRASTRUCTURE.md" +→ Porovnáš specifické soubory diff --git a/.opencode/agents/kb-source-scout.md b/.opencode/agents/kb-source-scout.md new file mode 100644 index 0000000..8da1db3 --- /dev/null +++ b/.opencode/agents/kb-source-scout.md @@ -0,0 +1,53 @@ +--- +description: > + Vyhledává nové zdroje (knihy, články, dokumentace, nástroje, standardy, videa, certifikace) + pro rozšíření knowledge base. Prochází web, identifikuje relevantní materiály k zadané oblasti + a přidává je jako [todo] do příslušného sources//sources.md. Používat pro kontinuální + obohacování knowledge base o aktuální zdroje. Spouštět např. "najdi nové zdroje pro cloud architekturu". +mode: subagent +permission: + edit: allow + read: allow + webfetch: allow + websearch: allow +--- + +Jsi **KB Source Scout** — tvým úkolem je aktivně vyhledávat nové kvalitní zdroje pro knowledge base. + +## Workflow + +1. **Analýza stavu** — přečti `sources//sources.md` pro zadanou oblast, zjisti co už je zdokumentované +2. **Rešerše novinek** — pomocí websearch najdi nové zdroje: + - Oficiální dokumentace a whitepapery + - Knihy (ISBN, autor, vydání) + - Kvalitní články a blog posty + - Nástroje a frameworky + - Standardy a RFC + - Video kurzy a přednášky (konference) + - Certifikace +3. **Deduplikace** — zkontroluj, zda zdroj už není v sources.md +4. **Přidání** — doplň nové zdroje do příslušného `sources//sources.md` s tagem `[todo]` + +## Kritéria kvality + +- **Oficiální dokumentace** — preferovat primary sources (vendor docs, RFC, standardy) +- **Knihy** — preferovat vydání z posledních 3 let, u klasik (jako TCP/IP Illustrated) stačí starší +- **Články** — preferovat autority v oboru (Brendan Gregg, Martin Kleppmann, Kelsey Hightower, ...) +- **Nástroje** — aktivní komunita, aktuální verze, open-source bonus +- Vyhýbej se: zjevně zastaralým materiálům (>5 let mimo obor), clickbaitům, nedůvěryhodným zdrojům + +## Formát zápisu + +Pro každý nový zdroj přidej řádek do tabulky v příslušném sources.md. +Udržuj konzistentní formát dle existujících záznamů v souboru. + +## Příklady použití + +Uživatel: "najdi nové zdroje pro cloud architekturu" +→ Prohledáš web, najdeš knihy, články, whitepapery o cloud architektuře z roku 2025/2026 a přidáš je do sources/cloud/sources.md jako [todo] + +Uživatel: "scout infra" +→ Prohledáš nové zdroje pro infrastrukturu (hypervisory, DC, storage, hardware) a přidáš je do sources/infrastructure/sources.md + +Uživatel: "najdi novinky v observability za poslední rok" +→ Zaměříš se na monitoring/observability, hledáš nové nástroje, články, verze a doplníš do sources/monitoring/sources.md diff --git a/.opencode/opencode.json b/.opencode/opencode.json new file mode 100644 index 0000000..5992512 --- /dev/null +++ b/.opencode/opencode.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://opencode.ai/config.json", + "agent": { + "kb-research": { + "description": "Zpracovává [todo] položky v knowledge base — rešerše a zapracování nových témat", + "mode": "subagent" + }, + "kb-source-scout": { + "description": "Vyhledává nové zdroje (knihy, články, dokumentace) a přidává je do sources/ jako [todo]", + "mode": "subagent" + }, + "kb-reviewer": { + "description": "Audituje konzistenci, aktuálnost, křížové odkazy, duplicity a formátování celé KB", + "mode": "subagent" + } + } +} diff --git a/CICD.md b/CICD.md new file mode 100644 index 0000000..211bef4 --- /dev/null +++ b/CICD.md @@ -0,0 +1,498 @@ +# 🔄 CI/CD a DevOps + +## CI/CD Pipeline + +``` +Code Commit → Build → Test → Package → Deploy to Staging → Integration Tests → Deploy to Production +``` + +### Detailní pipeline stages + +``` +1. Checkout ──→ 2. Lint ──→ 3. Test ──→ 4. Build ──→ 5. Scan ──→ 6. Publish ──→ 7. Deploy + │ │ │ + ESLint/ Unit/Integ/ SAST/SCA/ + Prettier e2e tests Container scan +``` + +| Stage | Nástroje | Co se děje | +|-------|----------|------------| +| **Checkout** | git clone, fetch | Stažení kódu z repozitáře, včetně submodulů | +| **Lint** | ESLint, Prettier, RuboCop, golangci-lint | Statická analýza kódu, formátování | +| **Test (unit)** | Jest, pytest, JUnit | Rychlé testy (ms až s), bez závislostí | +| **Test (integration)** | Testcontainers, Docker Compose | Testy s DB, message queue, externí služby | +| **Test (e2e)** | Playwright, Cypress, Selenium | Full-stack testy v prohlížeči | +| **Build** | Docker build, go build, npm build, Maven | Kompilace, sestavení artifactu | +| **Scan (SAST)** | Semgrep, SonarQube, CodeQL | Statická analýza bezpečnosti | +| **Scan (DAST)** | OWASP ZAP, Burp Suite | Dynamická analýza (běžící aplikace) | +| **Scan (SCA)** | Dependabot, Snyk, Trivy | Analýza závislostí a CVE | +| **Publish** | Docker push, npm publish, Maven deploy | Nahrání artifactu do registru | +| **Deploy** | ArgoCD, Terraform, Helm, kubectl | Nasazení do cílového prostředí | + +### Continuous Integration (CI) + +- Automatické sestavení a testy při každém commitu +- Rychlá feedback smyčka (< 10 min) +- Linting, type checking, unit testy, security scan (SAST) + +### Continuous Delivery (CD) + +- Automatické deploye do staging / test prostředí +- Ruční schválení do produkce (optional) +- Smoke testy po deployi + +### Continuous Deployment + +- Plně automatický deploy do produkce +- Vyžaduje vysokou důvěru v testy a monitoring +- Feature flagy pro řízení rizika + +## GitHub Actions detail + +### Workflow syntax + +```yaml +name: CI Pipeline +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + NODE_VERSION: "20" + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + - run: npm ci + - run: npm run lint + + test: + runs-on: ubuntu-latest + needs: lint + strategy: + matrix: + node-version: [18, 20, 22] + steps: + - uses: actions/checkout@v4 + - name: Run tests + run: npm test +``` + +### Matrix builds + +- Spouští stejné joby s různými parametry (OS, jazyková verze, architektura) +- `strategy.matrix` — kombinace parametrů (kartézský součin) +- `strategy.fail-fast` — zastavení všech při selhání jednoho + +### Reusable workflows + +```yaml +# .github/workflows/deploy.yml (called) +on: + workflow_call: + inputs: + environment: + required: true + type: string + secrets: + cloud_role: + required: true + +# Volání v caller workflow +jobs: + deploy: + uses: ./.github/workflows/deploy.yml + with: + environment: staging + secrets: + cloud_role: ${{ secrets.STAGING_ROLE }} +``` + +### Composite actions + +- Vlastní akce bez nutnosti samostatného repozitáře +- Kombinace `run`, `uses`, `shell` kroků +- Use case: standardizace lint/test/build napříč repozitáři + +### Self-hosted runners + +- Vlastní infrastruktura pro běh GitHub Actions +- Use case: privátní síť, GPU, specifický HW, compliance +- Škálování: actions-runner-controller (Kubernetes), auto-scaling groups +- Bezpečnost: izolace jobů, ephemeral runners + +## GitLab CI detail + +```yaml +stages: + - lint + - test + - build + - deploy + +variables: + DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA + +lint: + stage: lint + image: node:20 + script: + - npm ci + - npm run lint + +test: + stage: test + image: node:20 + needs: ["lint"] + script: + - npm test + artifacts: + paths: + - coverage/ + reports: + coverage_report: + coverage_format: cobertura + path: coverage/cobertura-coverage.xml + +deploy-staging: + stage: deploy + needs: ["build"] + rules: + - if: $CI_COMMIT_BRANCH == "main" + environment: + name: staging + url: https://staging.example.com + script: + - kubectl set image deployment/app app=$DOCKER_IMAGE +``` + +**Koncepty**: +- **Stages** — sekvenční fáze (každá stage může mít více jobů paralelně) +- **Rules** — podmínky spuštění (branch, tag, changes, variables) — nahrazuje `only/except` +- **Needs** — DAG závislosti (job nemusí čekat na celou stage) +- **Artifacts** — předávání souborů mezi joby (binárky, reporty, cache) +- **Environments** — sledování deployů (rollback, history, approvals) + +### DAG pipelines (needs) + +``` +lint ──→ test ──→ build ──→ deploy-staging ──→ deploy-prod + ↓ + build-arm ──→ test-arm +``` + +- Definuje závislosti mezi joby (ne nutně stages) +- Umožňuje paralelizaci nezávislých jobů +- Snižuje celkový čas pipeline + +## Infrastructure as Code (IaC) + +| Nástroj | Typ | Jazyk | +|---------|-----|-------| +| Terraform | Declarative | HCL | +| OpenTofu | Declarative | HCL (fork Terraformu) | +| Pulumi | Declarative | TypeScript, Python, Go, C# | +| AWS CDK | Declarative | TypeScript, Python, Java, C# | +| CloudFormation | Declarative | YAML/JSON (AWS) | +| Azure ARM/Bicep | Declarative | Bicep, JSON | +| Ansible | Imperative/Config | YAML | +| Chef/Puppet | Config mgmt | Ruby DSL | + +### Terraform detail + +#### State locking mechanism + +| Backend | Locking mechanism | Poznámka | +|---------|------------------|----------| +| **S3 + DynamoDB** | DynamoDB (ConditionalPut) | Nejčastější, levný, jednoduchý | +| **Terraform Cloud** | Built-in (API) | SaaS, audit logy, VCS integration | +| **Azure Storage** | Azure Blob Lease | Podobný S3 modelu | +| **GCS** | Cloud Storage Object Hold | Omezené | +| **Consul** | Consul KV session_lock | High-availability | +| **PostgreSQL** | pg_advisory_lock / row lock | Vlastní backend | + +#### State backends comparison + +| Vlastnost | S3 + DynamoDB | Terraform Cloud | Consul | +|-----------|--------------|----------------|--------| +| Cena | $ (S3 + DynamoDB) | $$ (free tier omezený) | $$ (infra) | +| Team workflow | GitHub Actions + OIDC | Native RBAC, runs | Vlastní | +| Locking | DynamoDB | Built-in | Consul session | +| History | S3 versioning | Full history, diff | None | +| Remote ops | Ne (pouze state) | Ano (remote runs) | Ne | +| Encryption | SSE-S3/KMS | At rest + in transit | TLS | + +#### Workspaces vs Terragrunt + +| Aspekt | Terraform Workspaces | Terragrunt | +|--------|---------------------|------------| +| **Separace stavu** | Jeden backend, klíč: `env:/workspace` | Samostatný backend per env | +| **Code reuse** | Stejný kód, jiné proměnné | DRY konfigurace, moduly | +| **Riziko** | Omylem `apply` do špatného workspace | Izolované backends | +| **Kdy použít** | Jednoduché projekty, <5 env | Mikroservice, multi-env, multi-team | +| **Extra features** | — | Dependency, include, before_hook | + +#### Provider versioning + +```hcl +terraform { + required_version = ">= 1.5, < 2.0" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + kubernetes = { + source = "hashicorp/kubernetes" + version = ">= 2.23" + } + } +} +``` + +- `~> 5.0` — pouze patch verze (5.x, x ≥ 0) +- `>= 2.23, < 3.0` — jakákoli 2.x od 2.23 +- `~>` constraints zabraňují breaking changes v major/minor + +### Terraform workflow + +``` +terraform init → Stáhne provider moduly +terraform plan → Zobrazí změny +terraform apply → Aplikuje změny +terraform destroy → Zničí infrastrukturu +terraform validate → Validace syntaxe +terraform fmt → Formátování HCL +``` + +### State management + +- Remote state (S3, Terraform Cloud, Azure Storage) +- State locking (DynamoDB, Consul) +- Workspaces pro oddělení prostředí + +## Dockerfile best practices + +```dockerfile +# Multi-stage build +FROM node:20-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production +COPY . . +RUN npm run build + +# Runtime stage — distroless +FROM gcr.io/distroless/nodejs20-debian12 +WORKDIR /app +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules ./node_modules +USER nonroot:nonroot +EXPOSE 3000 +CMD ["dist/server.js"] +``` + +**Pravidla**: +- **Multi-stage build** — oddělení build tools od runtime +- **Distroless images** — minimal attack surface (žádný shell, package manager) +- **Non-root user** — USER nonroot (security best practice) +- **Layer caching** — nejdříve kopírovat málo se měnící soubory (package.json → npm ci → code) +- **Small base image** — Alpine (5 MB), distroless (minimální), scratch (Go static binary) +- **Healthcheck** — HEALTHCHECK instrukce pro orchestrátor +- **Labels** — LABEL maintainer, version, git commit +- **.dockerignore** — minimalizace build contextu + +## Artifact management + +### Docker registries + +| Registry | Public/Private | Cena | Integrace | +|----------|---------------|------|-----------| +| **Docker Hub** | Obojí | Public free, private $5/měsíc | GitHub Actions, GitLab | +| **ECR (AWS)** | Private | $0.10/GB/měsíc + data transfer | IAM, ECS, EKS | +| **GHCR (GitHub)** | Obojí | Public free, private 500 MB free | GitHub Actions, npm | +| **GCR / Artifact Registry** | Private | $0.10/GB/měsíc | GKE, Cloud Build | +| **ACR (Azure)** | Private | $0.11/GB/měsíc | AKS, Azure DevOps | +| **Harbor** | Private (self-hosted) | Zdarma (open source) | Vlastní, CNCF | + +### Helm charts + +- **Repository** — index.yaml + chart .tgz na HTTP serveru (S3, GitHub Pages, ChartMuseum) +- **OCI registry** — Helm 3.8+ podporuje uložení chartů v OCI registrech (ECR, GHCR, Harbor) +- **Versioning** — chart version (balíček) + app version (aplikace) + +### SBOM (Software Bill of Materials) + +- **SPDX** / **CycloneDX** — standardní formáty SBOM +- Generování: Trivy, Syft, grype +- Use case: supply chain security, compliance (EO 14028, EU CRA) + +## Konfigurace a tajemství + +| Nástroj | Popis | +|---------|-------| +| Vault (HashiCorp) | Dynamic secrets, encryption-as-a-service | +| AWS Secrets Manager | Managed, auto-rotation | +| Azure Key Vault | Managed, HSM podpora | +| GCP Secret Manager | Managed | +| SOPS | Encryption v git repos | +| Sealed Secrets | Encrypted secrets pro Kubernetes | + +### Secret management workflows + +**Vault agent injector** (Kubernetes) +- Sidecar container (vault-agent) injectuje secrets do podu +- Secrets mountovány jako tmpfs volume (ne do environment variables) +- Auto-rotation: vault-agent periodicky refreshuje secrets + +**External Secrets Operator** (Kubernetes) +- CRD: `ExternalSecret` → vytváří `Secret` v K8s +- Backend: AWS Secrets Manager, Azure Key Vault, GCP Secret Manager, Vault +- Push-based refresh: změna v externím store → propagate do K8s + +**Sealed Secrets** +- `kubeseal` zašifruje Secret na clusteru (controller má privátní klíč) +- Zašifrovaný manifest (SealedSecret) může být bezpečně v gitu +- Controller decryptuje při deployi + +## GitOps + +- **Princip**: Git je jediný zdroj pravdy (single source of truth) +- **Nástroje**: ArgoCD, Flux, Rancher Fleet +- Pull-based deploy — agent v clusteru sleduje repo a aplikuje změny +- Auto-sync + drift detection + +## Environment promotion (dev → staging → prod) + +``` +Code → Dev (auto-deploy) → Staging (auto + smoke tests) → Prod (manual approval + gating) +``` + +**Quality gates**: +1. **Unit tests** — pass rate 100 %, code coverage ≥ 80 % +2. **Integration tests** — all critical paths pass +3. **SAST scan** — no critical/high vulnerabilities +4. **SCA scan** — no known critical CVEs +5. **Container scan** — all fixable vulns addressed +6. **Smoke tests** — po deployi na staging (health endpoint, basic flow) +7. **Manual approval** — pro produkci (volitelné při CD) + +## Deployment strategie + +| Strategie | Popis | Riziko | +|-----------|-------|--------| +| **Rolling update** | Postupná výměna instancí | Nízké | +| **Blue/Green** | Dvě identická prostředí, přepojení trafficu | Střední | +| **Canary** | % trafficu na novou verzi, postupné zvyšování | Nízké | +| **Feature flag** | Zapnutí/vypnutí funkce bez deploye | Velmi nízké | +| **A/B testing** | Různé verze pro různé uživatele | Nízké | + +## Git branching strategies + +| Strategie | Popis | Vhodné pro | +|-----------|-------|-----------| +| **Trunk-based** | Jeden hlavní branch (main), krátké feature branche (< 1 den) | CD, microservices, mature teams | +| **GitHub Flow** | Main + feature branche, PRs, jednoduchý | Startupy, web apps | +| **GitLab Flow** | Main + environment branche (staging, prod) + feature branche | Enterprise, regulated | +| **GitFlow** | Develop + main + feature/release/hotfix branche | Release-based, enterprise legacy | +| **One Flow** | Zjednodušený GitFlow (bez develop branche) | Střední týmy | + +## Rollback strategies + +| Strategie | Popis | Rychlost | Riziko | +|-----------|-------|----------|--------| +| **Forward fix** | Nový deploy s hotfixem | Pomalá (build + deploy) | Nízké | +| **Rollback (revert commit)** | Revert gitu, nový deploy | Střední | Nízké | +| **Blue/Green switchback** | Přepojení zpět na starou verzi | Okamžitá | DB inkompatibilita | +| **Database rollback** | Reverze DB migrace (migrate down) | Pomalá | Data loss risk | + +### Database rollback challenges + +- **Breaking changes** — odstranění sloupce/tabulky znamená rollback problém (data ztracena) +- **Best practice**: Expand → Migrate → Contract (nikdy neodstraňovat v jednom deployi) +- **Tooling**: Flyway undo (limited), Liquibase rollback, pgroll (Postgres) +- **Feature flagy** jako prevence — nový kód je za flagem, rollback = vypnutí flagu + +## CI/CD Design Patterns + +Moderní CI/CD pipeline řeší opakující se problémy pomocí návrhových vzorů: + +| Vzor | Popis | +|------|-------| +| **Pipeline as Code** | Pipeline definovaná v YAML/Kotlin DSL (`.gitlab-ci.yml`, `.github/workflows/`) | +| **Immutable Pipeline** | Každý build je artifact, nikdy se nemění | +| **Quality Gate** | Branch protection, required checks, code coverage threshold | +| **Deployment Strategy** | Blue/Green, Canary, Rolling (viz tabulka níže) | +| **GitOps** | Pull-based deploy s auto-sync a drift detection | +| **Shift-Left Security** | SAST/DAST/SCA součást pipeline | +| **Dependency Caching** | Cache layer mezi běhy pipeline | + +## Shift left security + +### SCA (Software Composition Analysis) +| Nástroj | Typ | Integrace | +|---------|-----|-----------| +| **Dependabot** | GitHub native | GitHub, auto-PR na fix | +| **Renovate** | Multi-platform | GitHub, GitLab, Bitbucket | +| **Snyk** | SaaS + CLI | Všechny platformy, Docker, IaC | +| **Trivy** | CLI, OSS | CI/CD pipeline (GitHub Actions, GitLab) | + +### SAST (Static Application Security Testing) +| Nástroj | Jazyky | Charakteristika | +|---------|--------|----------------| +| **Semgrep** | 30+ (Python, Java, Go, JS/TS) | Rychlý, custom rules, CI-native | +| **SonarQube** | 30+ | Komplexní, quality gates, tech debt | +| **CodeQL** | 12 (C++, C#, Go, Java, JS/TS, Python) | GitHub native, query-based | +| **Checkmarx** | 30+ | Enterprise, CxSAST, CxFlow | +| **Fortify** | 30+ | Enterprise, SAST + DAST | + +### Container scanning +| Nástroj | Popis | +|---------|-------| +| **Trivy** | OSS, skenuje OS packages + language-specific + IaC | +| **Grype** | OSS, od Anchore, rychlý, Syft pro SBOM | +| **Clair** | Red Hat, OSS, OCI-compatible | +| **Docker Scout** | Docker Desktop / CLI, integrace s Docker Hub | + +## AI-Native Software Delivery (2025–2026) + +AI transformuje DevOps 2.0: + +- **AI-assisted CI/CD** — automatické diagnózy selhání pipeline, optimalizace resource alokace +- **Agent Control Protocol (ACP)** / **Model Context Protocol (MCP)** — standardy pro interakci AI agentů s toolingem +- **AI-driven cost management** — FinOps optimalizace cloudu +- **Intelligent test selection** — ML určuje, které testy spustit podle změn v kódu +- **Self-healing pipelines** — AI auto-detekuje a opravuje běžné problémy + +Nové nástroje: Harness (AI-native CD), GitLab 19.0 (agentic MR workflows, secrets manager), Octopus Deploy. + +## Nástroje pro pipeline + +- **GitHub Actions** — integrovaný s GitHubem, velký marketplace +- **GitLab CI** — nativní v GitLabu, auto DevOps +- **Jenkins** — nejstarší, extensible, self-hosted +- **CircleCI** — SaaS, rychlý +- **Argo Workflows** — Kubernetes nativní +- **Buildkite** — hybrid (vlastní agenti, SaaS orchestrator) + +## Best practices + +- **Idempotentní pipeline** — opakované spuštění dává stejný výsledek +- **Immutable infrastructure** — nikdy neupravovat running server, vždy znovu nasadit +- **Shift left** — testy a security co nejdříve v pipeline +- **Artifact management** — všechny buildy verzované v registru (Docker Hub, ECR, GHCR) +- **Dependency caching** — urychlení pipeline (npm ci, pip cache, Docker layer caching) +- **Fail fast** — pipeline selže co nejdříve při chybě + +## Zdroje + +Odkazy, knihy a standardy: [sources/cicd/sources.md](sources/cicd/sources.md) +- **Quality gates** — automated checks před každým povýšením do dalšího prostředí +- **Pipeline visibility** — dashboard s aktuálním stavem všech pipeline (GitHub, GitLab, ArgoCD) diff --git a/CLOUD.md b/CLOUD.md new file mode 100644 index 0000000..6d13496 --- /dev/null +++ b/CLOUD.md @@ -0,0 +1,315 @@ +# ☁️ Cloud architektura + +## Poskytovatelé + +- **AWS** — největší tržní podíl, nejširší portfolio +- **Azure** — silná integrace s Microsoft ekosystémem +- **GCP** — Kubernetes (GKE), data & ML, síťová konektivita + +## Modely nasazení + +| Model | Popis | +|-------|-------| +| Public cloud | Sdílená infrastruktura poskytovatele | +| Private cloud | Vyhrazená infrastruktura (on-prem nebo hosted) | +| Hybrid cloud | Propojení public + private | +| Multi-cloud | Více veřejných poskytovatelů | + +## Multi-cloud strategie + +### Důvody pro multi-cloud +- **Vendor lock-in prevence** — diverzifikace rizika +- **Regulatorní požadavky** — data residency v konkrétních regionech +- **Best-of-breed** — každý provider má silné stránky (AWS networking, Azure enterprise, GCP data/ML) +- **Akviziční scénáře** — merge & acquisition sjednocení + +### Multi-cloud connectivity + +| Metoda | Latence | Propustnost | Náklady | +|--------|---------|-------------|---------| +| Site-to-Site VPN | Střední | Omezená | Nízké | +| Private interconnect (Direct Connect / ExpressRoute / Dedicated Interconnect) | Nízká | Vysoká | Vysoké | +| Cloud-to-cloud VPN | Střední | Střední | Střední | +| SD-WAN | Nízká | Vysoká | Střední | + +### Výzvy +- **Síťová komplexita** — rozdílné VPC/VNet koncepty, security modely +- **IAM federace** — jednotné identity napříč cloudy (SSO, SAML, OIDC) +- **Data gravitace** — pohyb dat mezi cloudy je drahý a pomalý +- **Monitoring** — jeden pane of glass napříč cloudy (Grafana, Datadog) + +## Migrační strategie — 6 Rs + +| Strategie | Popis | Náročnost | Typický scénář | +|-----------|-------|-----------|----------------| +| **Rehost** (Lift & Shift) | Přesun VM/as-is bez změn | Nízká | Rychlá migrace, datacentrum exit, minimální riziko | +| **Replatform** (Lift & Reshape) | Migrace s drobnými úpravami (např. RDS místo self-managed DB) | Střední | Optimalizace bez přepisování aplikace | +| **Refactor** (Re-architect) | Přepis aplikace na cloud-native (microservices, serverless) | Vysoká | Maximalizace cloudu, dlouhodobá strategie | +| **Repurchase** | Přechod na SaaS (např. Salesforce, Workday) | Nízká | Aplikace je zastaralá, existuje SaaS alternativa | +| **Retire** | Vypnutí nepotřebných aplikací | Nízká | Aplikace již není používaná, decommission | +| **Retain** | Ponechání on-prem | Žádná | Regulatorní důvody, příliš vysoké riziko migrace | + +### Decision framework pro 6 Rs + +``` +Start: Je aplikace potřebná? + ├── Ne → Retire + └── Ano → Existuje SaaS alternativa? + ├── Ano → Repurchase + └── Ne → Vyplatí se refactoring? + ├── Ano → Refactor + └── Ne → Stačí změna platformy? + ├── Ano → Replatform + └── Ne → Rehost +``` + +## Well-Architected Framework (AWS) + +1. **Operational Excellence** — automace, monitoring, dokumentace +2. **Security** — IAM, encryption, compliance +3. **Reliability** — recovery, škálování, záložní plány +4. **Performance Efficiency** — right-sizing, výběr správných služeb +5. **Cost Optimization** — FinOps, reserved instances, spot instances +6. **Sustainability** (od 2022) — carbon footprint, energy efficiency + +Obdoby: Azure Well-Architected Framework, GCP Architecture Framework + +### Klíčové otázky z Well-Architected Review (~60 otázek) + +**Operational Excellence (12 otázek)** +- Jak jsou změny řízeny a automatizovány? +- Jak jsou operace dokumentovány a sdíleny v týmu? +- Jak jsou očekávané a neočekávané události reflektovány v operacích? +- Jaké runbooky existují pro běžné provozní scénáře? +- Jak probíhá incident management a postmortem proces? + +**Security (12 otázek)** +- Jak je implementováno identity & access management? +- Jak jsou chráněna data v klidu a při přenosu? +- Jak je zajištěna detekce bezpečnostních incidentů? +- Jaké jsou postupy pro patch management a vulnerability remediation? +- Jak jsou řízeny infrastrukturní kredenciály a secrets? + +**Reliability (12 otázek)** +- Jak je zajištěna dostupnost služby při výpadku komponenty? +- Jak je implementováno backup a disaster recovery? +- Jak service limity (quotas, throttling) ovlivňují spolehlivost? +- Jak probíhá automatické škálování při změně zátěže? +- Jaké jsou SLI/SLO metriky a jak jsou monitorovány? + +**Performance Efficiency (12 otázek)** +- Jak je vybrán správný typ a velikost compute/ storage? +- Jak je optimalizována databázová vrstva (indexy, dotazy, caching)? +- Jak je monitoring využit k identifikaci úzkých hrdel? +- Jak je implementováno škálování (vertikální vs horizontální)? + +**Cost Optimization (12 otázek)** +- Jak jsou náklady alokovány na týmy/projekty (chargeback/showback)? +- Jaké nástroje se používají pro analýzu nákladů? +- Jak jsou identifikovány a eliminovány nevyužité zdroje? +- Jak je optimalizováno licencování (BYOL, hybrid benefit)? + +## Klíčové komponenty + +### Výpočetní vrstva + +- **VM / instance** — EC2, Azure VMs, GCE +- **Container orchestrace** — EKS, AKS, GKE +- **Serverless** — Lambda, Azure Functions, Cloud Functions +- **PaaS** — App Engine, Elastic Beanstalk, Azure App Service + +### Compute comparison matrix (AWS EC2) + +| Rodina | Typ | vCPU:Memory | Use case | Příklady cen (on-demand, us-east-1) | +|--------|-----|-------------|----------|--------------------------------------| +| **General purpose** | M7g, m7i | 1:4 | Web servery, microservices, dev/test | m7i.large ~$0.088/h | +| **Compute optimized** | C7g, c7i | 1:2 | HPC, batch processing, CI/CD, gaming | c7i.large ~$0.078/h | +| **Memory optimized** | R7g, r7i, x2idn | 1:8 až 1:32 | In-memory DB (Redis), SAP HANA, real-time analytics | r7i.large ~$0.118/h | +| **Storage optimized** | I4i, im4gn | 1:4 + NVMe | Transactional DB, data warehousing, Kafka | i4i.large ~$0.138/h | +| **GPU / ML** | P5, g5, trn1 | GPU attach | AI training (P5), inference (g5), ML (trn1) | g5.xlarge ~$1.006/h | + +Viz [HARDWARE.md](HARDWARE.md#gpu-v-serverech) pro detail GPU modelů a konfigurací. + +### Úložiště + +- **Object storage** — S3, Blob Storage, Cloud Storage +- **Block storage** — EBS, managed disks, persistent disks +- **File storage** — EFS, Azure Files, Filestore +- **CDN** — CloudFront, Azure CDN, Cloud CDN + +### S3 Storage Classes + +| Třída | Dostupnost | Retrieval time | Cena / GB / měsíc | Use case | +|-------|-----------|----------------|-------------------|----------| +| **S3 Standard** | 99.99 % | milisekundy | ~$0.023 | Aktivní data, častý přístup | +| **S3 Intelligent-Tiering** | 99.9 % | milisekundy | ~$0.023 + monitoring fee | Neznámý / proměnlivý přístup | +| **S3 Standard-IA** | 99.9 % | milisekundy | ~$0.0125 | Méně častý přístup, ale rychlý | +| **S3 One Zone-IA** | 99.5 % | milisekundy | ~$0.01 | Znovu vytvořitelná data | +| **S3 Glacier Instant** | 99.9 % | milisekundy | ~$0.004 | Archiv s občasným přístupem | +| **S3 Glacier Flexible** | 99.99 % | 1-5 min (expedite) / 3-5 h (standard) | ~$0.0036 | Dlouhodobý archiv | +| **S3 Glacier Deep Archive** | 99.99 % | 12 h (standard) / 48 h (bulk) | ~$0.00099 | Nejlevnější, compliance archívy | + +## Multi-AZ a Multi-Region architektura + +``` +Region ┌──────────────────────────────┐ + │ AZ-1 AZ-2 AZ-3 │ + │ ┌───┐ ┌───┐ ┌───┐ │ + │ │APP│──────│APP│──────│APP│ │ + │ └─┬─┘ └─┬─┘ └─┬─┘ │ + │ │ │ │ │ + │ ┌─▼──────────▼──────────▼─┐ │ + │ │ Load Balancer │ │ + │ └────────────┬────────────┘ │ + │ │ │ + │ ┌────────────▼────────────┐ │ + │ │ Database (Primary) │ │ + │ │ + Read Replica │ │ + │ └─────────────────────────┘ │ + └──────────────────────────────┘ +``` + +## Cloud design patterns + +### Strangler Fig +Postupné nahrazování částí monolitické aplikace microservices. +- Legacy funkcionalita se postupně přesměrovává na nové služby +- Strangler Fig proxy (route hlavičky, feature flagy) řídí přesun trafficu +- Výhoda: průběžné dodávání hodnoty bez big-bang přepisu + +### Circuit Breaker +Zabránění kaskádovým selháním při výpadku závislé služby. +- Tři stavy: **Closed** (normální provoz), **Open** (requesty okamžitě failují), **Half-Open** (testovací request po timeoutu) +- Parametry: failure threshold, timeout (reset timeout), half-open max requests +- Implementace: resilience4j, Hystrix (legacy), Istio (envoy), AWS App Mesh + +### Saga +Distribuovaná transakce napříč microservices — řada lokálních transakcí s kompenzačními akcemi. +- **Choreography** — každá služba publikuje událost, další služba reaguje (Kafka, EventBridge) +- **Orchestration** — centrální orchestrátor řídí kroky (Step Functions, Temporal, Camunda) + +### CQRS (Command Query Responsibility Segregation) +Oddělení zápisových (Command) a čtecích (Query) modelů. +- Command model: optimalizovaný pro zápis (normalizovaný, transactionální) +- Query model: optimalizovaný pro čtení (denormalizovaný, read-optimized views) +- Eventual consistency mezi modely (event bus propaguje změny) +- Use case: reporting, audit logy, high-throughput systémy + +### Event Sourcing +Ukládání stavu jako sekvence událostí (eventů), ne aktuálního stavu. +- Každá změna je append-only event v event store +- Současný stav = fold všech událostí +- Výhody: audit trail, time travel, CQRS kompatibilita +- Implementace: EventStoreDB, Kafka (log), DynamoDB + CDC + +## Hybrid cloud konektivita + +Viz také: [NETWORKING.md](NETWORKING.md) — síťová architektura (VPN, BGP, VPC design). + +- **Site-to-Site VPN** — IPSec tunel přes internet +- **Direct Connect / ExpressRoute / Dedicated Interconnect** — privátní fyzické propojení +- **Cloud VPN / Transit Gateway** — hub-and-spoke topologie + +## Cost optimization detail + +### Savings Plans vs Reserved Instances + +| Vlastnost | Compute Savings Plan | EC2 Instance Savings Plan | Reserved Instances | +|-----------|---------------------|---------------------------|-------------------| +| Flexibilita | Instance family, region, OS | Instance family + region | Specifická instance | +| Termín | 1 nebo 3 roky | 1 nebo 3 roky | 1 nebo 3 roky | +| Sleva (typicky) | ~30-50 % | ~40-60 % | ~40-60 % | +| Změna instance | Ano (libovolná) | Ano (v rámci rodiny) | Ne | +| Změna regionu | Ano | Ne | Ne | +| Payment options | All Upfront / Partial / No Upfront | All Upfront / Partial / No Upfront | All Upfront / Partial / No Upfront | + +### Spot instance best practices + +- **Diverzifikace** — používejte mix instance typů (spot fleet) pro vyšší dostupnost +- **Graceful handling** — aplikace musí zvládnout termination notice (2 minuty varování) +- **Checkpointing** — pravidelné ukládání stavu pro restart po spot přerušení +- **Spot block** (AWS) — ochrana na 1-6 h (omezená dostupnost) +- **Použití**: batch processing, CI/CD runners, stateless microservices, ML training +- **Vyhnout se**: stateful workloads, databáze (bez speciálního designu) + +## Organizace a governance + +### AWS Organizations + +``` +Root OU +├── Security OU +│ ├── Audit Account (CloudTrail, Config) +│ └── Security Tooling Account (GuardDuty, Security Hub) +├── Infrastructure OU +│ ├── Network Account (Transit Gateway, VPN) +│ ├── Shared Services Account (AD, SSO) +│ └── Log Archive Account +├── Workloads OU +│ ├── Dev OU → jednotlivé dev accounts +│ ├── Staging OU → staging accounts +│ └── Prod OU → production accounts +└── Sandbox OU → izolované experimentální účty +``` + +- **SCP** (Service Control Policies) — whitelist/blacklist služeb na OU úrovni +- **Tag policies** — enforcement tagování napříč účty +- **AI services opt-out** — kontrola použití dat v AWS AI službách + +### Azure Management Groups + +``` +Tenant Root Group +├── Platform MG +│ ├── Connectivity (hub VNet, ExpressRoute) +│ ├── Management (Log Analytics, Automation) +│ └── Identity (AD DS, PIM) +├── Application MG +│ ├── DEV (dev subscriptions) +│ ├── TEST (test subscriptions) +│ └── PROD (production subscriptions) +└── Sandbox MG +``` + +- **Azure Policy** — built-in a custom policies (podobné SCP) +- **Management Group hierarchy** — až 6 úrovní hloubky +- **Subscription limits** — max 10 000 subscriptions na tenant + +### GCP Projects + +``` +Organization Node +├── Folder: Platform +│ ├── Project: Shared Networking (VPC, Cloud NAT, VPN) +│ ├── Project: Security (Cloud KMS, Secret Manager, Chronicle) +│ └── Project: Monitoring (Cloud Monitoring, Logging) +├── Folder: Workloads +│ ├── Folder: Dev +│ │ └── Project: [aplikace]-dev +│ ├── Folder: Staging +│ │ └── Project: [aplikace]-staging +│ └── Folder: Prod +│ └── Project: [aplikace]-prod +└── Folder: Sandbox + └── Project: [user]-sandbox +``` + +- **Organization policies** — constrainty na úrovni organizace/folderu +- **Resource Manager** — hierarchie: Organization → Folder → Project → Resources +- **Project limits** — max 30 projektů (lze navýšit), resources per project 10k + +## Best practices + +- Používejte **infrastructure as code** (Terraform, Pulumi, CDK) +- Designujte pro **failure** — každá komponenta může spadnout +- Implementujte **defense in depth** — security na každé vrstvě +- Monitorujte **náklady** — taggování, budget alerts, anomaly detection +- Používejte **managed services** kde to dává smysl (méně operací) +- **Least privilege** pro všechny IAM role a politiky + +## Zdroje + +Odkazy, knihy a standardy: [sources/cloud/sources.md](sources/cloud/sources.md) +- **Cost tagging** — assign tags pro chargeback/showback (Environment, Team, Cost Center, Application) +- **Automated compliance** — AWS Config, Azure Policy, GCP Org Policies pro guardrails +- **Multi-account strategie** — AWS Control Tower, Azure Landing Zones, GCP Resource Hierarchy diff --git a/CONNECTIVITY.md b/CONNECTIVITY.md new file mode 100644 index 0000000..080cee7 --- /dev/null +++ b/CONNECTIVITY.md @@ -0,0 +1,204 @@ +# 🔌 Server connectivity — síťová a storage konektivita + +## Ethernet — síťová konektivita + +### Rychlosti a formáty + +| Rychlost | Označení | Form factor | Kabeláž | Rok standardu | Use case | +|----------|----------|-------------|---------|---------------|----------| +| **1 GbE** | 1000BASE-T | RJ45 (copper) | Cat5e/Cat6 | 1999 | Management, legacy | +| **10 GbE** | 10GBASE-T / SFP+ | RJ45 / SFP+ | Cat6A (30m) / Cat7 (100m) / DAC / SR/LR | 2006 | Běžný server, storage | +| **25 GbE** | 25GBASE-R | SFP28 | Cat8 (30m) / DAC (5m) / SR/LR (100m/10km) | 2016 | Standard pro servery (2020+) | +| **40 GbE** | 40GBASE-R | QSFP+ | DAC (7m) / SR (150m) / LR (10km) | 2010 | Legacy, spine | +| **50 GbE** | 50GBASE-R | SFP56 | DAC / SR / LR | 2018 | Emerging server | +| **100 GbE** | 100GBASE-R | QSFP28 | DAC (3m) / SR4 (100m) / LR4 (10km) / PSM4 (500m) | 2015 | Spine, storage, AI | +| **200 GbE** | 200GBASE-R | QSFP56 | DAC / SR4 / DR4 | 2019 | AI/ML, HPC | +| **400 GbE** | 400GBASE-R | QSFP-DD / OSFP | DAC (2.5m) / SR8 (100m) / DR4 (500m) / FR4 (2km) | 2017 | AI training, hyperscale | +| **800 GbE** | 800GBASE-R | QSFP-DD800 / OSFP | DAC (2m) / SR8 (100m) / DR8 (500m) | 2024 | Next-gen AI/ML | + +**Doporučení pro servery (2026)**: +- **Standard**: 2× 25 GbE (management + data) nebo 2× 100 GbE pro náročné workloady +- **AI/ML training**: 8× 400 GbE (InfiniBand preferován pro GPU communication) +- **Storage**: 2× 25/100 GbE (iSCSI/NFS) nebo dedikovaná FC (16/32 Gbps) + +### Form factor NIC + +| Form factor | PCIe lanes | Rychlost | Use case | +|------------|-----------|----------|----------| +| **OCP 3.0** | x8/x16 | 25/100/200 GbE | Moderní servery (Dell, HPE), small form factor | +| **PCIe HHHL** | x8 | 25/50 GbE | Standardní 1U/2U servery | +| **PCIe FHHL** | x16 | 100/200/400 GbE | GPU servery, high-density | +| **Mezzanine** | x8 | 10/25 GbE | Blade servery (HPE Synergy, Dell MX) | +| **LOM (LAN on Motherboard)** | — | 1/10/25 GbE | Integrovaný, základní konektivita | + +### NIC features + +| Feature | Popis | Benefit | +|---------|-------|---------| +| **TSO/GRO** | TCP Segmentation Offload / Generic Receive Offload | Snížení CPU zátěže pro TCP | +| **LRO/LSO** | Large Receive/Send Offload | Obdoba TSO/GRO pro legacy | +| **RSS** | Receive Side Scaling | Distribuce příchozích packetů přes více CPU jader | +| **RPS/RFS** | Receive Packet Steering / Flow Steering | Softwarové RSS, cache affinity | +| **XDP** | eXpress Data Path | BPF-based packet processing (DDoS, load balancer) | +| **RDMA (RoCE v2)** | RDMA over Converged Ethernet | GPU direct communication, storage (NVMe-oF) | +| **iWARP** | RDMA over TCP | RDMA bez speciálního switch (vyšší latence) | +| **DPDK** | Data Plane Development Kit | Uživatelský prostor pro packet processing (VNF, vSwitch) | +| **VXLAN/NVGRE offload** | HW offload pro tunelování | Overlay networking (VMware NSX, OpenStack) | +| **SR-IOV** | Single Root I/O Virtualization | Direct NIC access pro VM (VF), nízká latence | +| **Flow Bifurcation** | Split NIC traffic mezi kernel a DPDK | Souběžný management a high-speed data path | +| **PTP (IEEE 1588)** | Precision Time Protocol | Finanční služby, 5G, telco | + +### NIC selection per workload + +| Workload | Doporučená NIC | Zdůvodnění | +|----------|---------------|------------| +| **Web / API servery** | 2× 25 GbE SFP28, OCP | Nízká cena, dostatečná bandwidth | +| **Virtualizace (VMware)** | 2× 25 GbE (SR-IOV, VXLAN offload) | SR-IOV pro VM, VXLAN pro NSX | +| **Databáze (OLTP)** | 2× 25/100 GbE (RSS, low latency) | Nízká latence, RSS pro CPU scaling | +| **Storage (NFS/iSCSI)** | 2× 25/100 GbE (RoCE v2) | RDMA pro NVMe-oF, low latency | +| **Storage (FC SAN)** | 2× 32 Gb FC HBA | SAN pro VMware VMFS, block storage | +| **AI/ML training** | 8× 400 GbE + InfiniBand NDR | GPU communication, data ingestion | +| **AI/ML inference** | 4× 100 GbE (RoCE v2) | Model serving, GPU direct | +| **HPC** | InfiniBand NDR 400 Gbps | MPI communication, low latency | +| **Telco / Edge** | 2× 25 GbE (DPDK, PTP) | VNF, 5G UPF, low latency | + +--- + +## Storage connectivity + +### Fibre Channel (FC) SAN + +| Generace | Rychlost | Označení | Form factor | Dosah (SMF) | Use case | +|----------|----------|----------|-------------|-------------|----------| +| **Gen 5** | 16 Gbps | 16GFC | SFP+ | 10 km | Legacy SAN | +| **Gen 6** | 32 Gbps | 32GFC | SFP28 | 10 km | Současný standard | +| **Gen 7** | 64 Gbps | 64GFC | SFP56 | 10 km | Emerging, high-performance | +| **Gen 8** | 128 Gbps | 128GFC | QSFP28 | 10 km | Budoucnost (2026+) | + +**HBA (Host Bus Adapter)**: + +| Výrobce | Model | Rychlost | PCIe | Porty | Features | +|---------|-------|----------|------|-------|----------| +| **Broadcom / Emulex** | LPe35000 | 32 GFC | PCIe 3.0 x8 | 1-2 | NVMe-FC, T10-PI, SR-IOV | +| **Broadcom / Emulex** | LPe36000 | 64 GFC | PCIe 4.0 x16 | 1-2 | NVMe-FC, FC-NVMe | +| **Marvell / QLogic** | QLE2770 | 32 GFC | PCIe 3.0 x8 | 1-2 | FC-NVMe, T10-PI | +| **Marvell / QLogic** | QLE2870 | 64 GFC | PCIe 4.0 x8 | 1-2 | NVMe-FC, 64GFC | + +**FC SAN topology**: + +``` +Server ──HBA── FC Switch ──── Storage Array (FC port) + │ │ + │ ┌────┴────┐ + │ │ Fabric │ + │ └─────────┘ + │ + ──── ISL (Inter-Switch Link) ──── backup fabric (B) +``` + +**Zoning** (FC): + +``` +Zone A: Server1_HBA1 + Storage_Port1 (production) +Zone B: Server1_HBA2 + Storage_Port2 (backup fabric) +Zone C: Backup_Server + Storage_Target (backup) +``` + +### iSCSI + +| Vlastnost | iSCSI | Poznámka | +|-----------|-------|----------| +| **Transport** | TCP/IP (port 3260) | Po standardním ethernetu | +| **Rychlost** | 1/10/25/100 GbE | Stejná jako Ethernet | +| **Initiator** | SW (OS) nebo HW (TOE) | SW initiator zdarma, ~5-10 % CPU load | +| **Multipathing** | MPIO (Multiple Connections per Session) | Až 8 cest, active/active nebo active/passive | +| **CHAP** | Authentication | Mutual CHAP doporučen | +| **Jumbo frames** | Doporučeno MTU 9000 | Snížení CPU overhead, vyšší throughput | +| **Use case** | Malé a střední SAN, backup, DR | Levnější než FC, nižší výkon | + +**iSCSI configuration**: + +``` +# Software initiator (Linux) +iscsiadm -m discovery -t sendtargets -p 10.0.0.100:3260 +iscsiadm -m node --login -T iqn.2024-05.storage:array01 + +# Multipath (dm-multipath) +mpathconf --enable --with_multipathd y +# /etc/multipath.conf: aliases, failback, rr_min_io +``` + +### NVMe-oF (NVMe over Fabrics) + +| Transport | Protokol | Latence | CPU overhead | Use case | +|-----------|----------|---------|-------------|----------| +| **NVMe over FC** | FC-NVMe (FC Gen 6/7) | <10 µs | Nízký | Enterprise SAN, VMware | +| **NVMe over RDMA (RoCE v2)** | RDMA (RoCE) | <5 µs | Velmi nízký | AI/ML, HPC, K8s (CSI) | +| **NVMe over TCP** | TCP | ~50 µs | Střední (10-20 % CPU) | Standardní Ethernet, bez RDMA | +| **NVMe over InfiniBand** | IB RC/UC | <3 µs | Nejnižší | HPC, AI training | + +**NVMe-oF comparison**: + +| Vlastnost | FC-NVMe | NVMe/RoCE | NVMe/TCP | NVMe/IB | +|-----------|---------|-----------|----------|---------| +| **Latence (target)** | ~8 µs | ~4 µs | ~50 µs | ~3 µs | +| **Bandwidth** | 64 Gbps | 100/200 GbE | 25/100 GbE | NDR 400 Gbps | +| **Requires special HW** | FC HBA + switch | RoCE NIC + DCB switch | Standard NIC | IB HCA + switch | +| **Ecosystem** | Broadcom, Marvell | NVIDIA, Broadcom | OS built-in | NVIDIA Mellanox | +| **Use case** | VMware, enterprise SAN | AI/ML, K8s, HPC | SMB, K8s, cost-effective | HPC, large AI | + +### SAS (Serial Attached SCSI) + +| Generace | Rychlost | Kabeláž | Dosah | Use case | +|----------|----------|---------|-------|----------| +| **SAS 3** | 12 Gbps | SAS cable (SFF-8644) | 6-10 m | Legacy storage, DAS | +| **SAS 4** | 22.5 Gbps | SAS cable (SFF-8644) | 6-10 m | Současný standard | +| **SAS 5** | 45 Gbps | SAS cable (SFF-8644) | 6-10 m | Emerging | + +**SAS topology**: Server → SAS HBA → SAS expander → SAS disk (point-to-point, ne shared jako FC) + +--- + +## Server connectivity — decision matrix + +| Workload | Primární | Sekundární | Management | +|----------|----------|-----------|------------| +| **Web / API** | 2× 25 GbE (LACP) | — | 1× 1 GbE BMC | +| **Databáze** | 2× 25/100 GbE (RSS) | 2× 32 Gb FC (SAN) | 1× 1 GbE BMC | +| **Virtualizace** | 4× 25 GbE (SR-IOV) | 2× 32 Gb FC (VMFS) | 1× 1 GbE BMC | +| **Kubernetes** | 2× 25/100 GbE | — | 1× 1 GbE BMC | +| **Storage node** | 2× 100 GbE (RoCE) | 2× 25 GbE (management) | 1× 1 GbE BMC | +| **AI training** | 8× 400 GbE + IB NDR | 4× 100 GbE (storage) | 1× 1 GbE BMC | +| **AI inference** | 4× 100 GbE (RoCE) | 2× 25 GbE (management) | 1× 1 GbE BMC | +| **HPC** | InfiniBand NDR | 2× 100 GbE (storage) | 1× 1 GbE BMC | + +--- + +## Server NIC placement (PCIe slot optimization) + +``` +2U Server (GPU/AI): +┌─────────────────────────────────────────────────┐ +│ PCIe 0: GPU (x16) — NVLink / InfiniBand (x16) │ +│ PCIe 1: GPU (x16) — NIC 100 GbE (x16) │ +│ PCIe 2: GPU (x16) │ +│ PCIe 3: GPU (x16) │ +│ PCIe 4: GPU (x16) │ +│ PCIe 5: GPU (x16) — NIC 100 GbE (x16) │ +│ PCIe 6: Storage HBA / NIC (x8) │ +│ PCIe 7: Management / OCP (x8) │ +└─────────────────────────────────────────────────┘ + +1U Standard: +┌─────────────────────────────────┐ +│ OCP: 2× 25 GbE (management) │ +│ PCIe 0: NIC 25 GbE (x8) │ +│ PCIe 1: Storage HBA / FC (x8) │ +│ PCIe 2: GPU (x16, optional) │ +│ PCIe 3: NVMe (x4, M.2) │ +└─────────────────────────────────┘ +``` + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/DATABASES.md b/DATABASES.md new file mode 100644 index 0000000..d2e3ceb --- /dev/null +++ b/DATABASES.md @@ -0,0 +1,394 @@ +# 🗄️ Databázová architektura + +## Klasifikace databází + +### Relační (SQL) + +| DB | Licence | Use case | +|----|---------|----------| +| PostgreSQL | Open source | Univerzální, geospatial, analytika | +| MySQL | Open source | Web, LAMP stack | +| MariaDB | Open source | MySQL kompatibilní | +| Microsoft SQL Server | Proprietary | Enterprise .NET | +| Oracle DB | Proprietary | Enterprise | +| Amazon Aurora | Managed | MySQL/PostgreSQL kompatibilní | + +### NoSQL + +| Typ | DB | Use case | +|-----|----|----------| +| Document | MongoDB, Couchbase | JSON data, flexibilní schema | +| Key-Value | Redis, DynamoDB | Cache, session store, real-time | +| Wide-column | Cassandra, ScyllaDB | Time-series, IoT, velká data | +| Graph | Neo4j, Dgraph | Vztahy, doporučení, social grafy | + +## Transaction isolation levels + +| Úroveň | Dirty Read | Non-repeatable Read | Phantom Read | Serialization Anomaly | +|--------|-----------|---------------------|-------------|----------------------| +| **Read Uncommitted** | Ano (možné) | Ano | Ano | Ano | +| **Read Committed** | Ne (prevence) | Ano | Ano | Ano | +| **Repeatable Read** | Ne | Ne | Ano (PostgreSQL: Ne) | Ano | +| **Serializable** | Ne | Ne | Ne | Ne | + +**Anomálie**: +- **Dirty Read** — čtení dat z necommitnuté transakce (data mohou být rollbacknuta) +- **Non-repeatable Read** — stejný dotaz vrátí jiná data (jiná transakce mezitím updatovala řádek) +- **Phantom Read** — stejný dotaz vrátí nové řádky (jiná transakce insertla data splňující podmínku) +- **Serialization Anomaly** — výsledek transakcí není ekvivalentní žádnému sériovému pořadí + +### PostgreSQL specific +- **Read Uncommitted** se chová jako **Read Committed** (není implementováno) +- **Repeatable Read** v PG je **Snapshot Isolation** — zabraňuje i phantom reads +- **Serializable** v PG používá Serializable Snapshot Isolation (SSI) — detekce sériových konfliktů + +## PostgreSQL detail + +### MVCC (Multi-Version Concurrency Control) + +- Každá transakce vidí snapshot dat (transaction snapshot) z okamžiku startu +- Staré verze řádků (tuple) zůstávají v tabulce, označené jako `xmax` / `xmin` +- INSERT vytvoří nový tuple s `xmin = current_xid` +- DELETE označí tuple `xmax = current_xid` (nezmizí hned) +- UPDATE = DELETE old + INSERT new +- VACUUM fyzicky maže tuple starší než nejstarší aktivní snapshot + +### VACUUM a autovacuum + +| Parametr | Popis | Výchozí | +|----------|-------|---------| +| `autovacuum_vacuum_threshold` | Min. mrtvých řádků pro spuštění | 50 | +| `autovacuum_vacuum_scale_factor` | % z tabulky jako threshold | 0.2 (20 %) | +| `autovacuum_analyze_threshold` | Min. změněných řádků pro ANALYZE | 50 | +| `autovacuum_vacuum_cost_limit` | Limituje I/O vacuum (prevence zátěže) | 200 | +| `autovacuum_naptime` | Interval mezi kontrolami | 1 min | +| `deadlock_timeout` | Detekce deadlocků | 1 s | + +**Příznaky nedostatečného vacuum**: +- Růst tabulky (bloat) — staré tuple zabírají místo +- Zhoršení výkonu index scanů (VISIBLE MAP není aktuální) +- XID wraparound hazard — emergency vacuum (může zastavit DB) + +### WAL archiving a PITR + +```conf +# postgresql.conf +wal_level = replica # nebo logical +archive_mode = on +archive_command = 'aws s3 cp %p s3://backups/pg-wal/%f' +``` + +- **WAL** (Write-Ahead Log) — append-only log všech změn +- **WAL archiving** — kontinuální záloha WAL segmentů (16 MB) +- **PITR** (Point-In-Time Recovery) — obnova k libovolnému okamžiku + 1. Restore base backup (pg_basebackup) + 2. Replay WAL archivů až k cílovému času + 3. `recovery_target_time = '2026-06-03 10:30:00 UTC'` + +### Replication slots + +- **Physical replication slot** — zaručuje, že WAL není smazán masterem, dokud ho replica nespotřebuje +- **Logical replication slot** — pro logickou replikaci (selectivní tabulky, transformace dat) +- **Riziko**: pokud replica spadne a slot není aktivní, WAL naroste na disku (disk full) +- Monitoring: `pg_replication_slots`, `pg_stat_replication` + +## Replikace + +| Typ | Popis | Latence | +|-----|-------|---------| +| Synchronní | Zápis potvrzen až po replikaci na všechny nod | Vysoká, ale konzistentní | +| Asynchronní | Zápis potvrzen ihned, replikace na pozadí | Nízká, možný data loss | +| Semi-synchronní | Potvrzení od majority nodů | Kompromis | + +### Topologie + +- **Leader-Follower** (Master-Slave) — čtení z replic +- **Leader-Leader** (Multi-master) — zápis na více nodů +- **Quorum-based** — R + W > N (Cassandra, DynamoDB) + +## Index types + +| Typ | Algoritmus | Use case | Operace | Poznámka | +|-----|-----------|----------|---------|----------| +| **B-tree** | Balanced tree | Většina dotazů — =, <, >, BETWEEN, IN, LIKE (prefix) | Rychlé vyhledávání, řazení | Výchozí v PostgreSQL, MySQL | +| **Hash** | Hash table | Pouze = (equality) | Rychlé lookup | Malá velikost, nelze range dotazy | +| **GiST** | Generalized Search Tree | Full-text, geometrie, intervaly, IP rozsahy | Rychlé: overlaps, contains, distance | GIST pro geometrii (PostGIS), full-text | +| **GIN** (Generalized Inverted Index) | Inverted index | Pole, JSONB, full-text search | contains (@>), overlaps (&&) | Pomalý build, rychlé čtení | +| **BRIN** (Block Range Index) | Min/Max per block range | Velké tabulky, data v pořadí (time-series) | Range dotazy na korelovaná data | Extrémně malý (tisíckrát menší než B-tree) | +| **SP-GiST** | Space-partitioned GiST | Quad-tree, KD-tree, radix tree | Partitioned search | Geografické clustery, síťová data | + +## Index selection guide + +| Query pattern | Doporučený index | Příklad | +|--------------|-----------------|---------| +| `WHERE user_id = 123` | B-tree na `user_id` | Uživatelský lookup | +| `WHERE status = 'active' AND created_at > '2026-01-01'` | Composite B-tree na `(status, created_at)` | Filtrace + range | +| `WHERE data @> '{"key": "value"}'` | GIN na JSONB sloupec | JSONB dotazy | +| `WHERE tags && ARRAY['urgent']` | GIN na pole | Tagy | +| `WHERE position <@> POINT(50, 14) < 1000` | GiST na geometry | Lokalitní dotazy | +| `WHERE event_time BETWEEN '2026-06-01' AND '2026-06-02'` | BRIN na `event_time` | Time-series, logy | +| `WHERE email = 'user@example.com'` | Hash na `email` | Equality only | + +## Query execution + +### Seq scan vs Index scan vs Bitmap scan + +| Typ | Popis | Kdy se používá | +|-----|-------|---------------| +| **Seq Scan** | Prochází všechny řádky tabulky | Velká část tabulky (>10 %), malá tabulka, žádný vhodný index | +| **Index Scan** | Hledá v indexu, pak náhodný přístup k heap | Malá podmnožina dat (<5 %), selektivní dotazy | +| **Index Only Scan** | Načítá data pouze z indexu (ne z heap) | Všechny potřebné sloupce jsou v indexu (covering index) | +| **Bitmap Scan** | Kombinace více indexů → bitmapa → heap access | AND/OR podmínky na více indexovaných sloupcích | +| **Bitmap Heap Scan** | Načítá řádky z bitmapy (srovnané) | AND/OR kombinace, ~5-20 % tabulky | + +### EXPLAIN ANALYZE + +```sql +EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) +SELECT * FROM orders WHERE user_id = 456 AND created_at > '2026-01-01'; + +-- Výstup: +-- Index Scan using idx_orders_user_created on orders +-- Index Cond: ((user_id = 456) AND (created_at > '2026-01-01'::date)) +-- Buffers: shared hit=3 +-- Planning Time: 0.12 ms +-- Execution Time: 0.34 ms +``` + +Klíčové metriky: `Execution Time`, `Planning Time`, `Buffers` (hit/read/dirtied), `Rows Removed by Filter`, `Actual Time` (first...last) + +## Sharding + +Distribuce dat napříč uzly podle shard klíče. + +``` + ┌─────────┐ + │ Proxy │ + │ Router │ + └────┬────┘ + ┌──────────┼──────────┐ + ┌────▼───┐ ┌───▼────┐ ┌───▼────┐ + │Shard A │ │Shard B │ │Shard C │ + │ 0-100 │ │101-200 │ │201-300 │ + └────────┘ └────────┘ └────────┘ +``` + +### Hash-based sharding + +``` +shard_id = hash(shard_key) % number_of_shards +``` + +### Range-based sharding + +- Data rozdělena podle rozsahu hodnot (např. uživatelé A-M, N-Z) +- Může vést k nerovnoměrnému rozdělení (hot spots) + +### Consistent hashing + +``` +Hash ring: + 0 ─── shard A ─── hash(key1) + │ + 90 ─── shard B ─── hash(key2) + │ + 180 ─── shard C ─── hash(key3) + │ + 270 ─── shard D ─── hash(key4) +``` + +- Minimalizuje přeuspořádání přidáním/odebráním nodu (pouze sousední shard) +- **Virtual nodes** (vnodes) — každý fyzický nod má více virtuálních bodů na ring (lepší distribuce) +- **Koordinační služba**: Cassandra (vnodes), Riak (vnodes), DynamoDB (Consistent Hashing) + +### Rebalancing + +- **Ruční** — zastavit zápisy, přerozdělit data, restartovat +- **Automatické** — incremental migration (Cassandra vnodes) +- **Proxy-based** — Vitess (shard splitting), Citus (shard rebalancing) + +### Routing approaches + +- **Proxy-based** — aplikace jde na proxy, ta routuje (Vitess, ProxySQL) +- **Client-side** — aplikace ví, na který shard jít +- **DNS-based** — každý shard má vlastní endpoint + +## CAP teorém + +V distribuovaném systému lze mít pouze 2 ze 3: + +- **C**onsistency — všichni vidí stejná data +- **A**vailability — každý request dostane odpověď +- **P**artition tolerance — systém funguje i přes výpadek komunikace + +V praxi: P je vždy vyžadováno, volíme mezi CP (konzistence) a AP (dostupnost). + +### PACELC rozšíření + +PACELC rozšiřuje CAP o chování za normálních podmínek (bez partition): + +- **P**artition → **A**vailability vs **C**onsistency +- **E**lse (bez partition) → **L**atency vs **C**onsistency + +| DB | Partition volba | Else volba | +|----|----------------|------------| +| Cassandra | AP (dostupnost) | LC (nízká latence, eventual consistency) | +| DynamoDB (default) | AP | LC | +| MongoDB | CP (primární) | LC | +| PostgreSQL (single) | CP | CC | +| CockroachDB | CP | CC | + +### Quorum detail + +- **R** (read quorum) + **W** (write quorum) > **N** (replication factor) +- Typické: N=3, R=2, W=2 (toleruje 1 node down) +- **Sloppy quorum** — při nedostupnosti nodu, data dočasně uložena na jiném nodu (nastolit konzistenci po obnově) +- **Hinted handoff** — dočasný zápis na jiný node s hintem, při obnově se data přenesou + +## Caching + +| Vrstva | Nástroj | Use case | +|--------|---------|----------| +| Application cache | Redis, Memcached | Session, API response cache | +| Database cache | Built-in | Query cache, buffer pool | +| CDN cache | CloudFront, Fastly | Static assets, API responses | +| HTTP cache | Varnish, nginx | Reverse proxy cache, ESI | + +### Cache strategie + +| Strategie | Popis | Use case | +|-----------|-------|----------| +| **Cache-aside** | Aplikace načte z cache, při miss jde do DB a naplní cache | Obecná | +| **Read-through** | Cache sama načte z DB při miss | Jednoduché lookupy | +| **Write-through** | Zápis jde do cache i DB zároveň | Konzistence | +| **Write-behind** | Zápis do cache okamžitě, do DB asynchronně | Propustnost | +| **Cache-aside (lazy loading)** | TTL + invalidace | Nejčastější | + +### Redis detail + +**Data structures**: + +| Struktura | Popis | Use case | +|-----------|-------|----------| +| **String** | Binární string (max 512 MB) | Cache hodnoty, session tokeny, counters | +| **Hash** | Map field-value | Uživatelský profil, objekt v cache | +| **List** | Linked list (push/pop na oba konce) | Queue (RPUSH/LPOP), log stream | +| **Set** | Unikátní hodnoty (unordered) | Tags, deduplikace, memberships | +| **Sorted Set** | Unikátní + score (řazení) | Leaderboardy, rate limiting, timeouts | +| **Bitmap** | Bitové pole | Feature flagy, daily active users | +| **HyperLogLog** | Approximate cardinality (12 KB = 2^64) | Unikátní návštěvníci (error < 1%) | +| **Stream** | Append-only log (Kafka-like) | Event store, messaging | + +**Eviction policies**: + +| Policy | Popis | Use case | +|--------|-------|----------| +| **noeviction** | Chyba při zápisu když je plno | Transakční data, neztrácet | +| **allkeys-lru** | LRU na všechny klíče | Obecná cache, standard | +| **allkeys-lfu** | LFU na všechny klíče | Často přistupovaná data | +| **volatile-lru** | LRU na klíče s TTL | Cache s expirací | +| **volatile-ttl** | Nejblíž k expiraci | Krátkodobá data | +| **allkeys-random** | Náhodný | Testování | + +**Redis Cluster vs Sentinel**: + +| Vlastnost | Redis Sentinel | Redis Cluster | +|-----------|---------------|---------------| +| **Škálování** | Read replicas (master + replica) | Data sharding (16384 hash slotů) | +| **Auto-failover** | Ano (Sentinel) | Ano (gossip-based) | +| **Multi-key ops** | Ano (transactiony na masteru) | Omezené (stejný hash slot) | +| **Client komunikace** | Přes Sentinel (deprecated) | Cluster nodes redirect (MOVED/ASK) | +| **Minimální uzly** | Master + Replica + 3 Sentinel | 3 masters (každý s replikou) | +| **Use case** | Vysoká dostupnost, single shard | Multi-shard, horizontální škálování | + +### Connection pooling + +| Pooler | DB | Typ | Protokol | +|--------|-----|-----|----------| +| **PgBouncer** | PostgreSQL | Proxy (transaction/session) | PostgreSQL wire | +| **RDS Proxy** | PostgreSQL, MySQL | Managed proxy | AWS | +| **ProxySQL** | MySQL | Proxy (advanced routing) | MySQL wire | +| **Odyssey** | PostgreSQL | Proxy (multithreaded) | PostgreSQL wire | +| **pgpool-II** | PostgreSQL | Proxy (replication, load balancing) | PostgreSQL wire | + +**PgBouncer režimy**: +- **Session pooling** — spojení drženo po celou dobu session (aplikace) → overhead +- **Transaction pooling** — spojení vráceno po dokončení transakce → efektivnější (vyžaduje bezstavovost) + +## Migrace dat + +### Schéma migrace (PostgreSQL / MySQL) + +``` +V1__initial_schema.sql +V2__add_users_table.sql +V3__add_email_index.sql +V4__add_orders_table.sql +``` + +### Zero-downtime migrace + +1. **Expand** — přidání nového sloupce/tabulky (aplikace toleruje oba stavy) +2. **Migrate** — backfill dat, update aplikace na nové schema +3. **Contract** — odstranění starého sloupce/tabulky + +### Nástroje detail + +| Nástroj | Jazyk | Strategie | Zero-downtime | Rollback | +|---------|-------|-----------|--------------|----------| +| **Flyway** | Java (multi-lang CLI) | Versioned SQL | Omezeně (jen additive) | `undo` (limited, enterprise) | +| **Liquibase** | Java (multi-lang CLI) | Changesets (XML/YAML/JSON/SQL) | Ano (changeset design) | `rollback ` | +| **Alembic** | Python | Auto-generation, versioned | Ano (branching) | `downgrade` | +| **Prisma Migrate** | TypeScript | Declarative schema → diff | Ano (shadow DB) | `migrate diff` | +| **gh-ost** | Go | Triggerless online DDL (MySQL) | Ano (binlog stream) | Ne (progresivní) | +| **pgroll** | Go | Online schema migrace (PG) | Ano (views, multiple versions) | Ano (okamžitý) | + +## Data consistency patterns + +| Pattern | Popis | Příklad | +|---------|-------|---------| +| **Strong consistency** | Po zápisu každý read vidí nejnovější data | Single DB, Raft, Spanner | +| **Eventual consistency** | Po zápisu se data časem propagují | DNS, DynamoDB (default), Cassandra | +| **Read-after-write** | Autor svůj zápis vždy vidí (ostatní eventual) | Sociální sítě, komentáře | +| **Causal consistency** | Kauzálně závislé operace viděny ve správném pořadí | COPS, Orbe, MongoDB (causal clusters) | +| **Monotonic reads** | Nevidíte starší data po tom, co jste viděli novější | Cassandra (MONOTONIC_READ consistency) | +| **Monotonic writes** | Zápisy od jednoho clienta v pořadí | Queue-based, single leader | + +## Storage engines — přehled + +### B-Tree vs LSM-Tree + +| Vlastnost | B-Tree | LSM-Tree | +|-----------|--------|----------| +| Zápis | In-place update (náhodný I/O) | Append-only (sekvenční I/O) | +| Čtení | Rychlé (přímo v page) | Pomalejší (merge z více SSTable) | +| Kompaktnost | Horší (page fragmentation) | Lepší (kompaktní SSTable) | +| Write amplification | Nižší | Vyšší (kompakce) | +| Read amplification | Nižší | Vyšší (bloom filtry pomáhají) | +| Typické DB | PostgreSQL, MySQL (InnoDB) | Cassandra, RocksDB, LevelDB | + +### Write-Ahead Log (WAL) + +- Append-only log pro crash recovery +- Každá změna se zapíše do WAL před aplikací na data page +- Checkpoint = bod, od kterého je WAL při recovery potřeba + +### MVCC (Multi-Version Concurrency Control) + +- Každá transakce vidí snapshot dat v okamžiku startu +- Staré verze řádků zůstávají v tabulce (vacuum/GC) +- Izolační úrovně: Read Committed, Repeatable Read, Serializable + +## Best practices + +- **Connection pooling** — PgBouncer, RDS Proxy, ProxySQL +- **Indexování podle query patternů** — nemít zbytečné indexy +- **Read replicas** pro reporting a analytiku +- **Backup & recovery** — point-in-time recovery (PITR), pravidelné testy +- **Query monitoring** — slow query log, pg_stat_statements, performance_schema +- **Encryption at rest & in transit** +- **Migrace v CI/CD** — součást pipeline, ne manuálně + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) diff --git a/DATACENTERS.md b/DATACENTERS.md new file mode 100644 index 0000000..4ace95f --- /dev/null +++ b/DATACENTERS.md @@ -0,0 +1,155 @@ +# 🏭 Datová centra + +## Tier klasifikace (TIA-942 / Uptime Institute) + +| Tier | Dostupnost | Downtime / rok | Redundance | +|------|-----------|----------------|------------| +| **Tier I** | 99.671 % | 28.8 h | N — bez redundance | +| **Tier II** | 99.741 % | 22.7 h | N+1 — redundantní komponenty | +| **Tier III** | 99.982 % | 1.6 h | N+1 — současně udržovatelné | +| **Tier IV** | 99.995 % | 26.3 min | 2N+1 — fault tolerant | + +## Klíčové subsystémy + +| Systém | Popis | +|--------|-------| +| **Power** | UPS, generátory (diesel), ATS, PDU, redundantní přívody (A/B feed) | +| **Cooling** | CRAC/CRAH, chilled water, free cooling, containment (hot/cold aisle) | +| **Fyzická bezpečnost** | Kamerový systém, biometric access, mantrap, bezpečnostní zámky racků | +| **Cabling** | Structured cabling (Cat6A/7/8, OM3/OM4 single-mode fiber), patch panely | +| **Fire suppression** | Poplach, inertní plyny (Novec, FM-200), VESDA (very early smoke detection) | +| **Monitoring** | DCIM (Data Center Infrastructure Management), SNMP, BMS (Building Management System) | + +## Aisle containment + +``` + ┌────────────────────────────────────┐ + │ Rack Row │ + │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ +Cold │ │ │ │ │ │ │ │ │ │ │ │ │ │ Cold +Aisle <──│ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ ──> Aisle + │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ +Hot │ │ │ │ │ │ │ │ │ │ │ │ │ │ Hot +Aisle ──>│ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ <── Aisle + └────────────────────────────────────┘ +``` + +## Environmental třídy (ASHRAE TC 9.9) + +ASHRAE Technical Committee 9.9 definuje teplotní a vlhkostní obálky pro IT zařízení v DC. + +| Třída | Teplota (doporučeno) | Teplota (allowable) | Použití | +|-------|---------------------|---------------------|---------| +| **A1** | 18-27 °C | 15-32 °C | Enterprise DC, přísná kontrola | +| **A2** | 18-27 °C | 10-35 °C | Běžné DC | +| **A3** | 18-27 °C | 5-40 °C | Volnější prostředí | +| **A4** | 18-27 °C | 5-45 °C | Maximální úspora chlazení | +| **H1** | 18-22 °C | 5-25 °C | High-density air-cooled (AI/ML) | + +- 5. edice (2021) přidala třídu H1 pro high-density a rozšířila liquid cooling W-třídy (W17, W27, W32, W40, W45, W+) +- 2024: nové S-třídy pro Technology Cooling System (TCS) chlazení kapalinou +- Vlhkost: doporučeno −9 °C DP až 70 % RH (při nízkých polutantech); max 50 % RH při vysoké korozivitě + +## Power + +### Power chain + +``` +Grid ──> UPS ──> PDU ──> Rack PDU ──> Server PSU + │ + └──> Generator (ATS přepíná při výpadku) +``` + +### Power calculation + +``` +Total Power = Σ(P_server + P_storage + P_network + P_cooling + P_losses) + +P_server = P_idle + (P_max - P_idle) × Utilization% +P_cooling = P_IT / PUE + +Příklad: + 100 serverů × 500 W (avg) = 50 kW IT load + PUE = 1.5 → celkem 75 kW + UPS + generátor → dimenzováno na 75 kW × 1.2 (safety factor) = 90 kW +``` + +### PUE (Power Usage Effectiveness) + +``` +PUE = Total Facility Energy / IT Equipment Energy +``` + +| PUE | Efektivita | Typ | +|-----|-----------|-----| +| 1.0-1.1 | Vynikající | Hyperscale (Google, Meta) | +| 1.1-1.3 | Velmi dobrý | Moderní DC | +| 1.3-1.6 | Dobrý / průměr | Enterprise DC | +| 1.6-2.0 | Podprůměr | Starší DC | +| >2.0 | Špatný | Legacy | + +### 3-phase vs Single-phase + +| Vlastnost | Single-phase (230 V) | 3-phase (400 V) | +|-----------|---------------------|-----------------| +| **Napětí** | 230 V (L-N) | 230/400 V (L-N/L-L) | +| **Výkon per feed** | ~7.4 kW (32 A) | ~22 kW (32 A, 3-f) | +| **Efektivita** | Nižší (více ztrát) | Vyšší (nižší proud) | +| **Use case** | Menší racky, office | Standard v DC, high-density | +| **PDU** | Single-phase (C13/C19) | 3-phase (C13/C19, 3-f monitoring) | + +### Rack power density + +| Kat. | Typ | kW/rack | Cooling | +|------|-----|---------|---------| +| Nízká | Office, storage | 1-3 kW | Air (free cooling) | +| Střední | Standard compute | 5-10 kW | Air (CRAC/CRAH) | +| Vysoká | GPU, HPC | 15-30 kW | Air + liquid assist | +| Ultra | AI/ML clusters | 40-100+ kW | Direct-to-chip / immersion | + +## Cooling + +### Chilled water vs Direct Expansion (DX) + +| Vlastnost | Chilled water (CW) | Direct Expansion (DX) | +|-----------|-------------------|----------------------| +| **Medium** | Voda + glycol | Freon (R134a, R410A) | +| **CRAC/CRAH** | CRAH (Coolant-based) | CRAC (refrigerant compressor) | +| **Efektivita** | Vyšší (COP 5-7) | Nižší (COP 2-4) | +| **Komplexita** | Vyšší (chillers, pumps, pipes) | Jednodušší | +| **Use case** | Velké DC, enterprise | Menší DC, edge, retrofit | + +### Free cooling + +- **Air-side** — nasávání venkovního vzduchu při vhodné teplotě (filtrace, humidifikace) +- **Water-side** — využití chladné vody z venkovních chillerů (strainer cycle) +- **Klimatické pásmo** — free cooling využitelný ~2000-8000 hodin/rok podle lokality +- **Hybrid** — kombinace free cooling + mechanical cooling + +### Liquid cooling + +| Typ | Popis | Use case | +|-----|-------|----------| +| **Direct-to-chip (cold plate)** | Kapalina na chladiči CPU/GPU, voda nebo dielektrikum | AI/ML, HPC, GPU clustery | +| **Immersion cooling** | Server ponořen v dielektrické kapalině (single-phase/two-phase) | High-density, bitcoin mining | +| **Rear-door heat exchanger** | Chladič na zadních dveřích racku (voda) | Retrofity, medium-density | +| **Coolant Distribution Unit (CDU)** | Distribuce chladiva mezi racky, monitoring teploty | Standard pro liquid cooling | + +## Monitoring disků — S.M.A.R.T. + +Self-Monitoring, Analysis and Reporting Technology — prediktivní monitoring HDD/SSD. + +| Klíčový atribut | ID | Popis | +|----------------|----|-------| +| Reallocated Sectors Count | 5 | Počet přemapovaných sektorů (nárůst = konec disku) | +| Power-On Hours | 9 | Celková doba provozu v hodinách | +| Reported Uncorrectable Errors | 187 | Nekorigovatelné chyby (červená kontrolka) | +| CRC Error Count | 199 | Chyby na SATA lince (kabel/controller) | +| SSD Life Left | 231 | % zbývající životnosti SSD | +| Media Wearout Indicator | 233 | Celkový zápis do NAND | + +Nástroje: `smartmontools` (smartctl, smartd), Prometheus exporter (`node_exporter`), OTeL collector. + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/GPU.md b/GPU.md new file mode 100644 index 0000000..6f914af --- /dev/null +++ b/GPU.md @@ -0,0 +1,126 @@ +# 🎮 GPU — architektura, modely, virtualizace + +## GPU modely + +### NVIDIA + +| GPU | Architektura | VRAM | HBM | FP16 (TFLOPS) | FP8 (TFLOPS) | Interconnect | TDP | +|-----|-------------|------|-----|--------------|-------------|-------------|-----| +| **A100** | Ampere (2020) | 40/80 GB | HBM2e | 312 | — | NVLink 3 (600 GB/s) | 400 W | +| **H100** | Hopper (2022) | 80 GB | HBM3 | 1000 | 2000 (sparse) | NVLink 4 (900 GB/s) | 700 W | +| **H200** | Hopper (2023) | 141 GB | HBM3e | 1650 | ~3300 | NVLink 4 (900 GB/s) | 700 W | +| **B200** | Blackwell (2024) | 192 GB | HBM3e | 2250 | ~4500 | NVLink 5 (1800 GB/s) | 700 W | +| **B100** | Blackwell (2024) | 192 GB | HBM3e | ~1800 | ~3600 | NVLink 5 | 700 W | +| **GB200** | Blackwell (2024) | — | HBM3e | 4500 (dual) | 9000 (dual) | NVLink 5 | 2700 W | + +### AMD + +| GPU | Architektura | VRAM | HBM | FP16 (TFLOPS) | Interconnect | TDP | +|-----|-------------|------|-----|--------------|-------------|-----| +| **MI250X** | CDNA 2 (2021) | 128 GB | HBM2e | 383 | Infinity Fabric | 500 W | +| **MI300X** | CDNA 3 (2023) | 192 GB | HBM3 | ~2600 | Infinity Fabric (896 GB/s) | 750 W | +| **MI350** | CDNA 4 (2025) | 288 GB | HBM3e | ~3500 | Infinity Fabric | 750 W | + +## GPU interconnects + +| Technologie | Poskytovatel | Bandwidth | Topologie | Use case | +|------------|-------------|-----------|-----------|----------| +| **NVLink 4** | NVIDIA | 900 GB/s (18× 50 GB/s) | GPU-GPU direct | AI training (H100, H200) | +| **NVLink 5** | NVIDIA | 1800 GB/s (18× 100 GB/s) | GPU-GPU direct | AI training (B200, GB200) | +| **Infinity Fabric** | AMD | 896 GB/s | GPU-GPU + CPU-GPU | AI training (MI300X, MI350) | +| **NVSwitch** | NVIDIA | 900 GB/s per GPU (NVLink) | Full-mesh (256 GPU) | DGX SuperPOD, HGX | +| **InfiniBand (NDR)** | NVIDIA/Mellanox | 400 Gbps per port | GPU-NIC direct, RDMA | Distributed training, HPC | +| **PCIe 5.0** | Standard | 63 GB/s per x16 | CPU-GPU | Inference, rendering | +| **Ethernet (RoCE v2)** | Standard | 100/200/400 GbE | GPU-NIC, RDMA over converged ethernet | AI inference, storage | + +### GPU direct communication + +``` +GPU 0 ──NVLink── GPU 1 GPU 0 ───PCIe─── CPU ───PCIe─── GPU 1 + │ │ + │ │ +NVSwitch InfiniBand + │ │ + │ │ +GPU 2 ──NVLink── GPU 3 GPU 2 ───PCIe─── CPU ───PCIe─── GPU 3 + +NVLink topologie (GPU direct) PCIe topologie (CPU mediated) +``` + +- **GPU Direct RDMA** — GPU ↔ NIC bez CPU (InfiniBand, RoCE) +- **GPU Direct Storage** — GPU ↔ NVMe bez CPU (NVIDIA Magnum IO) +- **NVSwitch** — full bisection bandwidth mezi všemi GPU v node + +## Virtualizace GPU + +| Technologie | Popis | GPU support | Use case | +|------------|-------|-------------|----------| +| **NVIDIA vGPU (Grid)** | Časové slicing + dedikované profily | A-series (VDI), Q-series (pro viz), B-series (AI) | VDI, virtualizované AI | +| **NVIDIA MIG** | Hardwarové partition GPU | A100 (7 inst.), H100/H200/B200 | AI inference, multi-tenant GPU | +| **AMD MxGPU** | SR-IOV, hardwarové partition | AMD MI (pro), Radeon Pro | VDI, cloud gaming | +| **Intel SG (SG1)** | SR-IOV, hardwarové partition | Intel SG1, Flex, Arc | VDI, media transcoding | +| **GPU passthrough** | Dedikovaný GPU celé VM (VFIO-pci) | Všechny GPU | AI training, HPC, nejvyšší výkon | + +### MIG partition table (A100 / H100) + +| GPU | Partition profile | GPU Memory | Compute units | +|-----|------------------|-----------|--------------| +| **A100 80 GB** | 1g.5gb | 5 GB | 1 | +| A100 80 GB | 2g.10gb | 10 GB | 2 | +| A100 80 GB | 3g.20gb | 20 GB | 3 | +| A100 80 GB | 7g.40gb | 40 GB | 7 | +| A100 80 GB | Full (7× 1g) | 7 × 5 GB | 7 instances | +| **H100 80 GB** | 1g.6gb+me | 6 GB | 1 | +| H100 80 GB | 2g.12gb+me | 12 GB | 2 | +| H100 80 GB | 3g.24gb+me | 24 GB | 3 | +| H100 80 GB | 7g.80gb | 80 GB | 7 | + +## GPU use cases + +### AI Training + +- **Modely**: LLM (70B-405B+), vision, multimodal +- **GPU**: H100, B200, GB200, MI300X +- **Interconnect**: NVLink 5 / Infinity Fabric (v rámci node), InfiniBand NDR (mezi nody) +- **Parallelism**: Data Parallel (DDP), Tensor Parallel (TP), Pipeline Parallel (PP), Fully Sharded (FSDP) +- **Framework**: PyTorch (NCCL), JAX (XLA), DeepSpeed, Megatron-LM +- **Tipy**: + - GB200: 2× B200 propojené NVLink, 8 GPU → 4 GB200 + - DGX B200 / HGX B200: standardní building block + - InfiniBand: fat tree topology pro all-reduce optimalizaci + +### AI Inference + +- **Modely**: LLM serving, embedding, image gen +- **GPU**: A100, H200, B200 (larger VRAM pro větší modely) +- **Techniky**: MIG partition, TensorRT-LLM, vLLM, Triton Inference Server +- **Kvantizace**: FP8, INT8, INT4 → nižší VRAM, vyšší throughput +- **Latency**: batch size optimalizace, dynamic batching, continuous batching +- **Scale**: on-prem (2-32 GPU) / cloud (elastic) + +### VDI (Virtual Desktop Infrastructure) + +- **GPU**: NVIDIA A16 (1 GPU = 16 users), A10 (1 GPU = 4 users) +- **Technologie**: vGPU (Grid), AMD MxGPU +- **Protokoly**: VMware Blast, Citrix HDX, Microsoft RDP, PC-over-IP (HP Teradici) +- **Use case**: CAD (CATIA, SolidWorks), Office, engineering, healthcare (PACS) + +### Rendering a VFX + +- **GPU**: NVIDIA RTX 6000 Ada, RTX A6000, AMD Radeon Pro W7900 +- **Rendering**: Blender (Cycles/OptiX), V-Ray, Octane Render, Redshift +- **Denoising**: AI-accelerated denoising na GPU +- **Farm rendering**: Deadline, Qube! (job scheduler) + +## GPU server form factors + +| Form factor | GPU count | Power | Cooling | Příklad | +|------------|-----------|-------|---------|---------| +| **1U** | 1-2 | 700-1400 W | Air (high-RPM) | Dell XR4510c | +| **2U** | 4-8 | 3-6 kW | Air / Liquid | Dell R760xa, HPE DL380a | +| **4U** | 8-10 | 5-8 kW | Liquid | NVIDIA DGX H100, Dell R760xa | +| **8U / Chassis** | 8-16 | 10-20 kW | Liquid (CDU) | NVIDIA HGX, Supermicro SYS-821GE | + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/HARDWARE.md b/HARDWARE.md new file mode 100644 index 0000000..9220112 --- /dev/null +++ b/HARDWARE.md @@ -0,0 +1,10 @@ +# 🔧 Hardware a servery + +Tento soubor byl rozdělen do samostatných oblastí: + +| Oblast | Soubor | +|--------|--------| +| 🔧 Server hardware — komponenty a architektura | [SERVER-HW.md](SERVER-HW.md) | +| 🎮 GPU — architektura, modely, virtualizace | [GPU.md](GPU.md) | +| ⚙️ Server configuration — best practices podle workloadu | [SERVER-CONFIG.md](SERVER-CONFIG.md) | +| 📦 Provisioning — boot, instalace, správa serverů | [PROVISIONING.md](PROVISIONING.md) | diff --git a/HYPERVISORS.md b/HYPERVISORS.md new file mode 100644 index 0000000..8d1f975 --- /dev/null +++ b/HYPERVISORS.md @@ -0,0 +1,154 @@ +# 🖥️ Hypervisory a virtualizační platformy + +## Typy hypervisorů + +| Typ | Popis | Příklady | +|-----|-------|----------| +| **Type 1** (bare-metal) | Běží přímo na hardware | VMware ESXi, Microsoft Hyper-V, KVM, Xen | +| **Type 2** (hosted) | Běží nad OS hostitele | VirtualBox, VMware Workstation, Parallels | + +## Přehled platforem + +| Platforma | Hypervisor | Licence | Poznámka | +|-----------|-----------|---------|----------| +| **VMware vSphere** | ESXi | Proprietary (Subscription od 2024) | Tržní lídr, široká adopce | +| **Microsoft Hyper-V** | Hyper-V | Windows Server / standalone | Integrace s Azure, SCVMM | +| **Proxmox VE** | KVM + LXC | Open source | Debian-based, web UI, levný | +| **Red Hat OpenStack / oVirt** | KVM | Open source | Otevřená alternativa, komplexní | +| **Nutanix AHV** | KVM (fork) | Součást Nutanix | Integrované HCI řešení | +| **XCP-ng / Xen Server** | Xen | Open source | Nástupce Citrix Hypervisor | +| **Oracle VM** | Xen | Proprietary | Oracle ekosystém | + +## Klíčové koncepty + +- **VM — Virtual Machine** — plná virtualizace, vlastní kernel +- **Container** — sdílený kernel hostitele, lehčí (Docker, LXC) +- **Paravirtualizace** — guest OS ví, že běží ve VM (lepší výkon I/O) +- **NUMA** — Non-Uniform Memory Access, optimalizace přidělování CPU/memory (viz [HARDWARE.md](HARDWARE.md#memory-a-numa)) +- **Overcommit** — přidělení více vCPU/RAM než je fyzicky (řízení poměru) +- **Live Migration** — přesun běžící VM mezi hosty (vSphere vMotion, Hyper-V Live Migration) +- **HA (High Availability)** — restart VM na jiném hostu při selhání +- **DRS / Load Balancing** — automatická distribuce VM podle vytížení + +## VMware vSphere + +### Cluster design + +- **Max velikost clusteru**: 64 hostů (vSphere 8), 96 hostů (vSphere 8 + enhanced) +- **Datastore limits**: max 256 datastorů na host, max 65 TB na VMFS-6 datastore +- **vSAN ready capacity**: doporučeno max 60-64 hostů na vSAN cluster +- **Fault domains** — rozdělení clusteru do skupin hostů (rack awareness), min 3 fault domains pro stetch cluster +- **Admission control** — rezervace resource pro HA failover: + - **Host failures cluster tolerates** — nejčastější (1-4 hosty) + - **Percentage of cluster resources** — rezervace % CPU/memory + - **Dedicated failover hosts** — vyhrazený host(y) pro HA +- **Cluster limits (vSphere 8)**: + - 512 VMs per host (max) + - 15 000 VMs per cluster (vCenter max) + - 300 hosts per cluster (vSphere 8, hardware vMotion) + +## Microsoft Hyper-V + +| Vlastnost | Hyper-V | Poznámka | +|-----------|---------|----------| +| **Max hostů v clusteru** | 64 (Windows Server 2025) | Shared Nothing Live Migration | +| **Max VM na host** | 1024 (WS 2022+) | Generace 2 VM | +| **Max vCPU per VM** | 240 (WS 2022+) | 64 hostů cluster | +| **Max RAM per VM** | 12 TB (WS 2022+) | Dynamická paměť | +| **Live Migration** | SMB, CSV, RDMA | Compressed nebo RDMA | +| **Storage** | CSV (Cluster Shared Volumes), ReFS | S2D pro HCI | +| **Nested Virtualization** | Ano | Intel VT-x / AMD-V | +| **SCVMM** | System Center VMM | Enterprise management, fabric, P2V | + +### Hyper-V vs VMware srovnání + +| Vlastnost | VMware vSphere | Microsoft Hyper-V | +|-----------|---------------|-------------------| +| **OS** | VMware ESXi (VMkernel) | Windows Server / Hyper-V Server | +| **Licence** | Per CPU (subscription) | Windows Server license / Datacenter | +| **Storage** | VMFS, NFS, vSAN, HCI | NTFS, ReFS, SMB, S2D | +| **Live Migration** | vMotion (cross-vSwitch, long distance) | Live Migration (SMB/RDMA) | +| **Storage Migration** | Storage vMotion (online) | Shared Nothing (datový disk) | +| **Replication** | vSphere Replication | Hyper-V Replica (ASR) | +| **Management** | vCenter, vSphere Client | SCVMM, Hyper-V Manager, Admin Center | +| **Linux support** | Výborný (open-vm-tools) | Dobrý (Linux Integration Services) | +| **TCO** | Vyšší | Nižší (s Windows licencí) | + +## KVM + +### Architektura + +``` +Hardware ──> QEMU (emulace I/O) + KVM (kernel module, virtualization) + │ + libvirt (API + management) + │ + ┌───────┼───────────┐ + virt-manager virsh openstack/proxmox +``` + +### Ladění + +- **CPU pinning** — `virsh vcpupin vm1 0 2` (vCPU 0 → physical core 2), zamezuje přepínání kontextu +- **Huge pages** — 2 MB / 1 GB stránky místo 4 KB, snížení výpadků TLB (VM s velkou RAM): `echo 2048 > /proc/sys/vm/nr_hugepages` +- **NUMA affinity** — VM pinned na jeden NUMA node (minimalizace cross-NUMA memory access) + - `numactl --cpunodebind=0 --membind=0` + - `virsh numatune vm1 --nodeset 0` +- **VirtIO** — paravirtualizované I/O (virtio-net, virtio-blk, virtio-scsi) pro lepší výkon +- **IO threads** — dedikovaná vlákna pro I/O emulaci QEMU + +### KVM tuning checklist + +- Ověřit HW virtualizaci: `lscpu | grep Virtualization` +- Naložit KVM moduly: `kvm`, `kvm_intel`/`kvm_amd`, `vfio-pci` +- Optimalizovat storage: raw/LVM (vyhnout se qcow2 u výkonových workloadů) + +## Storage v hypervizorech + +Viz také: [STORAGE.md](STORAGE.md) — detailní přehled storage protokolů a konfigurací. + +| Typ | Popis | Protokoly | +|-----|-------|-----------| +| **Local storage** | Disky přímo v serveru | SATA, SAS, NVMe | +| **Shared storage** | SAN / NAS přístupné všem hostům | Fibre Channel, iSCSI, NFS, SMB | +| **vSAN / HCI** | Hyperkonvergované úložiště (disky serverů = jediný pool) | VMware vSAN, Nutanix, StarWind | +| **Software-Defined** | SDS odděluje storage software od hardware | Ceph, GlusterFS, MinIO | + +## HCI detail + +| Vlastnost | Nutanix (AOS + AHV) | VMware vSAN | Azure Stack HCI | +|-----------|--------------------|-------------|----------------| +| **Hypervisor** | AHV (KVM fork), ESXi optional | ESXi (required) | Hyper-V | +| **Min. nodů** | 3 | 2 (witness) | 2 (witness) | +| **Max nodů** | 80+ | 64 | 16 (typical) | +| **Replikace** | 2 nebo 3 kopie + erasure coding | Mirroring (RAID 1), erasure coding | Mirroring + parity | +| **Deduplication** | Na úrovni clusteru (post-process) | Na úrovni disku (capacity tier) | ReFS (real-time) | +| **Compression** | Inline (AOS 6+) | Dedup + compression combined | ReFS | +| **Management** | Prism (web UI) | vCenter + vSAN UI | Windows Admin Center | +| **Licencování** | Per node subscription | Per CPU subscription | Per core subscription | +| **Ekosystém** | Built-in DR, backup, security | Broad ISV ecosystem | Azure integration | +| **Use case** | Enterprise VDI, general VM | VMware-centric shops | Azure hybrid, branch offices | + +## Virtualizační platformy — srovnání + +| Schopnost | VMware vSphere | Microsoft Hyper-V | Proxmox VE | Nutanix AHV | +|-----------|---------------|-------------------|------------|-------------| +| Live Migration | vMotion | Live Migration | Live Migration | Live Migration | +| HA | vSphere HA | Hyper-V HA | Proxmox HA | Built-in | +| DRS/balancování | DRS | SCVMM / AKS | HA skupiny | Built-in | +| Storage vMotion | ano | při vypnuté VM | ZFS send/recv | Built-in | +| Snapshoty | ano | ano | ano | ano | +| Backup API | CBT (Changed Block Tracking) | Hyper-V WMI / RCT | Proxmox Backup Server | Native | +| GPU passthrough | vGPU (NVIDIA Grid) | DDA | VFIO passthrough | GPU passthrough | +| Licencování | Per CPU / subscription | Windows Server licence | Open source (free) | Per node subscription | + +## OpenStack + +- **Distribuce**: Red Hat OpenStack, Canonical Charmed OpenStack +- **Služby**: Nova (compute), Cinder (block), Neutron (networking), Glance (images), Swift (object) +- **Use case**: Telco, velké private cloudy, MNO (MANO, NFVI) +- **Náročnost**: Vysoká — komplexní nasazení a údržba + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/INFRASTRUCTURE.md b/INFRASTRUCTURE.md new file mode 100644 index 0000000..7c7c737 --- /dev/null +++ b/INFRASTRUCTURE.md @@ -0,0 +1,10 @@ +# 🏗️ Infrastruktura + +Tento soubor byl rozdělen do samostatných oblastí: + +| Oblast | Soubor | +|--------|--------| +| 🖥️ Hypervisory a virtualizace | [HYPERVISORS.md](HYPERVISORS.md) | +| 🏭 Datová centra | [DATACENTERS.md](DATACENTERS.md) | +| 💾 Storage | [STORAGE.md](STORAGE.md) | +| 🔧 Hardware a servery | [HARDWARE.md](HARDWARE.md) | diff --git a/MONITORING.md b/MONITORING.md new file mode 100644 index 0000000..349cde1 --- /dev/null +++ b/MONITORING.md @@ -0,0 +1,386 @@ +# 📊 Monitoring a observabilita + +## OpenMetrics standard + +OpenMetrics (CNCF sandbox) je de-facto standard pro expozici metrik v cloud-native prostředí: + +- Podpora text representation i Protocol Buffers +- Základ pro Prometheus exposition format +- Specifikuje: counter, gauge, histogram, summary, gaugehistogram, statefulset +- `_total` suffix pro kumulativní hodnoty, `_bucket` pro histogramy +- Metadata: HELP, TYPE, UNIT, (časové razítko volitelné) + +Standard se vyvíjí v rámci [OpenObservability](https://github.com/OpenObservability/OpenMetrics). + +## Nové nástroje a trendy (2024–2026) + +| Nástroj | Popis | +|---------|-------| +| **Grafana Sigil** | AI observability pro LLM agenty (OTel-native) | +| **InfraLens** | eBPF-based, zero-instrumentation network observability | +| **Ingero** | GPU causal observability (eBPF, CUDA tracing) | +| **GreptimeDB** | Unified observability DB — nahrazuje Prometheus + Loki + ES | +| **Netdata** | AI-powered full-stack monitoring, 800+ integrations, edge ML | + +## Tři pilíře observability + +1. **Logs** — nestrukturovaná data o událostech (ERROR, WARN, INFO) +2. **Metrics** — číselná data v čase (latence, chybovost, vytížení CPU) +3. **Traces** — sledování požadavku napříč službami (distributed tracing) + +## SLI / SLO / SLA + +| Termín | Význam | Příklad | +|--------|--------|---------| +| **SLI** (Service Level Indicator) | Naměřená metrika | Latence p99 = 250ms | +| **SLO** (Service Level Objective) | Cílová hodnota | 99.9 % requestů < 300ms | +| **SLA** (Service Level Agreement) | Právní závazek | 99.95 % uptime | + +### Error budget + +`Error Budget = 100 % - SLO` +- Pokud je SLO 99.9 %, error budget je 0.1 % času +- Dokud error budget zbývá, tým může deployovat nové featury +- Po vyčerpání — freeze na deploye, priorita je stabilita + +## Pyramid of metrics — RED vs USE vs 4 Golden Signals + +### 4 Golden Signals (Google SRE) + +1. **Latency** — čas zpracování requestu (rozlišovat success vs error latenci) +2. **Traffic** — počet requestů / propustnost (RPS, QPS, throughput) +3. **Errors** — explicitní chyby (5xx, 4xx) i implicitní (success s chybným výsledkem) +4. **Saturation** — jak je služba "plná" (CPU, memory, queue depth, connection pool) + +### USE (pro infrastrukturu) +- **U**tilization — jak je resource vytížená (% času je aktivní) +- **S**aturation — kolik čeká ve frontě (run queue, I/O wait) +- **E**rrors — chyby (dropped packets, disk errors, OOM) + +### RED (pro služby) +- **R**ate — počet requestů za sekundu +- **E**rrors — počet chybných requestů +- **D**uration — latence (distribuce, percentily) + +| Metodologie | Zaměření | Typické metriky | +|------------|----------|----------------| +| **4 Golden Signals** | Služby + infrastruktura | Latence, RPS, errors, saturation | +| **USE** | Infrastruktura | CPU util, I/O saturace, disk errors | +| **RED** | Microservices | RPS, error rate, p50/p95/p99 latence | + +## PromQL příklady + +| Výraz | Popis | +|-------|-------| +| `rate(http_requests_total[5m])` | Počet requestů za sekundu (průměr za 5 min) | +| `increase(http_requests_total[1h])` | Celkový nárůst za 1 hodinu | +| `sum by (status) (rate(http_requests_total[5m]))` | Requesty agregované podle status kódu | +| `histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))` | p99 latence | +| `avg_over_time(cpu_usage[1h])` | Průměrné CPU vytížení za hodinu | +| `topk(5, sum(rate(http_requests_total[5m])) by (service))` | Top 5 služeb podle RPS | +| `max_over_time(memory_usage[24h])` | Maximální memory usage za 24h | +| `rate(node_network_drop_total[5m]) > 0` | Sítě s dropped pakety | +| `(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])))` | CPU utilization (1 - idle) | +| `delta(http_request_duration_seconds_sum[5m]) / delta(http_request_duration_seconds_count[5m])` | Průměrná latence | +| `absent(metric)` | Alert když metrika chybí | + +## Recording rules + +Pre-agregace často používaných PromQL dotazů pro snížení zátěže při dotazování. + +### Kdy použít +- Složité dotazy používané na více dashboardech +- Dotazy nad surovými daty s vysokým kardinality +- Často dotazované agregace (např. p99 latence za poslední měsíc) + +### Příklad + +```yaml +groups: + - name: service_rules + interval: 1m + rules: + - record: job:http_requests:rate5m + expr: sum(rate(http_requests_total[5m])) by (job) + - record: instance:cpu:utilization + expr: (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) + - record: service:http_latency:p99 + expr: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)) +``` + +- **record** — název nové metriky (konvence: `level:metric:aggregation`) +- **interval** — jak často se pravidlo vyhodnocuje (typicky 1-5 min) + +## Metriky — nástroje + +### Metrics +| Nástroj | Popis | +|---------|-------| +| Prometheus | Pull-based, time-series DB, silný query language (PromQL) | +| Grafana | Vizualizace, dashboardy, alerting | +| Datadog | SaaS, APM, logs, metrics v jednom | +| New Relic | APM, browser monitoring | +| CloudWatch | AWS nativní | +| Azure Monitor | Azure nativní | +| Google Cloud Ops | GCP nativní | + +### Logging +| Nástroj | Popis | +|---------|-------| +| ELK Stack | Elasticsearch, Logstash, Kibana | +| Loki | Grafana Loki — lightweight, Prometheus-like | +| Splunk | Enterprise log management | +| Fluentd / Fluent Bit | Log collector a forwarder | +| Vector | High-performance log/metric collector | + +### Tracing +| Nástroj | Popis | +|---------|-------| +| Jaeger | Open-source distributed tracing | +| Zipkin | Open-source distributed tracing | +| OpenTelemetry | Standard pro instrumentaci (logs, metrics, traces) | +| Datadog APM | SaaS tracing | +| AWS X-Ray | AWS tracing | + +## OpenTelemetry detail + +### Span attributes + +```yaml +resource: + attributes: + - service.name: "payment-service" + - service.version: "1.2.3" + - deployment.environment: "production" +scope: + name: "io.opentelemetry.payment" +spans: + - name: "processPayment" + kind: SPAN_KIND_INTERNAL + attributes: + - payment.method: "credit_card" + - payment.amount: 2499 + - payment.currency: "CZK" + events: + - name: "authorization.complete" + timestamp: 1717428000000000000 +``` + +### Context propagation (W3C TraceContext) + +- **`traceparent`** — hlavička nesoucí trace-id, span-id, trace flags + - Formát: `00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01` + - Version (00) | Trace-ID (32 hex) | Span-ID (16 hex) | TraceFlags (01 = sampled) +- **`tracestate`** — vendor-specific data, kompatibilní cross-provider +- Propagace probíhá přes HTTP hlavičky, gRPC metadata, message queue properties + +### Sampling + +| Typ | Popis | Use case | +|-----|-------|----------| +| **Head-based** | Rozhodnutí o sample na začátku trace (na základě ID) | Jednoduchý, deterministický | +| **Tail-based** | Rozhodnutí po dokončení trace (podle výsledku, latence) | Kvalitnější sample, komplexnější | + +- Tail-based sampling: často používán pro kritické trace (5xx, p99+, slow traces) +- Nástroje: Grafana Tempo (tail-based), Jaeger (head-based), OTel Collector (head + tail) + +## Alerting + +### Principy + +- **Alert na symptom, ne na příčinu** — "500 errors" místo "high CPU" +- **Reduce noise** — flapping alerts, alert fatigue +- **Runbook pro každý alert** — co dělat když alert pípne +- **Alert severity** — P0 (critical), P1 (high), P2 (medium), P3 (low) + +### Alertmanager (Prometheus) + +```yaml +route: + receiver: "team-pager" + group_by: ["alertname", "cluster"] + group_wait: 30s + group_interval: 5m + repeat_interval: 4h + routes: + - match: + severity: critical + receiver: "team-pager" + repeat_interval: 1h + - match: + severity: warning + receiver: "team-slack" + +receivers: + - name: "team-pager" + pagerduty_configs: + - routing_key: "" + severity: "{{ .CommonLabels.severity }}" + - name: "team-slack" + slack_configs: + - channel: "#alerts" + title: "{{ .GroupLabels.alertname }}" +``` + +**Koncepty**: +- **Grouping** — seskupování alertů podle labelů (snížení noise, např. všechny down instance v clusteru) +- **Inhibition** — potlačení méně závažných alertů při existenci závažnějšího (např. nodedown inhibuje pod alerty) +- **Silencing** — dočasné potlačení alertu (matching labels + duration) +- **Routing tree** — hierarchické routování podle label match (severity, service, team) + +### ESM (Event / Incident Management) + +- PagerDuty, Opsgenie, OnCall (Grafana) +- Escalation policies +- On-call rotations + +## Strukturované logování + +``` +{ + "timestamp": "2026-06-03T10:30:00Z", + "level": "ERROR", + "service": "payment-service", + "trace_id": "abc123", + "user_id": "u456", + "message": "Payment gateway timeout", + "duration_ms": 1200, + "error": { + "type": "TimeoutError", + "message": "Gateway did not respond in 1000ms" + } +} +``` + +### Povinná pole strukturovaného logu + +| Pole | Popis | Příklad | +|------|-------|---------| +| `timestamp` | ISO 8601 / RFC 3339 | `2026-06-03T10:30:00Z` | +| `level` | Log level (RFC 5424) | `ERROR`, `WARN`, `INFO`, `DEBUG` | +| `message` | Lidsky čitelná zpráva | `Payment processed` | +| `service` | Název služby | `payment-service` | +| `trace_id` | Korelace napříč službami | `abc123def456` | + +### RFC 5424 log levels + +| Číslo | Level | Použití | +|-------|-------|---------| +| 0 | EMERG | Systém nepoužitelný | +| 1 | ALERT | Nutná okamžitá akce | +| 2 | CRIT | Kritická chyba | +| 3 | ERROR | Chyba (ne kritická) | +| 4 | WARN | Varování | +| 5 | NOTICE | Normální, ale důležitá událost | +| 6 | INFO | Informační zpráva | +| 7 | DEBUG | Ladění (vypnuto v produkci) | + +### Correlation ID (traceparent) + +- Generován při vstupu do systému (API gateway, frontend, message consumer) +- Propagován v HTTP hlavičce `X-Correlation-ID` / `traceparent` +- Umožňuje spojit logy napříč microservices (→ Grafana Explore, Kibana Discover) +- Implementace: middleware v aplikaci, service mesh (Envoy), API gateway + +## Distributed tracing detail + +### Span kinds + +| Kind | Popis | Příklad | +|------|-------|---------| +| **CLIENT** | Volání downstream služby (outbound) | HTTP klient volá API | +| **SERVER** | Zpracování příchozího požadavku | HTTP handler | +| **INTERNAL** | Lokální operace v rámci služby | Výpočet, transformace | +| **PRODUCER** | Odeslání zprávy do fronty | Kafka producer | +| **CONSUMER** | Příjem zprávy z fronty | Kafka consumer | + +### Trace context chain + +``` +Trace: abc123 +├── Span: /checkout (SERVER, root) +│ ├── Span: validateCart (INTERNAL) +│ ├── Span: POST /orders (CLIENT → payment-service) +│ │ └── Span: /processPayment (SERVER) +│ │ ├── Span: authorizeCard (INTERNAL) +│ │ └── Span: chargeCard (CLIENT → bank-gateway) +│ │ └── Span: /charge (SERVER, external) +│ └── Span: sendConfirmation (PRODUCER → kafka) +│ └── Span: consumeConfirmation (CONSUMER → email-service) +``` + +- **W3C TraceContext** — standardizace cross-service tracing +- **Baggage** — přenos kontextových dat (tenant, user role) mezi spans + +## Grafana + +### Provisioning dashboards as code + +```yaml +apiVersion: 1 +providers: + - name: "default" + orgId: 1 + folder: "Services" + type: file + options: + path: /etc/grafana/provisioning/dashboards +``` + +Dashboards JSON v gitu → CI/CD → automatický import do Grafany. + +### Variables + +- **Query variable** — dynamické hodnoty (např. seznam service names z PromQL: `label_values(up, service)`) +- **Interval variable** — `$__auto_interval`, `$__interval` pro proměnlivý time range +- **Custom variable** — ruční seznam hodnot (env: prod, staging, dev) +- **Chained variable** — závislá proměnná (výběr namespace → zobrazí pody v namespace) + +### Annotations + +- Kreslení událostí do grafu (deploye, incidenty, config změny) +- Zdroje: Prometheus alerty, Loki logy, GitHub Actions, custom API +- Use case: "Deploy v 14:30 → spike v latenci v 14:31 → korelace" + +## On-call best practices + +### Escalation policies + +``` +Level 1: Primární on-call (reakce do 5 min) + └── timeout 15 min +Level 2: Sekundární / senior engineer (reakce do 15 min) + └── timeout 15 min +Level 3: Engineering manager / incident commander +``` + +### Incident severity matrix + +| Severity | Popis | Reakce | Komunikace | +|----------|-------|--------|------------| +| **P0 (Critical)** | Služba kompletně nedostupná, data loss, security breach | Ihned, 24/7 | Status page + Stakeholder update | +| **P1 (High)** | Major funkčnost degradovaná, část uživatelů postižena | Do 15 min | Slack channel + Tým lead | +| **P2 (Medium)** | Non-critical funkce nefunguje, workaround existuje | Do 1 h | Slack channel | +| **P3 (Low)** | Kosmetický problém, žádný dopad na uživatele | Next business day | Jira ticket | + +### Postmortem + +- **Blameless** — cílem je naučit se, ne obviňovat +- **Struktura**: Timeline, detection, root cause, resolution, action items +- **SRE princip**: každá incident → postmortem → systémové zlepšení +- **Nástroje**: Jira, Incident.io, PagerDuty postmortem, Google Docs + +## Logging patterns + +### Best practices + +- **Dashboard pro každou úroveň** — executive, service, troubleshooting +- **Syntetické monitoring** — Heartbeat checky, browser tests (Playwright, Cypress) +- **APM** — Application Performance Monitoring (databázové query, externí volání) +- **Anomaly detection** — ML-based detekce outlierů +- **Retention politika** — raw data krátce, agregace dlouhodobě +- **Jednotný formát logů** — JSON, strukturovaná data + +## Zdroje + +Odkazy, knihy a standardy: [sources/monitoring/sources.md](sources/monitoring/sources.md) diff --git a/NETWORKING.md b/NETWORKING.md new file mode 100644 index 0000000..ebfcf83 --- /dev/null +++ b/NETWORKING.md @@ -0,0 +1,396 @@ +# 🌐 Síťová architektura + +## Referenční model (TCP/IP) + +| Vrstva | Protokoly | Zařízení | +|--------|-----------|----------| +| Aplikační | HTTP/HTTPS, DNS, SMTP, SSH | — | +| Transportní | TCP, UDP | — | +| Síťová | IP, ICMP, BGP | Routery | +| Linková | Ethernet, ARP, VLAN | Switche | + +## TCP detail + +### 3-way handshake + +``` +Client Server + | | + | SYN (seq=x) | + |──────────────────────────────>| + | | + | SYN+ACK (seq=y, ack=x+1) | + |<──────────────────────────────| + | | + | ACK (seq=x+1, ack=y+1) | + |──────────────────────────────>| + | | + | << established >> | +``` + +- **SYN** — client odešle segment s příznakem SYN (Synchronize Sequence Number) +- **SYN-ACK** — server odpoví vlastním SYN + potvrzením clientova seq čísla +- **ACK** — client potvrdí, spojení je navázáno +- TCP Fast Open (TFO) — data v SYN paketu pro 0-RTT u opakovaných spojení + +### Flow control (sliding window) + +- **Receiver Window (rwnd)** — kolik dat je receiver ochoten přijmout +- **Sliding window** — sender udržuje okno nepotvrzených paketů +- Window scaling (RFC 1323) — umožňuje okno až 1 GB (místo 64 KB) +- Zero Window — receiver oznámí 0, sender zastaví, persist timer periodicky testuje + +### Congestion control + +| Algoritmus | Popis | Use case | +|-----------|-------|----------| +| **Cubic** | Výchozí v Linuxu (od kernel 2.6.19), kubická growth funkce | Obecné sítě, výchozí pro Internet | +| **BBR** (Bottleneck Bandwidth and RTT) | Model-based, měří bandwidth a RTT, ne packet loss | Vysokorychlostní sítě, YouTube, Google | +| **Reno** | Classic AIMD (Additive Increase Multiplicative Decrease) | Legacy, reference | +| **CDG** (CAIA Delay Gradient) | Delay-based, detekce congeste podle RTT gradientu | Videostreaming, real-time | + +BBRv2 (2024+) — zahrnuje ECN signalizaci, koexistenci s Cubic, lepší handling při loss. + +## DNS (Domain Name System) + +- **Record typy**: A, AAAA, CNAME, MX, TXT, NS, SRV, PTR, CAA, DS, DNSKEY, RRSIG, NSEC +- **DNS resolver**: rekurzivní dotaz přes hierarchii (root → TLD → authoritative) +- **Anycast DNS** — stejná IP z více lokací, směrování k nejbližší +- **DNS caching** — TTL řízení, cache poisoning ochrana (DNSSEC) +- **Cloud DNS** — Route53, Azure DNS, Cloud DNS + +### DNS lookup flow (krok za krokem) + +``` +1. Uživatel zadá "api.example.com" do prohlížeče +2. OS stub resolver zkontroluje lokální cache (/etc/hosts, systemd-resolved) +3. Pokud není v cache → dotaz na rekurzivní resolver (ISP / 8.8.8.8 / 1.1.1.1) +4. Resolver zkontroluje svou cache +5. Nenalezeno → resolver začne rekurzivní lookup: + a. Dotaz na root nameserver (.) → vrátí NS pro .com + b. Dotaz na .com TLD nameserver → vrátí NS pro example.com + c. Dotaz na autoritativní NS pro example.com → vrátí A záznam (IP) +6. Resolver uloží do cache (TTL), vrátí IP clientu +7. Client naváže TCP spojení na získanou IP +``` + +Celý proces typicky trvá 10–200 ms (s cache < 1 ms). + +### DNSSEC detail + +- **RRSIG** — digitální podpis pro každý RRset (Resource Record Set) +- **DNSKEY** — veřejný klíč zóny (ZSK = Zone Signing Key, KSK = Key Signing Key) +- **DS** (Delegation Signer) — hash DNSKEY předávaný do parent zóny (řetěz důvěry) +- **NSEC / NSEC3** — authenticated denial of existence (důkaz, že záznam neexistuje) +- **Chain of trust**: root → .com → example.com (cesta od trust anchor přes DS recordy) + +``` +Root DS → .com DNSKEY → .com DS → example.com DNSKEY → example.com RRSIG(A) +``` + +- Validace: resolver zkontroluje podpisy přes celý řetěz až k trust anchor + +### DNS-based service discovery + +| Mechanismus | Popis | Příklad | +|------------|-------|---------| +| **SRV record** | Service location (priority, weight, port, target) | `_http._tcp.example.com` | +| **Consul DNS** | Service discovery přes DNS rozhraní | `web.service.consul` | +| **CoreDNS** | Kubernetes DNS, plugin-based | `my-svc.my-namespace.svc.cluster.local` | +| **Kubernetes DNS** | Service discovery uvnitř clusteru (kube-dns / CoreDNS) | `svc.cluster.local` | +| **mDNS** (Multicast DNS) | Zero-config, lokální síť (Bonjour/Avahi) | `myprinter.local` | + +## Load Balancing + +| Typ | Vrstva (OSI) | Popis | +|-----|-------------|-------| +| L4 (NLB) | 4 | TCP/UDP, rychlý, nižší latence | +| L7 (ALB) | 7 | HTTP/HTTPS, path-based routing, sticky sessions | +| Global | DNS | Geo-routing, latency-based, weighted | + +### Algoritmy + +- Round Robin / Weighted RR +- Least Connections +- IP Hash (session persistence) +- Random + +### Health check typy + +| Typ | Popis | Vhodné pro | +|-----|-------|-----------| +| **TCP health check** | TCP handshake na cílový port | L4 NLB, základní check | +| **HTTP health check** | HTTP GET na URL, očekává 200 OK | L7 ALB, webové služby | +| **HTTPS health check** | HTTP + TLS handshake | Služby s TLS terminací | +| **gRPC health check** | gRPC Health/Check RPC (gRPC specific) | Microservices, gRPC služby | +| **ICMP ping** | Ping na cílovou IP | Základní konektivita | + +### Connection draining + +- **Connection draining** (AWS) / **Deregistration delay** — při odebrání targetu z ASG/LB se počká, až existující spojení skončí (configurable: 1-3600 s) +- **Slow start** — nový target dostává postupně více requestů (zabrání přetížení cold cache) + +### Cross-zone load balancing + +- **Enabled**: LB rovnoměrně rozděluje traffic napříč všemi AZ (i nerovnoměrný počet instancí) +- **Disabled**: traffic rozdělen rovnoměrně mezi AZ, pak v rámci AZ mezi instance +- AWS ALB/NLB: enabled by default (2022+), bez dalších poplatků + +## Firewally a bezpečnost + +- **Stateful firewall** — sleduje stav spojení (AWS Security Groups, Azure NSG) +- **Stateless firewall** — ACL (Network ACLs) +- **NGFW** — aplikační vrstva, IPS/IDS (Palo Alto, Fortinet) +- **WAF** — ochrana web aplikací (Cloudflare, AWS WAF, Azure WAF) + +## Network segmentation — Security Groups vs Network ACLs + +| Vlastnost | Security Group (SG) | Network ACL (NACL) | +|-----------|-------------------|-------------------| +| **State** | Stateful (automaticky povoluje return traffic) | Stateless (nutné explicitní pravidlo pro oba směry) | +| **Úroveň** | Instance / ENI | Subnet | +| **Pravidla** | Povolující (allow only) | Povolující i zakazující (allow + deny) | +| **Vyhodnocení** | Všechna pravidla se vyhodnotí (OR) | Pravidla od nejnižšího čísla (first match) | +| **Default** | All traffic denied (inbound), all traffic allowed (outbound) | All traffic denied (inbound i outbound) | +| **Podpora** | AWS, GCP (firewall rules), Azure (NSG) | AWS (NACL), GCP (firewall rules na subnet), Azure (NSG) | + +### Mikrosegmentace + +- **Zero Trust networking** — každý workload má vlastní security group / NGFW policy +- **Service mesh** — Istio, Linkerd, Consul Connect pro L7 mikrosegmentaci (mTLS, authorization policies) +- **Network policies** — Kubernetes NetworkPolicy pro segmentaci pod-to-pod trafficu +- **Tanzu / NSX** — micro-segmentation na hypervisor úrovni + +## VPN + +- **Site-to-Site** — IPSec, trvalé spojení mezi lokalitami +- **Client-to-Site** — OpenVPN, WireGuard, AnyConnect +- **Cloud VPN** — AWS VPN, Azure VPN Gateway, GCP Cloud VPN + +## CDN (Content Delivery Network) + +- Edge lokace pro cachování statického obsahu +- DDoS ochrana +- SSL/TLS termination na edge +- Poskytovatelé: CloudFront, Cloudflare, Akamai, Fastly + +## BGP a routing + +- **BGP** — protokol pro výměnu rout mezi AS (autonomními systémy) +- **ASN** — unikátní identifikátor sítě +- **iBGP** — interní BGP (uvnitř AS) +- **eBGP** — externí BGP (mezi AS) + +### BGP path selection algoritmus + +BGP router vybírá jedinou nejlepší cestu podle následujících kriterií (v pořadí priority): + +1. **WEIGHT** (Cisco-specific) — nejvyšší weight (local to router) +2. **LOCAL_PREF** — nejvyšší local preference (v rámci AS) +3. **Originate** — preferuje route originovanou lokálním routerem +4. **AS_PATH** — nejkratší AS_PATH length +5. **ORIGIN** — IGP < EGP < INCOMPLETE +6. **MED** (Multi-Exit Discriminator) — nejnižší MED (při stejném AS souseda) +7. **eBGP > iBGP** — preferuje externí BGP před interním +8. **Next-hop reachable** — cesta k next-hop musí být dosažitelná +9. **Neighbor IP** — preferuje cestu od routeru s nejnižší IP +10. **Router ID** — preferuje cestu s nejnižším Router ID + +### iBGP full mesh vs Route Reflectors + +| Aspekt | Full mesh | Route reflectors | +|--------|-----------|-----------------| +| **Počet session** | n(n-1)/2 | n (každý peer k RR) | +| **Při 100 routerech** | 4 950 session | 100 (při 1 RR) | +| **Škálování** | Špatné (kvadratické) | Lineární | +| **Redundance** | Přirozená | Nutné multi-RR + cluster | +| **Konfigurace** | Jednoduchá logika | RR pravidel (non-transitive) | + +BGP nutné znát pro: Cloud interconnects, MPLS L3VPN, SD-WAN, Data center fabrics (VXLAN + BGP EVPN) + +## Architektura VPC / Virtual Network + +``` +Internet ──┬── Internet Gateway (IGW) + │ + ┌──────▼──────┐ + │ Public Subnet │ + │ ┌──────────┐ │ + │ │ ALB/NAT │ │ + │ └────┬─────┘ │ + └───────┼────────┘ + │ + ┌───────▼────────┐ + │ Private Subnet │ + │ ┌──────────┐ │ + │ │ App │ │ + │ └────┬─────┘ │ + └───────┼─────────┘ + │ + ┌───────▼─────────┐ + │ Data Subnet │ + │ ┌────────────┐ │ + │ │ Database │ │ + │ └────────────┘ │ + └──────────────────┘ +``` + +### VPC design patterns + +**Three-tier architecture** +- Web tier (public subnets) → ALB +- App tier (private subnets) → auto-scaling +- Data tier (private subnets) → RDS / self-managed DB +- NAT Gateway / Instance v public subnet pro outbound traffic z app/data tier + +**VPC Peering** +- Přímé spojení mezi dvěma VPC (same nebo cross-account) +- Transitive peering **není** podporován (A→B, B→C neznamená A→C) +- Případy: sharing resources (LDAP, monitoring), service endpoints + +**Transit Gateway** +- Hub-and-spoke topologie, transitive routing +- Podporuje: VPC, VPN, Direct Connect, peering mezi TGW +- Route tables per attachment — izolace environmentů +- AWS TGW: 50 Gbps per attachment, až 5000 attachments + +**PrivateLink / VPC Endpoint** +- Privátní přístup k službám bez IGW, NAT, VPC peering +- **Interface Endpoint** (ENI v subnet) — pro AWS services, SaaS +- **Gateway Endpoint** (S3, DynamoDB) — route table entry, zdarma +- **AWS PrivateLink** — Service Consumer ↔ NLB/ENI ↔ Service Provider + +## MTU, jumbo frames, PMTUD + +| Síť | Standardní MTU | Jumbo frames | +|-----|---------------|--------------| +| Ethernet | 1500 B | 9001 B (AWS: 9001, Azure: 1400→9000) | +| GRE tunel | 1476 B | — | +| PPPoE | 1492 B | — | +| VLAN (802.1Q) | 1496 B | — | +| VXLAN | N/A (inner 1500 + 50) | 8950 B | + +**PMTUD** (Path MTU Discovery) +- Nastaví DF (Don't Fragment) bit v IP hlavičce +- Pokud cesta vyžaduje fragmentaci → ICMP "Fragmentation Needed" (Type 3, Code 4) +- Snižuje MTU, dokud paket neprojde +- Častý problém: ICMP blokovaný firewallem → black hole (TCP connection hangs) +- **Workaround**: MSS clamping (TCP MSS = MTU - 40) + +**Jumbo frames use cases** +- NFS / SMB (NAS) +- iSCSI / NVMe-oF (SAN) +- HPC / MPI workloads +- Data replication (DB, DRBD) +- Amazon EFS, AWS Managed Streaming pro Kafka + +## Anycast vs Unicast vs Multicast + +| Typ | Popis | Příklad | +|-----|-------|---------| +| **Unicast** | 1:1 — jeden source, jeden destination | Běžný TCP/IP provoz | +| **Multicast** | 1:N — jeden source, skupina receiverů | IPTV, mDNS, VXLAN BUM traffic | +| **Anycast** | 1:1 z nejbližšího — stejná IP z více lokací | DNS (8.8.8.8, 1.1.1.1), Cloudflare | +| **Broadcast** | 1:VŠICHNI — všechna zařízení v síti | ARP, DHCP (omezeno na L2 broadcast doménu) | + +Anycast detail: +- Stejná IP prefix je anunciována z více lokací (BGP) +- Traffic jde k topologicky nejbližšímu uzlu (BGP path selection) +- **Výhody**: jednoduchá redundance, DDoS absorpce, nižší latence +- **Výzvy**: connection persistence (TCP), stateful anycast, routing convergence +- **Cloud**: Route53, CloudFront, Cloudflare, Google DNS + +## Cloud networking resilience (2026) + +Viz také: [CLOUD.md](CLOUD.md) — cloud architektura, multi-AZ, hybrid cloud konektivita. + +### Cell-based architektury + +- Izolace fault domain do "cell" (skupina AZ + services) +- Každá cell samostatně deploysovatelná, vlastní DB, vlastní LB +- Limit blast radius: selhání jedné cell neovlivní ostatní +- Implementace: AWS Cell-based architecture, Azure STAG (Scale Tier Availability Group) + +### DNS resilience + +- **Anycast DNS** — stejná IP z více regionů, směrování k nejbližšímu +- **DNS failover** — health checky automaticky odstraňují nedostupné endpointy +- **Multi-DNS provider** — Route53 + Cloudflare + UltraDNS pro eliminaci SPOF + +### Traffic engineering + +- **BGP optimization** — AS path prepend, MED, local pref pro řízení vstupního/výstupního trafficu +- **Global Load Balancing** — GSLB na DNS úrovni (latency-based, geo-proximity, weighted) +- **AIOps** — ML-based predikce traffic patternů a automatické škálování + +### Nové trendy + +- **Path Aware Networking** — aplikace si vybírá cestu sítí podle aktuálních podmínek +- **Segment Routing (SR-MPLS / SRv6)** — zjednodušení MPLS, programovatelné cesty +- **Zero Trust Networking** — mikrosegmentace, identity-based access, never trust / always verify + +## Best practices + +- **Segmentace sítě** — oddělení environmentů (dev/staging/prod), vrstev (web/app/db) +- **Least privilege access** — security groups povolují jen nutný provoz +- **Monitoring** — VPC Flow Logs, netflow, sFlow +- **Redundance** — multi-AZ, multi-region pro kritické služby +- **Encryption in transit** — TLS všude, mTLS pro service-to-service +- **DDoS protection** — AWS Shield, Azure DDoS Protection, Cloudflare + +## Zdroje + +Odkazy, knihy a standardy: [sources/networking/sources.md](sources/networking/sources.md) +- **MTU alignment** — konzistentní MTU napříč celou cestou, kontrola ICMP blokování pro PMTUD +- **IP planning** — RFC 1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), vyhnout se překryvům pro peering + +## TLS detail + +### TLS 1.3 handshake (1-RTT) + +``` +Client Server + | | + | ClientHello (key_share, sig_algs) | + |─────────────────────────────────────────>| + | | + | ServerHello + EncryptedExtensions | + | + Certificate + CertificateVerify | + | + Finished | + |<─────────────────────────────────────────| + | | + | Finished | + |─────────────────────────────────────────>| + | | + | << Application Data >> | +``` + +- **0-RTT** (early data) — client posílá data ihned s první zprávou (při opakovaném spojení s PSK) +- Riziko 0-RTT: replay attacks (HTTP GET je bezpečný, POST vyžaduje ochranu) +- Oproti TLS 1.2: odstraněny zastaralé ciphery, AEAD required, faster handshake (2 RTT → 1 RTT) + +### Cipher suites + +| Suite | Key exchange | Auth | Encryption | MAC | Status | +|-------|-------------|------|-----------|-----|--------| +| `TLS_AES_128_GCM_SHA256` | (EC)DHE | (EC)DHE | AES-128-GCM | AEAD | TLS 1.3 default | +| `TLS_AES_256_GCM_SHA384` | (EC)DHE | (EC)DHE | AES-256-GCM | AEAD | Vyšší bezpečnost | +| `TLS_CHACHA20_POLY1305_SHA256` | (EC)DHE | (EC)DHE | ChaCha20-Poly1305 | AEAD | Mobilní / bez AES-NI | +| `ECDHE-ECDSA-AES128-GCM-SHA256` | ECDHE | ECDSA | AES-128-GCM | AEAD | TLS 1.2 (PFS) | +| `ECDHE-RSA-AES128-GCM-SHA256` | ECDHE | RSA | AES-128-GCM | AEAD | TLS 1.2 (PFS) | + +PFS (Perfect Forward Secrecy) — při kompromitaci privátního klíče nelze dešifrovat dříve zachycený provoz (ECDHE + ephemeral klíče). + +### Certificate chain validation + +``` +1. Client obdrží certificate chain od serveru +2. Validace: + a. Datum: certifikát není expirovaný a je platný (notBefore, notAfter) + b. CRL / OCSP: certifikát není revokován (OCSP stapling pro snížení latence) + c. Signature chain: podpis každého certu v řetězu je ověřen veřejným klíčem vydavatele + d. Root CA: poslední cert v řetězu je důvěryhodný (v trust store klienta) +3. CN / SAN: doménové jméno v certifikátu musí odpovídat cílové doméně +``` + +Typický řetěz: `Leaf Cert → Intermediate CA → Root CA` (self-signed, v trust store). diff --git a/PROVISIONING.md b/PROVISIONING.md new file mode 100644 index 0000000..5fbb92d --- /dev/null +++ b/PROVISIONING.md @@ -0,0 +1,195 @@ +# 📦 Provisioning — boot, instalace, správa serverů + +## Síťový boot (PXE / iPXE) + +### PXE boot flow + +``` +1. Server power-on → PXE ROM v NIC / UEFI +2. DHCP Broadcast → DHCP server nabídne IP + next-server (TFTP) + boot file +3. TFTP stáhne pxelinux.0 (BIOS) / bootx64.efi (UEFI) +4. Načte konfiguraci (pxelinux.cfg/default nebo MAC/IP-based) +5. Stáhne kernel + initrd přes TFTP/HTTP (iPXE) +6. Kernel boot → automatická instalace (Kickstart / Preseed / AutoYaST) +``` + +### DHCP konfigurace (ISC DHCP) + +``` +subnet 10.0.0.0 netmask 255.255.255.0 { + next-server 10.0.0.10; # TFTP server + filename "ipxe.efi"; # Boot file (UEFI) + option domain-name-servers 10.0.0.10; + option routers 10.0.0.1; +} +``` + +### iPXE (moderní náhrada PXE) + +- HTTP místo TFTP (rychlejší, spolehlivější) +- HTTPS support (Image verification, secure boot) +- iSCSI boot, FCoE boot +- Scriptable: `chain http://boot.example.com/script.ipxe` +- Embedded: iPXE ROM flashnutá přímo do NIC + +### Vergleich PXE vs iPXE + +| Vlastnost | PXE | iPXE | +|-----------|-----|------| +| Protokol | TFTP (pomalý, 512B/blok) | HTTP/HTTPS/iSCSI | +| Šifrování | Ne | HTTPS, TLS | +| Scripting | Pouze menu | Plný scripting engine | +| Debugging | Omezený | Vestavěný shell | +| UEFI/BIOS | Oba | Oba | + +## Automatická instalace + +### Kickstart (RHEL/Alma/Rocky) + +``` +# Minimal kickstart pro RHEL 9 +text +url --url="http://10.0.0.10/install/rhel9" +lang en_US.UTF-8 +keyboard us +timezone Europe/Prague --isUtc + +rootpw --iscrypted $6$... + +%packages +@^minimal-environment +vim +net-tools +%end + +%post +echo "node001" > /etc/hostname +%end + +reboot +``` + +### Preseed (Debian/Ubuntu) + +``` +d-i debian-installer/locale string en_US.UTF-8 +d-i keyboard-configuration/xkb-keymap us +d-i netcfg/choose_interface select auto +d-i netcfg/get_hostname string node001 +d-i clock-setup/utc boolean true +d-i time/zone string Europe/Prague + +d-i partman-auto/method string regular +d-i partman-auto/choose_recipe select atomic + +d-i passwd/root-login boolean true +d-i passwd/root-password password securepass +d-i passwd/root-password-again password securepass + +d-i pkgsel/include string openssh-server vim +d-i finish-install/reboot_in_progress note +``` + +## Metal as a Service + +### MAAS (Canonical) + +- **Discovery**: DHCP → PXE boot → hardware detection (CPU, RAM, disk, MAC) +- **Komisionování**: node projde commissioning, uloží inventory do DB +- **Deploy**: obraz OS (Ubuntu, RHEL, ESXi) nahrán na disk → reboot +- **Integrace**: Juju, OpenStack, Kubernetes (Charmed Kubernetes) +- **Networking**: VLAN, subnet, DNS/DHCP management, BGP peering + +### Digital Rebar / RackN + +- **Provisioning**: workflow-based (stages: discovery → firmware → OS → config) +- **Multi-cloud**: bare metal + cloud + edge +- **Template**: šablony pro OS deployment (RHEL, Ubuntu, VMware) +- **API**: plně REST API, Terraform provider + +## Management API — Redfish + +### Standard DMTF + +REST API (JSON) → nástupce IPMI. + +| Endpoint | Účel | +|----------|------| +| `/redfish/v1/Systems/` | Server management (power, boot, inventory) | +| `/redfish/v1/Chassis/` | Fyzický hardware (PSU, fan, temp, sensors) | +| `/redfish/v1/Managers/` | BMC (iLO, iDRAC, XClarity) | +| `/redfish/v1/UpdateService/` | Firmware updates | +| `/redfish/v1/EventService/` | Event subscription (webhook) | + +### Redfish příklady + +``` +# Power on server +POST /redfish/v1/Systems/1/Actions/ComputerSystem.Reset +Body: {"ResetType": "On"} + +# Set boot override (one-shot PXE) +PATCH /redfish/v1/Systems/1 +Body: {"Boot": {"BootSourceOverrideTarget": "Pxe", "BootSourceOverrideEnabled": "Once"}} + +# Get sensor data +GET /redfish/v1/Chassis/1/Thermal +→ {"Temperatures": [{"Name": "CPU1", "ReadingCelsius": 45}], "Fans": [...]} +``` + +### IPMI (legacy) + +- Port 623/UDP (RMCP) +- `ipmitool power on/off/status` +- `ipmitool sensor list` +- `ipmitool chassis bootdev pxe` +- Serial over LAN: `ipmitool sol activate` + +## Terraform pro provisioning + +``` +# Terraform provider pro VMware vSphere +provider "vsphere" { + user = var.vsphere_user + password = var.vsphere_password + vsphere_server = var.vsphere_server +} + +resource "vsphere_virtual_machine" "web" { + name = "web-${count.index}" + resource_pool_id = data.vsphere_resource_pool.pool.id + datastore_id = data.vsphere_datastore.ds.id + num_cpus = 4 + memory = 16384 + guest_id = "rhel9_64Guest" + network_interface { network_id = data.vsphere_network.net.id } + disk { label = "os", size = 80 } +} +``` + +Více v [CICD.md](CICD.md#infrastructure-as-code). + +## Firmware management + +- **BIOS/UEFI settings**: profilový update při provisioningu (Redfish `PATCH /Systems/1/Bios`) +- **Firmware updates**: Redfish UpdateService, SUU (Dell), SUM (HPE), SMM (Supermicro) +- **Lifecycle Controller** (Dell LC): integrovaný OS pro firmware management +- **Baseline management**: udržovat konzistentní firmware verze napříč fleetem +- **Boot: UEFI vs Legacy BIOS**: + - **UEFI**: Secure Boot, GPT, větší disky, rychlejší boot + - **Legacy BIOS**: MBR, kompatibilita, limit 2 TB boot disk + +## Configuration management (post-provisioning) + +| Nástroj | Jazyk | Push/Pull | Use case | +|---------|-------|-----------|----------| +| **Ansible** | YAML | Push (SSH) | General config management, ad-hoc | +| **Puppet** | Ruby DSL | Pull (agent) | State management, enterprise | +| **Chef** | Ruby DSL | Pull (agent) | Compliance, infrastructure automation | +| **SaltStack** | YAML/Python | Both (salt-minion) | High-speed config, event-driven | + +Více v [CICD.md](CICD.md). + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef31ea4 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# Infrastrukturní architektura — Knowledge Base + +Přehled témat, principů a best practices pro návrh a provoz infrastruktury. + +## Obsah + +| Oblast | Soubor | Popis | +|--------|--------|-------| +| ☁️ Cloud architektura | [CLOUD.md](CLOUD.md) | AWS/Azure/GCP, hybrid cloud, multi-cloud, well-architected framework | +| 🌐 Síťová architektura | [NETWORKING.md](NETWORKING.md) | DNS, load balancing, firewall, VPN, CDN, BGP, TCP/IP | +| 📊 Monitoring a observabilita | [MONITORING.md](MONITORING.md) | Logging, metrics, tracing, alerting, SLI/SLO/SLA | +| 🔄 CI/CD a DevOps | [CICD.md](CICD.md) | Pipelines, GitOps, IaC (Terraform, Pulumi), konfigurace | +| 🗄️ Databázová architektura | [DATABASES.md](DATABASES.md) | SQL/NOSQL, sharding, replikace, caching, migrace | +| 🖥️ Hypervisory | [HYPERVISORS.md](HYPERVISORS.md) | VMware, Hyper-V, KVM, Proxmox, virtualizační platformy | +| 🏭 Datová centra | [DATACENTERS.md](DATACENTERS.md) | Tier klasifikace, power, cooling, Aisle containment, ASHRAE | +| 💾 Storage | [STORAGE.md](STORAGE.md) | SAN/NAS/DAS/object, RAID, SDS, Ceph | +| 🔧 Server hardware | [SERVER-HW.md](SERVER-HW.md) | CPU (Xeon/EPYC), RAM, PCIe, NUMA, TDP, BMC, storage controllers | +| 🔌 Server connectivity | [CONNECTIVITY.md](CONNECTIVITY.md) | Ethernet (1-800 GbE), FC SAN, iSCSI, NVMe-oF, SAS, NIC features | +| 🎮 GPU | [GPU.md](GPU.md) | NVIDIA/AMD GPU, NVLink, MIG/vGPU, AI training/inference | +| ⚙️ Server config | [SERVER-CONFIG.md](SERVER-CONFIG.md) | BIOS tuning, DB/hypervisor/K8s/storage best practices | +| 📦 Provisioning | [PROVISIONING.md](PROVISIONING.md) | PXE/iPXE, Kickstart, Redfish, Terraform, config management | +| 📋 Původní HARDWARE | [HARDWARE.md](HARDWARE.md) | Rozděleno na SERVER-HW, GPU, SERVER-CONFIG, PROVISIONING | +| 📋 Review workflow | [REVIEW.md](REVIEW.md) | Proces oponentury a kontroly obsahu | +| 📝 ADR template | [templates/ADR.md](templates/ADR.md) | Architecture Decision Record template | + +## Zdroje + +Raw referenční data (dokumentace, knihy, standardy) podle oblastí: +- [sources/cloud/](sources/cloud/), [sources/networking/](sources/networking/), [sources/monitoring/](sources/monitoring/) +- [sources/cicd/](sources/cicd/), [sources/databases/](sources/databases/), [sources/infrastructure/](sources/infrastructure/) + +## Principy + +- **Dostupnost** — SLA, redundance, failover, multi-AZ/region +- **Škálovatelnost** — horizontalní vs. vertikální, auto-scaling +- **Bezpečnost** — defense in depth, least privilege, zero trust +- **Náklady** — FinOps, right-sizing, reserved instances +- **Operability** — observabilita, automation, dokumentace diff --git a/REVIEW.md b/REVIEW.md new file mode 100644 index 0000000..ed11bd1 --- /dev/null +++ b/REVIEW.md @@ -0,0 +1,89 @@ +# 📋 Review workflow — Oponentura a kontrola obsahu + +## Proces + +``` +Draft ──→ Self-review ──→ Peer review ──→ Approval ──→ Merged + ↑ │ + └────────────── Feedback loop ───────────────────────┘ +``` + +## Fáze + +### 1. Draft + +- Autor vytvoří nový obsah / upraví existující +- Označí soubory jako `[draft]` v poznámce commit message +- Cíl: zachytit myšlenky, strukturu a fakta + +### 2. Self-review (autor) + +- [ ] Je obsah **srozumitelný**? Pochopí to junior? +- [ ] Jsou **fakta správná**? Ověřit proti sources / oficiální dokumentaci +- [ ] Jsou uvedeny **zdroje**? (odkazy v `sources/`) +- [ ] Je **struktura konzistentní** se zbytkem KB? +- [ ] Jsou **zkratky** vysvětleny? +- [ ] **Pravopis a gramatika** +- [ ] Odpovídá **tón** — faktický, bez subjektivních názorů +- [ ] Obsahuje **actionable best practices**, nejen teorii + +### 3. Peer review (kolega / oponent) + +- Autor zažádá o review (PR / issue / @mention) +- Oponent kontroluje: + - **Odborná správnost** — jsou data a koncepty validní? + - **Úplnost** — není něco důležitého vynecháno? + - **Nestrannost** — neupřednostňuje jeden vendor bezdůvodně? + - **Aktuálnost** — nejsou informace zastaralé? + +**Review template:** + +``` +## Review: [název souboru] + +### Odborná správnost +- [ ] Fakta jsou správná +- [ ] Doporučení jsou vhodná +- [ ] Uvedené zdroje jsou relevantní + +### Struktura a forma +- [ ] Logické členění +- [ ] Konzistentní formátování +- [ ] Jazyk je srozumitelný + +### Připomínky +- [ ] [připomínka 1] +- [ ] [připomínka 2] + +### Verdikt +- [ ] Schvaluji +- [ ] Schvaluji s výhradami (viz připomínky) +- [ ] Zamítnuto (důvod: …) +``` + +### 4. Approval + +- Schvaluje: autor + minimálně 1 peer reviewer +- Po schválení se obsah považuje za `[done]` +- Změny po schválení vyžadují nový review cyklus + +### 5. Merged / Published + +- Obsah je považován za aktuální a důvěryhodný +- Pokud je zdroj označen `[done]` v `sources/`, je to potvrzení zpracování + +## Stavy souborů + +| Status | Význam | +|--------|--------| +| `[draft]` | Rozpracováno, neprošlo review | +| `[in-review]` | Probíhá peer review | +| `[done]` | Schváleno, aktuální | +| `[outdated]` | Zastaralé, čeká na revizi | +| `[deprecated]` | Nahrazeno jiným dokumentem | + +## Pravidelná revize + +- **Kvartálně** — kontrola aktuálnosti celé KB +- **Trigger** — nová verze nástroje, změna architektury, EOL technologie +- Každý soubor by měl mít v patičce **datum poslední revize** diff --git a/SERVER-CONFIG.md b/SERVER-CONFIG.md new file mode 100644 index 0000000..fab9d8e --- /dev/null +++ b/SERVER-CONFIG.md @@ -0,0 +1,285 @@ +# ⚙️ Server configuration — best practices podle workloadu + +## Obecná BIOS/UEFI nastavení + +| Nastavení | Doporučení | Zdůvodnění | +|-----------|-----------|------------| +| **Boot mode** | UEFI | Secure Boot, GPT, větší disky | +| **Power profile** | Performance / OS Control | Max výkon, C-States disabled | +| **Hyper-Threading** | Enabled | +30-50 % throughput pro multi-thread | +| **Virtualization** | Enabled (VT-x/AMD-V) | Nutné pro hypervisor, containers | +| **SR-IOV** | Enabled | GPU, NIC passthrough | +| **NUMA** | Enabled | NUMA-aware scheduling | +| **ACPI** | Enabled | Power management, OS-level | +| **Security Boot** | Enabled | Secure boot chain | +| **TPM** | Enabled | Measured boot, key storage | + +--- + +## 1. Databázové servery + +### Volba CPU + +| DB typ | CPU preference | Zdůvodnění | +|--------|---------------|------------| +| **OLTP** (PostgreSQL, MySQL) | High clock, moderate cores | Nízká latence na transakci, limited parallelism | +| **OLAP** (ClickHouse, Snowflake) | Many cores, AVX-512 | Columnstore, high parallelism | +| **In-memory** (Redis, Memcached) | High clock, low cache latency | Single-threaded (Redis), RAM bandwidth | +| **Document** (MongoDB) | Balance (clock × cores) | Mixed workload | +| **Distributed** (Cassandra, Scylla) | Many cores, high cache | Shard-per-core (Scylla), compaction | + +### Storage layout + +``` +Mount point FS RAID Disk type Účel +───────────── ───── ───── ────────── ────────────────── +/ ext4 1 (mirror) 2× SSD OS, binární soubory +/data xfs 10 (stripe) 4-8× NVMe Databázová data +/wal xfs 1 (mirror) 2× NVMe Write-ahead log (PostgreSQL) +/tmp tmpfs — RAM Dočasné soubory +``` + +### PostgreSQL specific + +| Parametr | Doporučení | Poznámka | +|----------|-----------|----------| +| `shared_buffers` | 25 % RAM | Cache databázových bloků | +| `effective_cache_size` | 75 % RAM | Odhad OS cache pro query planner | +| `work_mem` | 4-64 MB per operation | SORT, HASH JOIN (correlate s max_connections) | +| `maintenance_work_mem` | 1-10 % RAM | VACUUM, CREATE INDEX, ANALYZE | +| `wal_buffers` | 64-256 MB | Write-ahead log buffer | +| `max_connections` | 50-500 | Connection pooling (PgBouncer) | +| `random_page_cost` | 1.1 (NVMe), 4 (HDD) | Index scan cost (NVMe = téměř seq scan) | +| `effective_io_concurrency` | 200 (NVMe), 2 (HDD) | Parallel I/O | + +### MySQL / MariaDB specific + +| Parametr | Doporučení | Poznámka | +|----------|-----------|----------| +| `innodb_buffer_pool_size` | 70-80 % RAM | Hlavní cache InnoDB | +| `innodb_log_file_size` | 1-4 GB | Redo log, čím větší tím lepší write perf | +| `innodb_flush_log_at_trx_commit` | 1 (ACID) / 2 (perf) | 1 = fsync každou transakci | +| `innodb_io_capacity` | 2000 (NVMe) / 200 (HDD) | IOPS limit | +| `innodb_write_io_threads` | 4-8 | Parallel write threads | +| `max_connections` | 100-500 | Connection pooling doporučen | + +### MongoDB specific + +| Parametr | Doporučení | Poznámka | +|----------|-----------|----------| +| **WiredTiger cache** | 50-80 % RAM | Storage engine cache | +| **WiredTiger compression** | Snappy / Zstd | Komprese disku (zlib je pomalý) | +| `filesystem` | XFS | Doporučený FS (ext4 OK, NTFS ne) | +| **ReadConcern/WriteConcern** | majority/majority | Pro důležitá data | + +### Kernel tuning pro DB + +``` +# /etc/sysctl.d/99-database.conf + +vm.swappiness = 1 # Minimalizuj swap, preferuj cache +vm.dirty_ratio = 30 # % RAM before background flush +vm.dirty_background_ratio = 5 # Start flush at 5 % +vm.nr_hugepages = 0 # Huge pages pokud DB podporuje (PostgreSQL, MongoDB) +net.core.rmem_max = 134217728 +net.core.wmem_max = 134217728 +net.ipv4.tcp_rmem = 4096 87380 134217728 +net.ipv4.tcp_wmem = 4096 65536 134217728 +net.core.somaxconn = 4096 + +# I/O scheduler (NVMe = none, SSD = mq-deadline, HDD = kyber/bfq) +# echo none > /sys/block/nvme0n1/queue/scheduler +``` + +--- + +## 2. Hypervisor host (ESXi / KVM / Hyper-V) + +### CPU a NUMA + +| Nastavení | Doporučení | Poznámka | +|-----------|-----------|----------| +| **Overcommit ratio** | 1:1 až 4:1 (vCPU:pCPU) | Podle workloadu (1:1 DB, 4:1 web) | +| **NUMA-aware sizing** | VM ≤ 1 NUMA node | Cross-NUMA penalty ~1.5-2× latence | +| **CPU pinning** | Dedikované VM: ano | Zamezí context switching | +| **C-States** | Disabled (in BIOS) | Nižší latence, vyšší spotřeba | +| **P-State** | OS control / Performance | HW power management | +| **Hyper-Threading** | Enabled | Více vCPU, watch for noisy neighbor | + +### Storage pro hypervisor + +``` +VM storage: +├── OS datastore RAID 1 (2× SATA SSD) — ESXi boot, images +├── VM datastore (gold) RAID 10 (4× NVMe) — critical VMs, DB +├── VM datastore (silver) RAID 5 (6× SAS SSD) — general VMs +└── VM datastore (bronze) RAID 6 (8× SATA HDD) — backup, archive + +Swap datastore: 1× NVMe nebo SATA SSD (dedikovaný) +``` + +### Network design + +| Traffic | VLAN | Speed | NIC teaming | +|---------|------|-------|-------------| +| **Management** | Mgmt VLAN | 1 GbE | Active/Passive | +| **VM traffic** | VM VLANs | 25/100 GbE | LACP (802.3ad) | +| **Storage** | Storage VLAN | 25/100 GbE | LACP / RDMA | +| **vMotion** | vMotion VLAN | 25/100 GbE | Dedikovaný, multi-NIC | +| **FT (Fault Tolerance)** | FT VLAN | 10 GbE | Dedikovaný, low latency | + +### BIOS pro hypervisor + +| Nastavení | Hodnota | Zdůvodnění | +|-----------|---------|------------| +| Hyper-Threading | Enabled | Vyšší VM density | +| Virtualization Technology | Enabled | VT-x/AMD-V | +| VT-d / IOMMU | Enabled | Passthrough, SR-IOV | +| Power Management | Performance / OS | Minimalizace latence VM | +| C-States | Disabled | Nižší latence VM exit | +| NUMA | Enabled | NUMA-aware VM placement | +| SR-IOV | Enabled | NIC/GPU virtualizace | + +--- + +## 3. Kubernetes node + +### Node profily + +| Role | CPU | RAM | Storage | Network | Use case | +|------|-----|-----|---------|---------|----------| +| **General purpose** | 16-32 cores | 64-128 GB | 1× NVMe OS + 1×NVMe local | Web, API, microservices | +| **Memory optimized** | 32-64 cores | 256-512 GB | 1× NVMe OS + 2×NVMe local | In-memory cache, DB | +| **Compute optimized** | 64-128 cores | 128-256 GB | 1× NVMe OS | Batch, CI/CD | +| **GPU node** | 32-64 cores | 512-1024 GB | 1× NVMe OS + 4-8×NVMe local | AI/ML training, inference | +| **Storage node** | 16-32 cores | 64-128 GB | 4-12× NVMe/SATA (Ceph/Longhorn) | SDS, persistent volumes | + +### Kernel tuning + +``` +# /etc/sysctl.d/99-kubernetes.conf +net.bridge.bridge-nf-call-iptables = 1 +net.bridge.bridge-nf-call-ip6tables = 1 +net.ipv4.ip_forward = 1 +net.ipv4.conf.all.forwarding = 1 + +# Connection tracking (pro NodePort, Service) +net.netfilter.nf_conntrack_max = 2097152 +net.netfilter.nf_conntrack_tcp_timeout_established = 86400 + +# File watchers (pro kubelet, containerd) +fs.inotify.max_user_instances = 8192 +fs.inotify.max_user_watches = 524288 + +# Memory management +vm.swappiness = 0 +vm.overcommit_memory = 1 # Allow overcommit (CRI-O, containerd) +vm.panic_on_oom = 0 +kernel.panic = 10 +kernel.panic_on_oops = 1 +``` + +### Container storage + +| Typ | Doporučení | Poznámka | +|-----|-----------|----------| +| **OS disk** | RAID 1 (2× NVMe) | Ext4/XFS, 100-200 GB | +| **Container runtime image** | RAID 1 (2× NVMe) | /var/lib/containerd, 200-500 GB | +| **Local PV** | Single NVMe | Raw device, no RAID | +| **Rook/Ceph OSD** | Raw NVMe/SATA | HBA/IT mode, no RAID | +| **Longhorn** | Raw NVMe/SATA | Ext4/XFS per volume | + +--- + +## 4. Storage server (Ceph / MinIO / NAS) + +### Ceph OSD node + +| Komponenta | Doporučení | Poznámka | +|-----------|-----------|----------| +| **CPU** | 1-2 cores per OSD | Do 12 OSD na node (24 cores) | +| **RAM** | 4-8 GB per OSD + OS | BlueStore cache, 16-64 GB min | +| **Network** | 2× 25/100 GbE | Public + Cluster network | +| **Storage** | 10-12× NVMe/SATA SSD OSD | HBA/IT mode, žádný RAID | +| **OS disk** | 2× SATA SSD RAID 1 | OS, Ceph MON/MGR | + +**BIOS pro Ceph:** +- SATA/NVMe: AHCI/NVMe mode (ne RAID) +- C-States: Disabled (nižší latence OSD) +- NUMA: Enabled +- Power: Performance + +### MinIO node + +| Komponenta | Doporučení | +|-----------|-----------| +| **CPU** | 8-16 cores (32+ pro erasure coding) | +| **RAM** | 32-64 GB + 1 GB per 1 TB storage | +| **Storage** | 4-16× NVMe (direct, no RAID) | +| **Network** | 2× 25/100 GbE | +| **OS** | Ubuntu / RHEL, XFS (pro data) | + +### NAS (TrueNAS / FreeNAS) + +- **ZFS**: RAID-Z1/Z2/Z3, compression (lz4, zstd), dedup +- **ARC cache**: 1 GB per 1 TB storage (max 64 GB) +- **L2ARC**: NVMe cache (optional, read-heavy) +- **SLOG**: NVDIMM / Optane (sync write, ZIL) +- **Network**: 2-4× 10/25 GbE LACP + +--- + +## 5. Web / API servery + +| Parametr | Doporučení | +|----------|-----------| +| **CPU** | High clock, 8-32 cores | +| **RAM** | 32-128 GB | +| **Storage** | 2× NVMe RAID 1 (OS + app) | +| **OS** | Ubuntu / RHEL, optimized kernel | +| **Network** | 2× 10/25 GbE (bonding) | + +**Kernel tuning:** +``` +net.ipv4.tcp_tw_reuse = 1 +net.ipv4.tcp_fin_timeout = 15 +net.core.somaxconn = 65535 +net.ipv4.tcp_max_syn_backlog = 65535 +net.core.netdev_max_backlog = 65535 +``` + +--- + +## Rychlý decision tree — výběr serveru + +``` +Jaký workload? +│ +├── Databáze (OLTP) +│ → EPYC, high clock, 8-16 GB/core, RAID10 NVMe, huge pages +│ +├── Databáze (OLAP) +│ → Xeon AMX/AVX-512, 16-64 GB/core, many cores +│ +├── Virtualizace +│ → EPYC, many cores, 4-8 GB/core, shared storage (SAN/NFS/vSAN) +│ +├── Kubernetes +│ → EPYC, balance, 2-4 GB/core, local NVMe +│ +├── AI/ML training +│ → GPU node (H100/B200), NVLink, InfiniBand, liquid cooling +│ +├── AI/ML inference +│ → A100/H200, MIG, large VRAM, PCIe 5.0 +│ +├── Storage (Ceph/SDS) +│ → EPYC (PCIe lanes), HBA mode, 4-8 GB/OSD +│ +└── Web / API + → EPYC, high clock, 2-4 GB/core, 10 GbE + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) +``` diff --git a/SERVER-HW.md b/SERVER-HW.md new file mode 100644 index 0000000..cc9a357 --- /dev/null +++ b/SERVER-HW.md @@ -0,0 +1,329 @@ +# 🔧 Server hardware — komponenty a architektura + +## Form faktory + +| Typ | Popis | Výhody | Nevýhody | +|-----|-------|--------|----------| +| **Rack (1U/2U/4U)** | Standardní rack mount, šířka 19" | Široká škála konfigurací, jednoduchá výměna | Omezený počet PCIe slotů v 1U | +| **Blade** | Modulární server do chassis (HPE Synergy, Dell MX) | Vysoká hustota, sdílené napájení/chlazení | Vendor lock-in, vyšší cena chassis | +| **Tower** | Samostatně stojící skříň | Tichý, rozšiřitelný | Zabírá místo, není rack-optimized | +| **Edge / Micro** | Malý, nízká spotřeba, industriální provedení | Odolnost vůči prostředí, nízký odběr | Omezený výkon, méně PCIe | + +## Procesory (CPU) + +### Intel Xeon vs AMD EPYC + +| Vlastnost | Intel Xeon (6. gen Granite Rapids) | AMD EPYC (5. gen Turin) | +|-----------|-----------------------------------|------------------------| +| **Max jader** | 128 (P-cores) | 192 (Zen 5c) / 128 (Zen 5) | +| **PCIe lanes** | 80-96 per socket | 128 per socket | +| **Memory channels** | 8 (DDR5) | 12 (DDR5) | +| **Max memory** | 4 TB | 6 TB+ | +| **Cache L3** | ~200 MB | ~384 MB | +| **AVX-512** | Ano (full width) | Ano (256bit) | +| **AMX (matrix)** | Ano (AMX, Intel AMX) | Ne | +| **TDP** | 350-500 W | 360-500 W | +| **Infrastructure** | Intel QuickAssist, DSA, IAA | AMD Infinity Architecture | +| **Use case** | AI inference, networking, HPC | Virtualizace, databáze, general purpose | + +### CPU selection guide + +| Workload | Doporučený CPU | Zdůvodnění | +|----------|---------------|------------| +| **Databáze (OLTP)** | EPYC (high core count, more memory channels) | Více PCIe lanes pro NVMe, vyšší memory bandwidth | +| **Databáze (OLAP/DW)** | Xeon (AVX-512, AMX) | Vektorové instrukce pro analytické dotazy | +| **Virtualizace** | EPYC (více jader, nižší TCO) | Vyšší core density, nižší cena per core | +| **HPC / AI training** | Xeon + GPU (AMX pro preprocessing) | AMX pro data preprocessing, GPU pro training | +| **Web / API servery** | EPYC (good perf/core, low TDP variants) | Dobrý poměr výkon/W | +| **Storage** | EPYC (128 PCIe lanes pro NVMe) | Maximum NVMe disků | + +## Operační paměť (RAM) + +### Typy DIMM + +| Typ | Popis | Use case | Server support | +|-----|-------|----------|---------------| +| **RDIMM** (Registered) | Registrovaná, buffer adresových linek (1 register) | Standardní serverová paměť | Všechny servery | +| **LRDIMM** (Load-Reduced) | Snížená elektrická zátěž (2 registry — data + adresy) | Vysokokapacitní konfigurace (více DIMMů na channel) | Enterprise, 4R+ | +| **NVDIMM** (Non-Volatile) | Bateriově zálohovaná DRAM + flash | Write cache, metadata, persistence | Legacy (Intel Optane PMEM) | +| **3D XPoint / Optane** | PCM-based persistence (ukončeno Intelem) | Legacy | Intel-only, ukončeno | + +### DDR5 vs DDR4 klíčové rozdíly + +| Vlastnost | DDR4 | DDR5 | +|-----------|------|------| +| **Channel architektura** | 1× 64-bit channel per DIMM | 2× 32-bit sub-channel per DIMM | +| **Bank groups** | 4 (single rank) | 8 (single rank) | +| **Burst length** | 8 (BL8) | 16 (BL16) | +| **On-die ECC** | Ne | Ano (pro opravu bitových chyb v DRAM) | +| **PMIC** | Na motherboard | Na DIMM (power management IC) | +| **VDD** | 1.2 V | 1.1 V | +| **RCD** | 1× RCD per DIMM | 2× RCD (jeden na sub-channel) | +| **Max DIMM capacity** | 64 GB (LRDIMM) | 256 GB (RDIMM 3DS) | +| **Max speed** | 3200 MT/s | 6400 MT/s (aktuálně 4800-5600) | + +### Memory rank — detail + +Rank = sada DRAM čipů na DIMMu, které jsou přístupné současně (64bit data + 8bit ECC). + +| Rank | Počet DRAM čipů (x8) | Kapacita DIMM (typ.) | Popis | +|------|---------------------|---------------------|-------| +| **Single Rank (1R)** | 8-9 | 8-32 GB | Všechny DRAM čipy v jedné bance | +| **Dual Rank (2R)** | 16-18 | 16-128 GB | Dvě banky, rank interleaving | +| **Quad Rank (4R)** | 32-36 | 64-256 GB (3DS) | Čtyři banky, vyšší kapacita | +| **Octa Rank (8R)** | 64-72 | 256 GB (3DS) | Nejvyšší kapacita, enterprise | + +**Rank interleaving**: Dual-rank DIMM může oslovovat dva ranking střídavě, což zvyšuje efektivní bandwidth (až o 5-15 % oproti single-rank při stejném taktu). + +**DDR5 rank vs DDR4**: DDR5 single-rank již obsahuje 8 bank groups (ekvivalent dual-rank DDR4), proto je rank upgrade u DDR5 méně výrazný než u DDR4. + +**Pravidlo**: Vždy preferovat dual-rank DIMMy před single-rank pro vyšší hustotu a bandwidth. Quad-rank a octa-rank pouze LRDIMM nebo 3DS. + +### Osazování DIMM — základní pravidla + +#### 1DPC vs 2DPC (DIMMs Per Channel) + +| Konfigurace | DIMMů na channel | Max speed DDR5 | Bandwidth | Kapacita | +|------------|-----------------|---------------|-----------|----------| +| **1DPC** | 1 | 4800-5600 MT/s | 100 % | Nižší | +| **2DPC** | 2 | 4000-4400 MT/s | ~80 % | Vyšší | + +**Důležité**: Při osazení 2 DIMMů na channel klesá rychlost pamětí. Např. Dell R760: +- 1DPC: 5600 MT/s (s 5th Gen Xeon) +- 2DPC: 4400 MT/s (vždy) + +#### Channel architecture (Intel Xeon 4th/5th Gen — 8 channels per CPU) + +``` +CPU 1 — Channel A [Slot A1 (white)] [Slot A9 (black)] 1DPC: osadit bílé sloty + ─ Channel B [Slot A7 (white)] [Slot A15 (black)] 2DPC: osadit bílé + černé + ─ Channel C [Slot A3 (white)] [Slot A11 (black)] + ─ Channel D [Slot A5 (white)] [Slot A13 (black)] + ─ Channel E [Slot A4 (white)] [Slot A12 (black)] + ─ Channel F [Slot A6 (white)] [Slot A14 (black)] + ─ Channel G [Slot A2 (white)] [Slot A10 (black)] + ─ Channel H [Slot A8 (white)] [Slot A16 (black)] +``` + +#### Channel architecture (AMD EPYC — 12 channels per CPU) + +``` +CPU 1 ─ Channel 0-11 (12× single channel, 2 DPC) + Slot A0 (P0) / Slot A1 (P1) — dle konkrétního serveru +``` + +AMD EPYC má 12 memory channels (vs Intel 8), což dává o 50 % vyšší teoretickou memory bandwidth. + +### Pravidla osazování od výrobců + +#### Dell PowerEdge (R660 / R760) + +| Počet DIMMů na CPU | 1DPC (bílé sloty) | 2DPC (bílé + černé) | Speed | +|-------------------|-------------------|---------------------|-------| +| **1 DIMM per CPU** | A1 (Channel A) | — | 5600 MT/s | +| **2 DIMMs per CPU** | A1, A7 | — | 5600 MT/s | +| **4 DIMMs per CPU** | A1, A7, A3, A5 | — | 5600 MT/s | +| **8 DIMMs per CPU** | A1-A8 (všechny bílé) | — | 5600 MT/s | +| **16 DIMMs per CPU** | A1-A8 (bílé) | A9-A16 (černé) | 4400 MT/s | + +**Klíčová pravidla dle Dell**: +1. Všechny DIMMy musí být DDR5 (nemíchat generace) +2. Nemíchat kapacity DIMMů (všechny stejné) +3. Nemíchat x4 a x8 DRAM chips +4. Nemíchat 3DS a non-3DS RDIMM +5. Pokud mícháte rychlosti DIMMů, všechny běží na nejnižší +6. Vyvážit kapacitu mezi procesory +7. Optimální konfigurace: 16× identický DIMM (1DPC na každém channelu) +8. Fault Resilient Memory (FRM): pouze 8 nebo 16 DIMMů na procesor + +#### HPE ProLiant (DL360 / DL380 Gen11) + +**Population order** (16 slotů na CPU, Intel): + +| DIMMů | Pořadí osazení | +|-------|---------------| +| 1 | 10 | +| 2 | 1, 3 | +| 4 | 1, 3, 7, 10 | +| 6 | 3, 5, 7, 10, 14, 16 | +| 8 | 1, 3, 5, 7, 10, 12, 14, 16 | +| 12 | 1, 2, 3, 5, 6, 7, 10, 11, 12, 14, 15, 16 | +| 16 | 1-16 | + +**Pravidla HPE SmartMemory**: +1. Nejkvalifikovanější konfigurace: 1DPC (bílé sloty) +2. 2DPC (černé sloty) až po osazení všech bílých +3. HBM + 4th Gen Intel: nepodporuje Hemi (hemisphere) a SGX +4. Heterogenní mix: vyšší rank count do bílých slotů +5. **Nemíchat**: 3DS s non-3DS, x4 s x8, různé ranky v channelu, 16 Gb / 24 Gb / 32 Gb DRAM + +### Memory population — decision flow + +``` +Kolik DIMMů na CPU? +│ +├── 1 DIMM → Channel A (slot 1), ztrácíte 87.5 % bandwidth +│ +├── 2 DIMMs → Channels A+B, stále ztráta 75 % bandwidth +│ +├── 4 DIMMs → Channels A,B,C,D, lepší, ale ne optimální +│ +├── 8 DIMMs → 1DPC na všech channel = MAX SPEED (5600 MT/s) +│ ✅ Doporučeno pro výkon +│ +├── 12 DIMMs → 8× 1DPC + 4× 2DPC = mixed speed (4400 MT/s) +│ +├── 16 DIMMs → 2DPC na všech channel = MAX KAPACITA (4400 MT/s) +│ ✅ Pro kapacitně náročné workloady +│ +└── Více než 16 → Pouze s LRDIMM / 3DS, speed penalty + +Závěr: 8 DIMMů na CPU (1DPC) = nejvyšší výkon + 16 DIMMů na CPU (2DPC) = nejvyšší kapacita +``` + +### Vliv konfigurace na výkon + +| Konfigurace | Relativní bandwidth | Latence | Use case | +|------------|-------------------|---------|----------| +| **1DPC, 8 ch, 5600 MT/s** (8 DIMM) | 100 % | Nejnižší | Databáze OLTP, HPC, real-time | +| **2DPC, 8 ch, 4400 MT/s** (16 DIMM) | ~78 % | +10-15 % | Virtualizace, VDI, in-memory DB | +| **Mixed 1+2DPC** (12 DIMM) | ~85 % | Střední | Kompromis kapacity/výkonu | +| **Unbalanced channels** | 50-70 % | Vysoká | **Vyhnout se** | + +**Doporučení výrobců:** +- **Dell**: 16× identických DIMMů (8 per CPU), 1DPC, 5600 MT/s = optimální výkon +- **HPE**: Vždy plnit bílé sloty první, pro max výkon 1DPC, pro max kapacitu 2DPC +- **Supermicro**: Sledovat konkrétní manual pro daný model (DSG, GPU, storage) +- **Lenovo**: Stejná pravidla jako Intel/AMD platforma — preferovat 1DPC + +### Memory sizing per workload + +| Workload | Poměr RAM/core | Typický pool | Doporučená konfigurace | +|----------|---------------|--------------|----------------------| +| Databáze (OLTP) | 8-16 GB/core, DB v RAM | 256 GB - 2 TB | 8× 32-64 GB RDIMM, 1DPC | +| Databáze (OLAP) | 16-64 GB/core, columnstore | 512 GB - 4 TB+ | 16× 64-128 GB RDIMM, 2DPC | +| Virtualizace (VM) | 4-8 GB/core, podle VM density | 256 GB - 2 TB | 8-16× 32-64 GB RDIMM | +| Kubernetes (general) | 2-4 GB/core | 64-256 GB | 8× 16-32 GB RDIMM, 1DPC | +| AI training (CPU preprocessing) | 2-4 GB/core | 128-512 GB | 8× 32-64 GB RDIMM, 1DPC | +| HPC | 1-2 GB/core | 64-128 GB | 8× 16 GB RDIMM, 1DPC, high-speed | +| In-memory DB (SAP HANA) | 8-32 GB/core | 1-6 TB+ | 16× 128-256 GB LRDIMM/3DS | + +## PCIe + +| Generace | Rok | Rychlost per lane | x16 propustnost | x24 (GPU) | +|----------|-----|-------------------|-----------------|-----------| +| **PCIe 3.0** | 2010 | 985 MB/s | 15.8 GB/s | 23.6 GB/s | +| **PCIe 4.0** | 2017 | 1.97 GB/s | 31.5 GB/s | 47.3 GB/s | +| **PCIe 5.0** | 2022 | 3.94 GB/s | 63 GB/s | 94.5 GB/s | +| **PCIe 6.0** | 2025 | 7.88 GB/s | 126 GB/s | 189 GB/s | + +**PCIe lane allocation**: +- GPU (x16): NVIDIA H100, AMD MI300X +- NVMe U.2 (x4): každý NVMe disk +- NIC 100 GbE (x16): dual-port 100 GbE +- RAID/HBA (x8): storage controller + +**CPU PCIe lane count**: +- Intel Xeon Scalable (4. gen): 64-80 lanes per socket +- AMD EPYC (4. gen Genoa): 128 lanes per socket +- Dual-socket: 256 lanes total + +## NUMA + +### Topologie + +``` +Socket 0 (NUMA node 0) Socket 1 (NUMA node 1) + ├── Cores 0-31 ├── Cores 32-63 + ├── Memory 0-256 GB ├── Memory 256-512 GB + ├── PCIe root complex (GPU, NVMe) ├── PCIe root complex (NIC, NVMe) + └── I/O hub └── I/O hub + │ │ + └───────── Infinity Fabric / UPI ──┘ +``` + +- **Local access** — CPU → vlastní memory (nízká latence, plná bandwidth) +- **Remote access** — CPU → druhý socket memory (vyšší latence, ~1.5×, nižší bandwidth) +- NUMA-aware aplikace: databáze, VM, DPDK, AI training + +### Cross-NUMA penalty + +| CPU | Local latency | Remote latency | Penalty | +|-----|--------------|----------------|---------| +| AMD EPYC (Genoa) | ~80 ns | ~150 ns | ~1.9× | +| Intel Xeon (Sapphire Rapids) | ~90 ns | ~160 ns | ~1.8× | + +## TDP a chlazení + +| CPU | TDP | Core count | Chlazení | +|-----|-----|-----------|----------| +| Intel Xeon Platinum 8480+ | 350 W | 56 | Air (high-performance) | +| Intel Xeon 6980P (Granite Rapids) | 500 W | 128 | Liquid recommended | +| AMD EPYC 9654 (Genoa) | 360 W | 96 | Air / Liquid | +| AMD EPYC 9965 (Turin) | 500 W | 192 | Liquid recommended | + +### Cooling requirements per rack density + +| Rack density | kW/rack | Cooling | +|-------------|---------|---------| +| Low | 1-5 kW | Free air cooling | +| Medium | 5-15 kW | CRAC/CRAH, hot/cold aisle | +| High | 15-40 kW | In-row cooling, rear-door HX | +| Ultra | 40-100+ kW | Direct-to-chip liquid, immersion | + +## BMC a management + +| Vendor | BMC | API | Remote console | Features | +|--------|-----|-----|---------------|----------| +| **Dell** | iDRAC (9/10) | Redfish, RACADM | Virtual Console (HTML5) | Lifecycle Controller, SUU | +| **HPE** | iLO (5/6) | Redfish, iLOREST | Integrated Remote Console | Smart Update Manager, SUM | +| **Supermicro** | BMC / IPMI | IPMI, Redfish | IPMIView, HTML5 KVM | SuperDoctor, SSM | +| **Lenovo** | XClarity Controller | Redfish, IPMI | Remote Console | XClarity Administrator | +| **Cisco** | CIMC / UCSM | Redfish, XML API | KVM Console | UCS Manager, Intersight | + +### Standardní funkce +- Power: on/off/cycle/reset +- Boot: one-shot PXE, CD-ROM redirect, BIOS setup +- Monitoring: sensors (temp, voltage, fan, PSU) +- Alerting: SNMP traps, email, Redfish events +- Remote media: ISO mount přes network +- Serial over LAN (SOL) + +## Výrobci a řady + +| Výrobce | Rack series | Blade series | Management | +|---------|-------------|-------------|------------| +| **Dell** | PowerEdge R6xx/R7xx (R660, R760) | MX7000, FX2 | iDRAC, OpenManage Enterprise | +| **HPE** | ProLiant DL (DL360, DL380) | Synergy, BladeSystem | iLO, OneView, OpsRamp | +| **Cisco** | UCS C-Series (C240, C245) | UCS B-Series, Fabric Interconnect | UCS Manager, Intersight | +| **Lenovo** | ThinkSystem SR (SR630, SR650) | ThinkSystem SN | XClarity | +| **Supermicro** | SuperServer (pro GPU, storage, cloud) | FatTwin, MicroBlade | IPMI, SuperDoctor | + +## Server connectivity + +Detailní kapitola o síťové a storage konektivitě: [CONNECTIVITY.md](CONNECTIVITY.md) + +## Storage controllers + +| Controller | Typ | RAID | Cache | Protokol | +|-----------|-----|------|-------|----------| +| **Dell PERC** (H755, H965) | HW RAID | 0/1/5/6/10/50/60 | 4-8 GB NV | NVMe, SAS, SATA | +| **Broadcom / LSI** (9560, 9670) | HW RAID / HBA | 0/1/5/6/10/50/60 | 4 GB NV | NVMe, SAS, SATA | +| **Intel VROC** | SW RAID (CPU) | 0/1/5/10 | — | NVMe only | +| **M.2 HW RAID** (BOSS-S1) | HW RAID | 0/1 | — | 2× M.2 NVMe/SATA | + +### IT vs HW RAID mode + +| Vlastnost | IT (Initiator Target) / HBA | HW RAID | +|-----------|---------------------------|---------| +| **OS vidí** | Každý disk samostatně | RAID virtuální disk | +| **Caching** | OS cache | RAID controller cache (BBU) | +| **RAID** | Software (mdadm, ZFS, Ceph) | Hardware + SW driver | +| **Passthrough** | Ano | Ne | +| **Use case** | SDS (Ceph, MinIO), ZFS | VMware VMFS, Windows, legacy | +| **Battery/Backup** | Není potřeba | Write-back cache vyžaduje BBU | + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/STORAGE.md b/STORAGE.md new file mode 100644 index 0000000..e40564e --- /dev/null +++ b/STORAGE.md @@ -0,0 +1,90 @@ +# 💾 Storage infrastruktura + +## Typy úložišť + +| Typ | Popis | Latence | Use case | +|-----|-------|---------|----------| +| **DAS** (Direct Attached) | Disky přímo v serveru | <0.1 ms | OS, cache, lokální data | +| **SAN** (Storage Area Network) | Bloková zařízení po síti | <1 ms | Databáze, VM datastory | +| **NAS** (Network Attached Storage) | Souborový přístup (NFS, SMB) | 1-3 ms | Sdílené soubory, home dirs | +| **Object storage** | REST API, flat namespace | 10-100 ms | Zálohy, media, big data | + +## Protokoly + +| Protokol | Typ | Rychlost | Poznámka | +|----------|-----|----------|----------| +| **Fibre Channel** | SAN | 8/16/32/64 Gbps | Nízká latence, dedikovaná síť | +| **iSCSI** | SAN (IP) | 1/10/25 GbE | Levnější, po ethernetu | +| **NVMe-oF** | SAN (NVMe) | 25/50/100 GbE | Nejnižší latence, emerging | +| **NFS** | NAS | 1/10/25 GbE | Univerzální, jednoduchý | +| **SMB/CIFS** | NAS | 1/10/25 GbE | Windows native | +| **S3 API** | Object | — | Standard pro object storage | + +## RAID + +| RAID | Min. disků | Kapacita | Ochrana | Rychlost čtení | Rychlost zápisu | Use case | +|------|-----------|----------|---------|---------------|----------------|----------| +| **0** | 2 | 100 % | Žádná | N × (striping) | N × | Temp data, cache (risky) | +| **1** | 2 | 50 % | 1 disk | N × (mirror) | 1 × | OS disk, kritická data | +| **5** | 3 | 67-94 % | 1 disk | N-1 × | N-1 × (parity write penalty) | Univerzální file/VM storage | +| **6** | 4 | 50-88 % | 2 disky | N-2 × | N-2 × (double parity) | Velké kapacity, důležitá data | +| **10** | 4 | 50 % | 1/mirror | N × | N/2 × | Databáze, VM, high-performance | +| **50** | 6 | 67-94 % | 1/stripe | N-1 × | N-1 × | Large capacity + performance | +| **60** | 8 | 50-88 % | 2/stripe | N-2 × | N-2 × | Enterprise | + +### Stripe size + +- Malý stripe (16-64 KB) — lepší IOPS, horší throughput (databáze, OLTP) +- Velký stripe (128-1024 KB) — lepší throughput, horší IOPS (video, media, backup) +- Write hole u RAID 5/6: při výpadku během zápisu parity je metadata nekonzistentní (prevence: non-volatile cache, battery-backed RAID controller) + +## Software-Defined Storage (SDS) + +| Nástroj | Typ | Use case | +|---------|-----|----------| +| **Ceph** | Object/Block/File (RADOS) | Univerzální SDS, OpenStack, Kubernetes | +| **MinIO** | Object (S3 API) | High-performance S3, AI/ML data lake | +| **GlusterFS** | Distributed File | Shared filesystem, POSIX | +| **Longhorn** | Block (Kubernetes) | K8s PVC, mikroservisy | +| **Linstor** | Block (DRBD + LVM) | Linux SDS, Kubernetes | +| **VMware vSAN** | Block (HCI) | VMware ecosystem | +| **StarWind** | Block (HCI) | Hyper-V / VMware | + +### Ceph + +**Architektura**: + +``` +RADOS (Reliable Autonomic Distributed Object Store) + ├── Monitors (MON) — cluster map, quorum (3/5) + ├── Managers (MGR) — dashboard, balancer, orchestrator + ├── OSDs (Object Storage Daemons) — data + replikace + └── MDS (Metadata Server) — pouze pro CephFS +``` + +**CRUSH map** (Controlled Replication Under Scalable Hashing): + +- Algoritmus pro výpočet umístění dat (žádný centrální index) +- Vrstvy: Root → Datacenter → Rack → Host → OSD +- Failure domain: replikace napříč racky / hosty +- `ceph osd crush rule create-replicated replicated_rule default host` + +**Přístupová rozhraní**: + +| Rozhraní | Typ | Use case | +|----------|-----|----------| +| **RBD** (RADOS Block Device) | Block | VM images, Kubernetes PVC (csi-rbd) | +| **RGW** (RADOS Gateway) | Object (S3/Swift API) | S3-kompatibilní storage, backup | +| **CephFS** | File (POSIX) | Shared filesystem, home dirs | +| **NFS-Ganesha** | File (NFS) | NFS export přes CephFS | + +**Erasure coding**: + +- K+M (data + parity chunks), např. 8+3 (8 data, 3 parity) +- Prostorově efektivnější než 3× replikace (1.375× vs 3×) +- Vyšší CPU režie, nižší IOPS +- Doporučeno pro cold data (RGW) místo replikace + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) diff --git a/sources/.DS_Store b/sources/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2de18694a26909d62d2dcf4dfd390d006a285e8b GIT binary patch literal 6148 zcmeHKO>7%Q6n@Wf>)l$VlakUxiM(J@q~fYhXi)>Aa_v;mKN`hJlhPlv>mAxv*Sp5E zwhK{&xdQDGgaGx1pod-{{9cf_fW!#_f}W7LazWyZc=O|mD9IHe*eA{V-tX+bx4Sbt z0D#r5KLNl1z@i~ByM@>~B>i%%p^UMN5TcsH0~Z8v5MF;xbZSUDkapnT)&cqL+Thc7 zo6z{%_bb|77<=UX!fS_tNXq3OF*B0gv^kfvbNSqb`sKJ^Pu!#{s&40;)aK$i^oFwQ zoe6lq!NzKFl(<2}J1QaYIfa~G2qHi3SL1Hv3zb{f4%@cu2HU-~v~O~vJXLb`O+LC@ za+W4050Y|d>cH}{ZS5%Te`2g{PiAcKpQ224h{pXL;x*L61+n2^S5vO;D}JnsGGK;XSHxp&5tWRz#lBrW-c9 z6wHr=VLfjih7|z5ZNP;*zyO{8+iS)^dR=F0R6>%r2smT@tnqNn4m)AJmmdWA_ z?+8NM{`szLY;^nGV>|BI={&S||A9kK9$9S0trm|GF(0}f4;Okm_MA_*Q|oZz{+yue zo|lGGu^&7ikmU+Jh`GpZ@r%-Y(iO?+HjlXf{jPiO+kO9dzA#S#{OWu^@RQ4DUD4!` zA4HcHdVvVMkh9zYw!l#fRA7WK8A1LJNOBHf#2YF_!CFa!ky^g9xUNwco-{K!)ZK< z&)^KsVjbu30yfY^51SZbgl&8QJGg|)_%aUg6?_$6$7^^U-^91@ZF~pc#rN=i`~Yv_ zhq!{D;HUT*evV(^xA+6z#$WY4W`^(csXO>caST=r4m6U72z4rF86EV5}AKm!;uYyvR zb|CG*f3pLaovu$;sW!8>uBlS)wGNHvXh@QA1C1($nAwh%Ah+UOG!&7~kpf}G;6Ni; Rh|(Vc)rOR%9r#B(@E4in1!4dI literal 0 HcmV?d00001 diff --git a/sources/README.md b/sources/README.md new file mode 100644 index 0000000..0094ed7 --- /dev/null +++ b/sources/README.md @@ -0,0 +1,21 @@ +# Raw zdroje — Immutable reference data + +Tento adresář obsahuje nespracovaná referenční data (odkazy, knihy, standardy, RFC), ze kterých knowledge base vychází. + +**Pravidla:** +- Obsah je **immutable** — po přidání se nemění (pouze append) +- Zdroj označujeme tagem `[done]` pokud je již zpracován do KB +- Každá oblast má vlastní `sources.md` + +## Struktura + +``` +sources/ +├── README.md +├── cloud/ +├── networking/ +├── monitoring/ +├── cicd/ +├── databases/ +└── infrastructure/ +``` diff --git a/sources/cicd/sources.md b/sources/cicd/sources.md new file mode 100644 index 0000000..44d5d5d --- /dev/null +++ b/sources/cicd/sources.md @@ -0,0 +1,35 @@ +# CI/CD a DevOps — Zdroje + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| Terraform docs | https://developer.hashicorp.com/terraform/docs | `[done]` | +| ArgoCD docs | https://argo-cd.readthedocs.io/ | `[done]` | +| Flux docs | https://fluxcd.io/flux/ | `[done]` | +| GitHub Actions docs | https://docs.github.com/en/actions | `[done]` | +| GitLab CI docs | https://docs.gitlab.com/ee/ci/ | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| The DevOps Handbook | Kim, Humble, Debois, Willis | 978-1942788003 | `[done]` | +| Infrastructure as Code (2nd ed.) | Kief Morris | 978-1098114671 | `[todo]` | +| Terraform: Up and Running (3rd ed.) | Yevgeniy Brikman | 978-1098166045 | `[todo]` | +| Continuous Delivery | Humble, Farley | 978-0321601912 | `[done]` | + +## Standardy + +| Standard | Popis | Status | +|----------|-------|--------| +| 12 Factor App | https://12factor.net/ | `[done]` | +| CNCF Cloud Native Landscape | https://landscape.cncf.io/ | `[done]` | + +## Nové knihy (2024–2026) + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| CI/CD Design Patterns | Bajpai, Schildmeijer, Piwosz, Mishra | 978-1-83588-965-7 | `[done]` | +| AI-Native Software Delivery | Durkin, Minick, Gaikwad | — (O'Reilly, 2025) | `[done]` | +| DevOps Frameworks, Techniques, and Tools | Vijayakumaran, Kofler, Öggl, Springer | 978-1-4932-2670-2 | `[done]` | diff --git a/sources/cloud/sources.md b/sources/cloud/sources.md new file mode 100644 index 0000000..cf6f335 --- /dev/null +++ b/sources/cloud/sources.md @@ -0,0 +1,37 @@ +# Cloud architektura — Zdroje + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| AWS Well-Architected Framework | https://docs.aws.amazon.com/wellarchitected/latest/framework/ | `[done]` | +| Azure Well-Architected Framework | https://learn.microsoft.com/en-us/azure/well-architected/ | `[done]` | +| Google Cloud Architecture Framework | https://cloud.google.com/architecture/framework | `[done]` | +| AWS Multi-AZ / Multi-Region whitepaper | https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/ | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Cloud Architecture Patterns | Bill Wilder | 978-1449319779 | `[todo]` | +| Building Evolutionary Architectures | Ford, Parsons, Kua | 978-1492097549 | `[todo]` | + +## Nové knihy (2024–2026) + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Multi-Cloud Administration Guide | — | 978-1-5015-1948-2 | `[todo]` | +| AWS for Solutions Architects (3rd ed.) | Shrivastava, Srivastav, Thakur | 978-1-83664-193-3 | `[todo]` | +| Engineering Resilient Systems on AWS | Schwarz, Moran, Bachmeier | 978-1-098-16241-2 | `[todo]` | +| Building Resilient Architectures on AWS | — | 978-1-83588-711-0 | `[todo]` | +| Multi-Cloud Handbook for Developers | Natarajan, Jacob | 978-1-80461-709-0 | `[todo]` | +| The Azure Cloud Native Architecture Mapbook (2nd ed.) | Stéphane Eyskens | 978-1-80580-505-2 | `[todo]` | +| Cloud Computing: AWS, Azure, and Google Cloud | Azhar ul Haque Sario | 978-3384756886 | `[todo]` | + +## Certifikace + +| Certifikace | Oblast | +|-------------|--------| +| AWS Solutions Architect — Associate | AWS | +| Azure Solutions Architect Expert | Azure | +| Google Professional Cloud Architect | GCP | diff --git a/sources/databases/sources.md b/sources/databases/sources.md new file mode 100644 index 0000000..9aa646b --- /dev/null +++ b/sources/databases/sources.md @@ -0,0 +1,34 @@ +# Databázová architektura — Zdroje + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| PostgreSQL docs | https://www.postgresql.org/docs/ | `[done]` | +| MySQL docs | https://dev.mysql.com/doc/ | `[done]` | +| MongoDB docs | https://www.mongodb.com/docs/ | `[done]` | +| Redis docs | https://redis.io/docs/ | `[done]` | +| Cassandra docs | https://cassandra.apache.org/doc/ | `[done]` | +| Amazon DynamoDB docs | https://docs.aws.amazon.com/dynamodb/ | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Designing Data-Intensive Applications (1st ed.) | Martin Kleppmann | 978-1449373320 | `[done]` | +| Designing Data-Intensive Applications (2nd ed.) | Kleppmann, Riccomini | 978-1098119058 | `[todo]` | +| Database Internals | Alex Petrov | 978-1492040346 | `[done]` | +| High Performance MySQL | Schwartz, Zaitsev, Tkachenko | 978-1492080510 | `[todo]` | +| PostgreSQL: Up and Running | Regina Obe, Leo Hsu | 978-1491963418 | `[todo]` | +| Architecting an Apache Iceberg Lakehouse | Alex Merced | 978-1-63343-510-0 | `[todo]` | +| More SQL Antipatterns | Bill Karwin | 979-8888652060 | `[todo]` | +| AI-Ready PostgreSQL 18 | Vibhor Kumar, Marc Linster | 978-1-80602-847-4 | `[todo]` | +| Vector Databases | Nitin Borwankar | 978-1-098-17758-4 | `[todo]` | + +## Články / přednášky + +| Název | URL | Status | +|-------|-----|--------| +| CAP Theorem (Eric Brewer) | https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed/ | `[done]` | +| PACELC theorem | https://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf | `[done]` | +| Amazon Dynamo DB paper | https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf | `[todo]` | diff --git a/sources/infrastructure/sources.md b/sources/infrastructure/sources.md new file mode 100644 index 0000000..708ab9f --- /dev/null +++ b/sources/infrastructure/sources.md @@ -0,0 +1,70 @@ +# Infrastruktura — Zdroje + +Rozděleno do samostatných souborů: +- [HYPERVISORS.md](../../HYPERVISORS.md) — hypervisory a virtualizace +- [DATACENTERS.md](../../DATACENTERS.md) — datová centra +- [STORAGE.md](../../STORAGE.md) — storage +- [HARDWARE.md](../../HARDWARE.md) — hardware a servery + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| VMware vSphere docs | https://docs.vmware.com/en/VMware-vSphere/ | `[done]` | +| Microsoft Hyper-V docs | https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/ | `[done]` | +| Proxmox VE docs | https://pve.proxmox.com/wiki/Main_Page | `[done]` | +| OpenStack docs | https://docs.openstack.org/ | `[done]` | +| Ceph docs | https://docs.ceph.com/ | `[done]` | +| Redfish specification | https://www.dmtf.org/standards/redfish | `[done]` | + +## Standardy + +| Standard | Popis | Status | +|----------|-------|--------| +| TIA-942 | Telecommunications Infrastructure Standard for Data Centers | `[done]` | +| Uptime Institute Tier Standard | Data Center Tier Classification | `[done]` | +| ASHRAE TC 9.9 | Thermal Guidelines for Data Processing Environments | `[done]` | +| S.M.A.R.T. | Self-Monitoring, Analysis and Reporting Technology | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| The Data Center as a Computer (1st ed. → 4th ed. 2025) | Barroso, Hölzle, Ranganathan | 978-3-031-99488-3 | `[todo]` | +| Storage Systems | Ganger, Gibson | 978-1680837540 | `[todo]` | +| Virtualization Essentials | Matthew Portnoy | 978-1119481513 | `[todo]` | +| VMware vSphere Design (2nd ed.) | Forbes Guthrie, Scott Lowe | 978-1119130312 | `[todo]` | +| AI Data Center Network Design and Technologies (1st ed.) | Subramaniam, Styszynski, Tambakuwala | 978-0-13-543628-8 | `[todo]` | +| Electronics Cooling: From the Chip to the Datacenter | Abraham et al. | 978-0-443-47084-4 | `[todo]` | +| The AI Cloud Infrastructure Blueprint | Thummarakoti, Vududala, Madupati, Kaushik | 978-1-041-16642-9 | `[todo]` | + +## Server connectivity + +| Zdroj | URL | Status | +|-------|-----|--------| +| HPE Gen11 NIC selection guide | https://www.hpe.com/psnow/doc/a50007643enw | `[todo]` | +| Broadcom / Emulex FC HBA specs | https://www.broadcom.com/products/storage/fibre-channel-host-bus-adapters | `[todo]` | +| NVIDIA Mellanox Ethernet + InfiniBand adapters | https://www.nvidia.com/en-us/networking/ethernet/ | `[todo]` | +| NVMe-oF specification (NVM Express Inc.) | https://nvmexpress.org/specifications/ | `[todo]` | +| Dell PowerEdge R760 NIC placement guide | https://www.dell.com/support/manuals/en-us/oth-r760/per760_ism_pub/ | `[todo]` | + +## Server memory — osazování DIMM + +| Zdroj | URL | Status | +|-------|-----|--------| +| Dell PowerEdge R760 Installation & Service Manual — System Memory Guidelines | https://www.dell.com/support/manuals/en-al/oth-r760/per760_ism_pub/system-memory-guidelines | `[done]` | +| Dell PowerEdge R760 — General Memory Module Installation Guidelines | https://www.dell.com/support/manuals/en-al/oth-r760/per760_ism_pub/general-memory-module-installation-guidelines | `[done]` | +| HPE Gen11 Server Memory Population Rules (4th Gen Intel Xeon) | https://www.hpe.com/psnow/doc/a50007437enw | `[done]` | +| HPE Gen11 Server Memory Population Rules (5th Gen Intel Xeon) | https://www.hpe.com/psnow/doc/a50010242enw | `[done]` | +| HPE Gen11/Gen12 Server Memory Population Rules (AMD EPYC 9005) | https://www.hpe.com/psnow/doc/a50010243enw | `[todo]` | +| Single Rank vs Dual Rank vs Quad Rank vs Octa Rank Memory | https://corewavelabs.com/single-rank-vs-dual-rank-vs-quad-vs-octa-memory/ | `[done]` | + +## Výrobci hardware + +| Výrobce | Serverové řady | Management | +|---------|---------------|------------| +| Dell | PowerEdge (R6xx, R7xx) | iDRAC / OpenManage | +| HPE | ProLiant (DL, ML, Synergy) | iLO / OneView | +| Cisco | UCS (B-Series, C-Series) | UCS Manager / Intersight | +| Lenovo | ThinkSystem (SR, ST) | XClarity | +| Supermicro | SuperServer (cloud, storage, GPU) | IPMI / SuperDoctor | diff --git a/sources/monitoring/sources.md b/sources/monitoring/sources.md new file mode 100644 index 0000000..128f7db --- /dev/null +++ b/sources/monitoring/sources.md @@ -0,0 +1,49 @@ +# Monitoring a observabilita — Zdroje + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| Prometheus docs | https://prometheus.io/docs/ | `[done]` | +| Grafana docs | https://grafana.com/docs/ | `[done]` | +| OpenTelemetry specification | https://opentelemetry.io/docs/specs/otel/ | `[done]` | +| OpenMetrics standard | https://openmetrics.io/ | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Site Reliability Engineering | Beyer, Jones, Petoff, Murphy | 978-1491929124 | `[done]` | +| The Site Reliability Workbook | Beyer, Jones, Petoff, Murphy | 978-1492029502 | `[todo]` | +| Observability Engineering | Majors, Fong-Pong | 978-1492076445 | `[todo]` | + +## Články + +| Název | URL | Status | +|-------|-----|--------| +| The USE Method (Brendan Gregg) | https://www.brendangregg.com/usemethod.html | `[done]` | +| The RED Method (Tom Wilkie) | https://grafana.com/blog/2018/08/02/the-red-method-how-to-instrument-your-services/ | `[done]` | +| Google SRE book (free) | https://sre.google/sre-book/table-of-contents/ | `[done]` | + +## Nové knihy (2024–2026) + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Mastering OpenTelemetry and Observability | Steve Flanders | 978-1-394-25312-8 | `[done]` | +| OpenTelemetry Cookbook | — | 978-9349174238 | `[done]` | +| Cloud Observability in Action | — | — | `[todo]` | +| Observability in the AI-Native Era | Lipsig, Grabner, Rati | 978-1-80638-959-9 | `[todo]` | +| Mastering Prometheus | William Hegedus | 978-1-80512-566-2 | `[todo]` | +| Observability with Grafana (LGTM stack) | — | 978-1-80324-964-3 | `[todo]` | +| Open Source Observability | Corless, Pawar | — (O'Reilly, 2025) | `[todo]` | +| Hands-On Monitoring and Alerting with Prometheus | Muhammad Badawy | 978-9349887565 | `[todo]` | + +## Nové nástroje (2024–2026) + +| Nástroj | Popis | URL | Status | +|---------|-------|-----|--------| +| Grafana Sigil | AI observability (OpenTelemetry-native) | https://github.com/grafana/sigil | `[todo]` | +| InfraLens | eBPF-based zero-instrumentation observability | https://github.com/Herenn/Infralens | `[todo]` | +| Ingero | GPU causal observability (eBPF) | https://github.com/ingero-io/ingero | `[todo]` | +| GreptimeDB | Unified observability DB (OTel-native) | https://github.com/GreptimeTeam/greptimedb | `[todo]` | +| Netdata | AI-powered full-stack observability | https://github.com/netdata/netdata | `[todo]` | diff --git a/sources/networking/sources.md b/sources/networking/sources.md new file mode 100644 index 0000000..f0d0465 --- /dev/null +++ b/sources/networking/sources.md @@ -0,0 +1,40 @@ +# Síťová architektura — Zdroje + +## RFC a standardy + +| RFC | Název | Status | +|-----|-------|--------| +| RFC 791 | Internet Protocol | `[done]` | +| RFC 793 | Transmission Control Protocol | `[done]` | +| RFC 1034/1035 | Domain Names — Concepts and Facilities | `[done]` | +| RFC 4271 | Border Gateway Protocol (BGP-4) | `[done]` | +| RFC 5246 | TLS 1.2 | `[done]` | +| RFC 8446 | TLS 1.3 | `[done]` | + +## Oficiální dokumentace + +| Zdroj | URL | Status | +|-------|-----|--------| +| AWS VPC docs | https://docs.aws.amazon.com/vpc/ | `[done]` | +| Azure Virtual Network docs | https://learn.microsoft.com/en-us/azure/virtual-network/ | `[done]` | +| Google VPC docs | https://cloud.google.com/vpc/docs | `[done]` | + +## Knihy + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| Computer Networking: A Top-Down Approach | Kurose, Ross | 978-0133594140 | `[done]` | +| TCP/IP Illustrated | W. Richard Stevens | 978-0321336316 | `[todo]` | + +## Nové knihy (2024–2026) + +| Název | Autor | ISBN | Status | +|-------|-------|------|--------| +| AI Data Center Network Design and Technologies | Subramaniam, Styszynski, Tambakuwala | 978-0-13-543628-8 | `[todo]` | +| Cloud Networking and Resilience | Cristian Critelli | 979-8868824357 | `[todo]` | +| Zero Trust in Resilient Cloud and Network Architectures | Halley, Prajapati, Leza, Saini | 978-0-13-820460-0 | `[todo]` | +| The Segmentation Blueprint | Kulkarni, Sivakumar, Morais, Lloyd | 978-0-13-546236-2 | `[todo]` | +| Segment Routing for SP and Enterprise Networks | Deragisch et al. | 978-0-13-823101-9 | `[todo]` | +| Understanding and Designing Azure Networking | Stuart, Moreno | — (2025) | `[todo]` | +| Mastering Next-Gen Juniper Data Centers | — | 978-0-13-533636-6 | `[todo]` | +| Intelligent Cloud Networking: AI-Driven Resource Management | Manoj Yadav | 9364220110 | `[todo]` | diff --git a/templates/ADR.md b/templates/ADR.md new file mode 100644 index 0000000..a835594 --- /dev/null +++ b/templates/ADR.md @@ -0,0 +1,50 @@ +# ADR — Architecture Decision Record + +## Název rozhodnutí + + + +## Status + + + +## Kontext + + + +## Rozhodnutí + + + +## Důvody + + + +## Alternativy + + + +## Důsledky + + + +## Metadata + +- **Datum**: YYYY-MM-DD +- **Autor**: jméno +- **Zainteresované strany**: tým A, tým B +- **Reference**: [odkaz na design doc], [odkaz na issue]