From b02a8a1d8ec753d1328519800f4e16f61b8b8a2f Mon Sep 17 00:00:00 2001 From: Stanislav Hubacek Date: Wed, 3 Jun 2026 22:50:00 +0200 Subject: [PATCH] Upload files to "/" --- CASSANDRA.md | 135 ++++++++++++++++++++++++ CONNECTIVITY.md | 270 ++++++++++++++++++++++++++++++++++++++++++++++++ MYSQL.md | 142 +++++++++++++++++++++++++ REDIS.md | 119 +++++++++++++++++++++ 4 files changed, 666 insertions(+) create mode 100644 CASSANDRA.md create mode 100644 CONNECTIVITY.md create mode 100644 MYSQL.md create mode 100644 REDIS.md diff --git a/CASSANDRA.md b/CASSANDRA.md new file mode 100644 index 0000000..35dc912 --- /dev/null +++ b/CASSANDRA.md @@ -0,0 +1,135 @@ +# 🐘 Cassandra & ScyllaDB + +## Přehled + +Apache Cassandra je distribuovaná wide-column NoSQL databáze navržená pro vysokou dostupnost a lineární škálovatelnost bez single point of failure. Inspirována Amazon Dynamo paperem (2007) a Google Bigtable. ScyllaDB je C++ reimplementace kompatibilní s Cassandra protokolem, s drasticky nižší latencí a vyšší propustností. + +## Architektura (Dynamo-inspired) + +### Consistent hashing + +Data rozdělena na hash ringu, každý node zodpovídá za rozsah tokenů: + +```text + 0 ─── node A ─── hash(key1) + │ + 90 ─── node B ─── hash(key2) + │ + 180 ─── node C ─── hash(key3) + │ + 270 ─── node D ─── hash(key4) +``` + +- Přidání/odebrání nodu ovlivní jen K/N klíčů (díky virtual nodes) +- **Virtual nodes** (vnodes) — každý fyzický node má ~100-200 tokenů na ringu (rovnoměrnější distribuce) + +### Quorum (N, R, W) + +- N = replication factor (typicky 3) +- R = read quorum (typicky 2) +- W = write quorum (typicky 2) +- Podmínka: R + W > N (pro strong-ish konzistenci) +- **Sloppy quorum** — při nedostupnosti nodu, data dočasně uložena na jiném +- **Hinted handoff** — dočasný zápis s hintem, při obnově se data přenesou + +### Gossip protocol + +Decentralizované šíření membership informací — každý node periodicky komunikuje s 1-3 náhodnými nodes. Žádný centrální bod selhání. + +### Vector clocks + +Zachycení kauzality verzí objektu. Při konfliktu (partition merge) se vrací obě verze — aplikace merguje. + +### Merkle trees + +Anti-entropy — strom hashů pro detekci divergence mezi replikami. Rychlá detekce, které rozsahy dat jsou rozdílné. + +### Write path + +```text +Client → Coordinator → [1. Write to commit log (disk)] + [2. Write to memtable (RAM)] + [3. Acknowledge client] + → [4. Flush memtable → SSTable (periodicky)] + → [5. Compaction (merge SSTables)] +``` + +### Read path + +```text +Client → Coordinator → [1. Check bloom filter] + [2. Check row cache / key cache] + [3. Read from SSTable (disk)] + [4. Merge with memtable] + [5. Repair if stale (read repair)] +``` + +## Cassandra vs ScyllaDB + +| Vlastnost | Cassandra | ScyllaDB | +|-----------|-----------|----------| +| **Jazyk** | Java (JVM) | C++ (seastar framework) | +| **Architektura** | Thread-per-connection | Shared-nothing, CPU sharding | +| **Latence** | 5-20 ms (typicky) | 1-3 ms (typicky) | +| **Propustnost** | Dobrá | 5-10× vyšší na stejný HW | +| **GC pauzy** | Ano (JVM) | Ne (žádný GC) | +| **NUMA** | OS-dependent | Nativní NUMA aware | +| **Workload** | Standardní | High-throughput, real-time | +| **Cena** | Open source | Open source + Enterprise | + +## Data model + +- **Keyspace** = namespace (analogie DB) +- **Table** = definice sloupců (ne schema-less) +- **Partition key** = hash klíč pro distribuci na ringu +- **Clustering columns** = řazení v rámci partition +- **Primary key** = Partition key + Clustering columns + +## Doporučení — v čem je Cassandra lepší + +| Oblast | Cassandra | Konkurence | Proč Cassandra | +|--------|-----------|------------|----------------| +| **Zápisová propustnost** | Lineární škálování, žádný master bottleneck | PostgreSQL (master writes) | Každý node zapisuje, žádný single point of failure | +| **Dostupnost** | AP z CAP — vždy zapisovatelná | MongoDB (CP, primary down = read-only) | "Always-writeable" filozofie | +| **Multi-DC** | Nativní, režim per DC | CockroachDB (komplexní) | Jednoduchá konfigurace, latency-tolerant | +| **Time-series** | Wide-row model, TTL, compaction | InfluxDB (specializovaná) | Lze kombinovat s dalšími workloady | +| **IoT / sensor data** | Lineární škálování, žádný master | MongoDB (sharding komplexní) | Předvídatelný výkon při růstu | +| **Geografická distribuce** | Nativní multi-DC, hinted handoff | Spanner (vendor lock-in) | Open source, žádná závislost | + +### Kdy použít Cassandra / ScyllaDB + +- **IoT / sensor data ingest** — miliony zápisů/s, žádné ztráty +- **Time-series v masivním měřítku** — metriky, logy, event data +- **Uživatelské activity history** — zápisově těžké workloady +- **Multi-DC aplikace** — data dostupná v každé lokalitě +- **Doporučovací systémy** — wide-row model pro "co viděl uživatel" +- **Message / event store** — high-throughput append s TTL + +### Kdy použít něco jiného + +- **Relace, JOINy, transakce** → PostgreSQL (Cassandra nemá JOINy, omezené transakce) +- **Full-text search** → Elasticsearch +- **Agregace / OLAP** → ClickHouse (Cassandra není analytická DB) +- **Malá data (< 100 GB)** → PostgreSQL (Cassandra overhead se nevyplatí) +- **Časté ready podle vedlejších klíčů** → DynamoDB (SADA indexy) — Cassandra má omezené secondary indexy + +### ScyllaDB specific + +ScyllaDB je výhodná když: +- Potřebujete 5-10× vyšší propustnost na stejném HW +- Máte latency-sensitive workload (real-time scoring, ad-tech) +- Chcete eliminovat JVM/GC problémy +- Potřebujete předvídatelný výkon (P99 < 5 ms) + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Paper / Kniha | Autoři | Popis | +|---------------|--------|-------| +| Dynamo: Amazon's Highly Available Key-value Store (SOSP 2007) | DeCandia et al. | Zakladatelský paper pro Cassandra architekturu | +| Cassandra: The Definitive Guide (3rd ed.) | E. Hewitt | Komplexní průvodce nasazením a provozem | + +*Poslední revize: 2026-06-03* diff --git a/CONNECTIVITY.md b/CONNECTIVITY.md new file mode 100644 index 0000000..f358e05 --- /dev/null +++ b/CONNECTIVITY.md @@ -0,0 +1,270 @@ +# 🔌 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 | Emerging (první produkční nasazení) | + +**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) │ +└─────────────────────────────────┘ +``` + +### NVIDIA Mellanox ConnectX NICs + +NVIDIA Mellanox je přední výrobce NIC adaptérů pro AI/HPC a cloud datová centra. + +| Model | PCIe | Max rychlost | Form factor | Klíčové features | +|-------|------|-------------|-------------|------------------| +| **ConnectX-5** | PCIe 3.0 x16 | 100 GbE (dual) | HHHL | RoCE, NVMe-oF target offload, MPI offload | +| **ConnectX-6 Dx** | PCIe 4.0 x16 | 200 GbE (1-port) / 100 GbE (2-port) | HHHL, OCP 3.0 | ASAP² vSwitch offload, IPsec/TLS inline crypto, AES-XTS, 215 Mpps DPDK | +| **ConnectX-6 Lx** | PCIe 4.0 x8 | 25 GbE (dual) | HHHL, OCP 3.0 | RoCE, Secure Boot, low-power | +| **ConnectX-7** | PCIe 5.0 x16 | 400 GbE (1-port) / 200 GbE (2-port) | HHHL | NDR InfiniBand + 400GbE, GPUDirect, SHARP | +| **ConnectX-8** | PCIe 6.0 x16 | 800 GbE (1-port) / 400 GbE (2-port) | HHHL | XDR InfiniBand, sub-500ns latence, in-network computing, multi-host | + +**Platformy**: Spectrum-X Ethernet (end-to-end AI networking), Quantum InfiniBand, BlueField DPU. + +### Broadcom Emulex FC HBA + +| Model | Rychlost | PCIe | Porty | Features | +|-------|----------|------|-------|----------| +| **LPe35000** (Gen 7) | 32 GFC | PCIe 3.0 x8 | 1-2 | NVMe-FC, T10-PI (DIF), SR-IOV, Silicon Root of Trust | +| **LPe35002** (Gen 7) | 32 GFC | PCIe 3.0 x8 | 2 | NVMe-FC, Secure Boot, digitálně podepsaný firmware | +| **LPe36000** (Gen 7) | 64 GFC | PCIe 4.0 x16 | 1-2 | První 64GFC HBA na trhu, 10M IOPS, 3× lepší latence než Gen 6 | + +**Klíčové vlastnosti**: podpora NVMe over FC, T10 DIF (Data Integrity Field), 10M MTBF, NIST SP 800-193 compliant. Gen 7 přináší až 10M IOPS a 3× nižší latenci oproti Gen 6. + +### NVMe-oF specifikace + +NVMe over Fabrics (NVMe-oF) rozšiřuje NVMe protokol z lokálního PCIe na síťové transporty. První specifikace 1.0 vydána v červnu 2016, aktuálně součástí NVMe 2.3 (srpen 2025). Podporované transporty: + +| Transport | Specifikace | Use case | +|-----------|------------|----------| +| **NVMe over PCIe** | NVMe Base | Lokální NVMe SSD | +| **NVMe over RDMA** (RoCE, InfiniBand, iWARP) | NVMe Transport | AI/ML, HPC, nejnižší latence <5 µs | +| **NVMe over TCP** | NVMe Transport | Standardní Ethernet, bez RDMA, latence ~50 µs | +| **NVMe over FC** (FC-NVMe) | INCITS T11 | Enterprise SAN, FC fabric | + +NVMe 2.3 přidává Computational Programs Command Set, Storage Level Management (SLM), a Zoned Namespaces (ZNS). NVMe-MI definuje management rozhraní. + +### Dell PowerEdge R760 — NIC placement + +Server Dell R760 podporuje: +- **OCP 3.0** adaptéry (až 2×) — 1/10/25/100 GbE +- **PCIe Gen5** sloty — 8× slotů (6× FHHL + 2× LP) +- **LOM** — 2× 1 GbE Broadcom 5720 na základní desce +- Maximální rychlost NIC: 100 GbE (QSFP56) +- Supported typy: RJ45, SFP+, SFP28, QSFP28, QSFP56 + +Doporučené konfigurace: +- Standard: OCP 3.0 2× 25 GbE + PCIe storage HBA +- AI/ML: PCIe 100 GbE (riser config 1, slot 1-2) + GPU v ostatních slotech + +### HPE Gen11 NIC options + +HPE ProLiant Gen11 (DL360/DL380) podporuje: +- **OCP 3.0** sloty (až 2) — 10/25/100/200 GbE (Broadcom, Intel, NVIDIA Mellanox) +- **PCIe Gen5** adaptéry — 8× slotů (DL380) / 3× sloty (DL360) +- **iLO 6** dedikovaný management port (1 GbE) +- Podporované NIC: Broadcom BCM57412 (10GbE), BCM57504 (25GbE), NVIDIA ConnectX-6 Dx (100GbE) + +## Zdroje + +Odkazy, knihy a standardy: [sources/infrastructure/sources.md](sources/infrastructure/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | ISBN | Popis | +|-------|--------|------|-------| +| AI Data Center Network Design and Technologies (1st ed., 2026) | Subramaniam, Styszynski, Tambakuwala | 978-0-13-543628-8 | První vendor-agnostický průvodce návrhem sítí pro AI trénování a inferenci. Pokrývá high-radix fabric, lossless Ethernet/IP, UEC technologie, chlazení a power pro AI klastry. Autoři z HPE Juniper Networking. | + +*Poslední revize: 2026-06-03* diff --git a/MYSQL.md b/MYSQL.md new file mode 100644 index 0000000..9729081 --- /dev/null +++ b/MYSQL.md @@ -0,0 +1,142 @@ +# 🐬 MySQL & MariaDB + +## Přehled + +MySQL je nejrozšířenější open-source relační databáze, zejména ve webovém prostředí (LAMP stack). MariaDB je fork po akvizici Oracle, plně kompatibilní s rozšířeními. Výchozí volba pro WordPress, Drupal, Magento a většinu PHP aplikací. + +## Architektura (server + storage engine) + +Na základě *High Performance MySQL* (Schwartz, Zaitsev, Tkachenko): + +```text +MySQL Server Layer + ├── Connection handling (thread-per-connection) + ├── Query parser & optimizer + ├── Built-in functions + └── Storage Engine API + ├── InnoDB (výchozí, MVCC, ACID) + ├── MyISAM (legacy, table-level locks) + ├── MEMORY (in-memory, HEAP) + └── ... (ostatní) +``` + +### InnoDB (výchozí engine od MySQL 5.5+) + +- **MVCC** — Multi-Version Concurrency Control (snapshot isolation) +- **REPEATABLE READ** (výchozí) — next-key locking zabraňuje phantom reads +- **Clustered index** — primární klíč = fyzické uspořádání dat +- **Buffer pool** — cache dat a indexů v RAM (hlavní parametr výkonu) +- **Doublewrite buffer** — prevence částečného zápisu stránky + +### Schema design tipy + +- Preferovat menší datové typy (MEDIUMINT místo INT, TIMESTAMP místo DATETIME) +- NULL používat opatrně (každý NULL sloupec zvyšuje složitost indexu) +- ENUM používat jen pro opravdu malé, stabilní seznamy hodnot +- JSON sloupce v MySQL 8+ — užitečné pro flexibilní schema, ale ne pro joinování + +### Deferred join pattern + +```sql +-- 1. covering index najde PK +-- 2. teprve pak join na plný řádek +SELECT * FROM users + INNER JOIN ( + SELECT id FROM users + WHERE status = 'active' + ORDER BY created_at DESC + LIMIT 100 OFFSET 1000 + ) AS tmp USING (id); +``` + +**Join decomposition**: Někdy výhodnější rozdělit JOIN na několik jednoduchých dotazů (lepší využití cache, méně locků, škálování napříč servery). + +**IN() optimalizace**: MySQL řadí hodnoty v IN() seznamu a používá binární vyhledávání (O(log n)), na rozdíl od OR klauzulí (O(n)). + +## MariaDB rozdíly oproti MySQL + +| Vlastnost | MySQL 8.x | MariaDB 11.x | +|-----------|-----------|--------------| +| **Storage engine** | InnoDB (pouze) | InnoDB + XtraDB (fork) + Aria + MyRocks | +| **JSON** | Native JSON typ | JSON alias na LONGTEXT + JSON funkce | +| **CTE** | WITH (non-recursive + recursive) | WITH (non-recursive + recursive) | +| **Window functions** | Ano (8.0+) | Ano (10.2+) | +| **Sequence** | Ne (auto_increment only) | Ano (CREATE SEQUENCE) | +| **Thread pooling** | Enterprise only | Vestavěný | +| **Galera cluster** | Ne (nativně) | Ano (nativní synchronní clustering) | + +## ProxySQL + +ProxySQL je advanced proxy pro MySQL s pokročilým routingem: + +| Vlastnost | Popis | +|-----------|-------| +| **Query routing** | Pravidla pro směrování dotazů (read/write split, sharding) | +| **Connection pooling** | Multiplexování tisíců spojení do malého poolu | +| **Query cache** | Cache výsledků v paměti (TTL, size limit) | +| **Query rewriting** | Rewrite SQL dotazů na cestě | +| **Aktivní monitoring** | Detekce výpadků backendů, automatic failover | + +## Doporučení — v čem je MySQL lepší + +| Oblast | MySQL | Konkurence | Proč MySQL | +|--------|-------|------------|------------| +| **Webové aplikace** | De facto standard pro WP, Drupal, Magento | PostgreSQL (méně CMS pluginů) | Nejširší podpora ve web hosting providers | +| **Čtení (SELECT heavy)** | InnoDB buffer pool, covering index, adaptive hash | PostgreSQL (MVCC overhead u čtení) | Cache-efficient, rychlé point lookupy | +| **Replikace** | Async replication, Group Replication, InnoDB Cluster | PostgreSQL (streaming replication) | Jednodušší setup, široká dokumentace | +| **Ekosystém** | ProxySQL, Orchestrator, Vitess, PlanetScale | PostgreSQL (méně nástrojů) | Nejvíce toolingu pro správu clusteru | +| **JSON v MySQL 8+** | JSON datový typ, Multi-Value Indexes | PostgreSQL (jsonb, GIN) | Srovnatelné, Multi-Value Index unikátní | + +### Kdy použít MySQL / MariaDB + +- **CMS / e-commerce** — WordPress, Drupal, Magento, Joomla (všechny vyžadují MySQL) +- **Read-heavy aplikace** — InnoDB buffer pool efektivně cachuje často čtená data +- **Jednoduchá replicace** — Group Replication / InnoDB Cluster pro HA +- **MariaDB pro Galera cluster** — synchronní multi-master clustering +- **PHP aplikace** — nativní PHP MySQL extensions (mysqli, PDO_MySQL) + +## MySQL / MariaDB licensing + +### MySQL licensing + +| Varianta | Licence | Cena | Omezení | +|----------|---------|------|---------| +| **MySQL Community (GPL)** | GPL v2 | $0 | Pokud distribuujete aplikaci, která obsahuje MySQL (např. embedded), musíte uvolnit celou aplikaci pod GPL. Webová aplikace (přes network) ≠ distribuce — GPL se netýká | +| **MySQL Standard (Commercial)** | Commercial (Oracle) | ~$2 000/server/rok | Bez GPL omezení, production support, MySQL Enterprise Monitor | +| **MySQL Enterprise** | Commercial (Oracle) | ~$5 000/server/rok | Vše výše + MySQL Enterprise Backup, Audit, Firewall, Thread Pool, Encryption | +| **MySQL Cluster CGE** | Commercial (Oracle) | ~$10 000/server/rok | Distributed multi-master cluster (NDB), telco-grade | + +**Kdy GPL vadí**: Pokud embeddedujete MySQL do komerčního produktu (např. desktopová aplikace s MySQL knihovnou). Webová aplikace komunikující přes TCP/IP **není** distribuce — GPL se neuplatní. + +### MariaDB licensing + +| Varianta | Licence | Cena | Omezení | +|----------|---------|------|---------| +| **MariaDB Community** | GPL v2 | $0 | Stejné jako MySQL Community — GPL, ale bez Oracle licenčních rizik | +| **MariaDB Enterprise** | Business Source License (BSL) | Subscription (~$2-5k/server/rok) | Po 3 letech se automaticky mění na GPL v2. Zahrnuje enterprise funkce (ColumnStore, Spider, Xpand) | +| **MariaDB SkySQL** | Managed (BSL) | Pay-per-use (~$0.10-1.00/hod) | Fully managed DBaaS | + +**Klíčový rozdíl oproti Oracle MySQL**: +- MariaDB je nezávislý fork, není pod kontrolou Oracle +- BSL model je liberálnější — po 3 letech se stává open source +- MariaDB nevyžaduje commercial licenci pro enterprise funkce (v MySQL jsou enterprise-only) + +### Kdy použít něco jiného + +- **Komplexní dotazy / CTE / window functions** → PostgreSQL (pokročilejší optimalizátor) +- **GIS / geoprostorová data** → PostgreSQL + PostGIS +- **Konzistence > rychlost** → PostgreSQL (SSI serializable) +- **High-throughput zápisů** → Cassandra (MySQL master bottleneck) +- **Distribuovaný SQL cluster** → CockroachDB, Vitess (MySQL kompatibilní sharding) + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | ISBN | Popis | +|-------|--------|------|-------| +| High Performance MySQL (4th ed.) | Schwartz, Zaitsev, Tkachenko | 978-1492075292 | Komplexní průvodce architekturou, optimalizací a monitoringem MySQL | + +*Poslední revize: 2026-06-03* diff --git a/REDIS.md b/REDIS.md new file mode 100644 index 0000000..e7d2b1c --- /dev/null +++ b/REDIS.md @@ -0,0 +1,119 @@ +# 🔴 Redis + +## Přehled + +Redis je in-memory key-value store s pokročilými datovými strukturami, používaný primárně jako cache, session store, message broker a real-time databáze. Běží v RAM s možností persistence na disk (RDB/AOF). + +## 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 | +| **Geospatial** | Geo-indexing (GEOADD, GEOSEARCH) | Lokalitní dotazy, proximity search | +| **JSON** | JSON dokument (RedisJSON modul) | Dokumentové struktury | + +## 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í | + +## Persistence + +| Metoda | Popis | RTO | RPO | Use case | +|--------|-------|-----|-----|----------| +| **RDB** (Redis Database) | Periodický snapshot do dump.rdb | Minuty | Poslední snapshot | Cache, ztráta tolerována | +| **AOF** (Append-Only File) | Append-only log všech write operací | Sekundy | 1 s (fsync every sec) | Data nesmí být ztracena | +| **RDB + AOF** | Kombinace | Sekundy | 1 s | Doporučeno pro produkci | + +## Moduly (RediSearch, RedisJSON, RedisGraph) + +Redis rozšiřitelný modulem: +- **RediSearch** — full-text search, facety, prefix/suffix vyhledávání +- **RedisJSON** — JSON path dotazy, manipulace dokumentů +- **RedisGraph** — grafová DB (na bázi Cypher, deprecated od 2025) +- **RedisTimeSeries** — time-series s downsamplingem, retention politikami +- **RedisBloom** — Bloom filtry, Cuckoo filtry, Top-K, Count-Min Sketch + +## Memcached vs Redis + +| Vlastnost | Redis | Memcached | +|-----------|-------|-----------| +| **Data structures** | String, Hash, List, Set, Sorted Set, Stream, JSON | Pouze String | +| **Persistence** | RDB + AOF | Žádná (čistě in-memory) | +| **Replication** | Master-replica, Cluster | Žádná (multi-threaded) | +| **Eviction** | 6 politik | LRU pouze | +| **Lua scripting** | Ano (EVAL) | Ne | +| **Transakce** | Ano (MULTI/EXEC) | Ne | +| **Pub/Sub** | Ano | Ne | +| **Streaming** | Ano (Stream) | Ne | + +## Doporučení — v čem je Redis lepší + +| Oblast | Redis | Konkurence | Proč Redis | +|--------|-------|------------|------------| +| **Cache (in-memory)** | < 1 ms latence, 6 eviction politik | Memcached (pouze LRU string) | Bohatší datové typy, persistence, cluster | +| **Session store** | Hash + TTL, Cluster pro HA | DynamoDB (vyšší latence) | Jednodušší, rychlejší, nativní expirace | +| **Rate limiting** | Sorted Set (sliding window counter) | Aplikace v DB (složité) | Atomic operace, vestavěná logika | +| **Leaderboard / scoring** | Sorted Set (ZADD, ZRANK, ZREVRANGE) | SQL (ORDER BY + COUNT = expensive) | O(1) rank, O(log N) insert | +| **Message queue** | List/Stream (RPUSH+BLPOP) | Kafka (těžká, JVM) | Lehká, embedded, žádný broker | +| **Real-time analytics** | HyperLogLog + Bitmap + Stream | ClickHouse (těžká analytika) | Agregace v reálném čase, malá RAM | +| **Geolokace** | GEOADD, GEOSEARCH, GEODIST | PostGIS (těžší, disk-based) | In-memory, ideální pro real-time | + +### Kdy použít Redis + +- **Cache pro API** — response cache, DB query cache, session cache +- **Session management** — distribuované session napříč servery +- **Rate limiting** — API gateway, per-user/per-IP limity +- **Leaderboardy / žebříčky** — real-time skórování +- **Message broker** — fronta úloh (RQ, Celery s Redis), pub/sub notifikace +- **Real-time analytics** — počítání unikátů, metrik, dashboardů +- **Geoproxmity** — "najdi nejbližší pobočku" v < 1 ms + +### Kdy použít něco jiného + +- **Trvalá data s SQL dotazy** → PostgreSQL nebo MySQL +- **Velké objemy > RAM** → Memcached (multi-threaded), Dragonfly (více RAM utilization) +- **Dlouhodobá fronta zpráv** → Kafka, RabbitMQ (disk-based persistence) +- **Dokumentová DB** → MongoDB (persistentní, komplexní dotazy) + +## Redis licensing + +Redis prošel zásadní změnou licence v roce 2024: + +| Období | Licence | Podmínky | +|--------|---------|----------| +| **Do března 2024** | BSD 3-clause (open source) | Zcela volné použití, včetně managed služeb | +| **Od března 2024** | RSALv2 + SSPL (dual license) | SSPL: pokud nabízíte Redis jako managed službu, musíte uvolnit celý stack jako open source. RSALv2: omezení na cloud provozovatele | +| **Valkey (fork, Linux Foundation)** | BSD 3-clause | Plně open source fork Redis 7.2, podpora od Linux Foundation, AWS, Google, Oracle | + +**Dopad**: Managed Redis služby (AWS ElastiCache, Google Memorystore, Azure Cache for Redis) nemohou používat Redis 7.4+ bez komerční licence → přechází na **Valkey**. Pro self-hosted Redis beze změny — RSALv2/SSPL neomezuje interní použití. + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +*Poslední revize: 2026-06-03*