diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..df542e7 Binary files /dev/null and b/.DS_Store differ 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 0000000..2de1869 Binary files /dev/null and b/sources/.DS_Store differ 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]