Návrh mikroservisní infrastruktury: architektura

Návrh mikroservisní infrastruktury: Architektura

Cíle a rozhodovací rámec

Mikroservisní infrastruktura poskytuje nezávisle nasaditelné, škálovatelné a doménově orientované služby propojené přes síť. Cílem je zrychlit změnu, zvýšit odolnost a umožnit autonomii týmů. Než začnete, definujte: obchodní cíle, nefunkční požadavky (SLO, latence, dostupnost, náklady), regulatorní omezení a rozpočtová/kompetenční rizika. Mikroservisy nejsou dogma – zvažte je tam, kde monolit naráží na limity organizace, doménové složitosti nebo škálování.

Doménové vymezení a hranice služeb

  • Domain-Driven Design (DDD): identifikujte bounded contexts a mapujte je na služby. Jedna služba = jedna jasná business capability.
  • Koheznost a coupling: maximalizujte vnitřní soudržnost (cohesion), minimalizujte vazby mezi službami. Vyhněte se entity services bez jasné logiky.
  • Granularita: příliš jemné služby zvyšují latenci a provozní zátěž; začněte s hrubšími hranicemi a teprve potom je případně rozdělte.
  • Vlastnictví dat: každá služba vlastní svůj datový model a úložiště; žádné sdílené databázové schéma napříč službami.

Komunikační vzory: synchronní vs. asynchronní

  • Synchronní API (REST/gRPC): jednoduchý model dotaz-odpověď, vhodný pro čtení a krátké operace. Pozor na řetězení volání a závislosti typu n+1.
  • Asynchronní messaging (události, fronty, streamy): Kafka/Pulsar/RabbitMQ pro volné vazby, škálování a odolnost. Umožňuje integraci založenou na událostech (event-driven) a choreografii.
  • Orchestrace vs. choreografie: složité workflow řešte buď centrálním orchestrátorem (Camunda/Temporal), nebo distribuovanou choreografií (sagy prostřednictvím událostí). Volba závisí na požadavcích na auditovatelnost a složitosti kompenzací.

Návrh API, verzování a kontrakty

  • Kontrakt-first: OpenAPI/AsyncAPI/Protobuf jako zdroj pravdy, generování klientů a stubů.
  • Verzování: v1/v2 nebo schémata v hlavičkách; u událostí verzujte schema registry (např. Avro/JSON Schema) a upřednostňujte kompatibilní změny.
  • Stabilita kontraktů: přidávání polí je obvykle kompatibilní; odstranění pole nebo změna jeho typu vyžaduje novou verzi.
  • API Gateway: centralizuje autentizaci, throttling, agregaci, canary směrování a backends for frontends (BFF).

Data, konzistence a transakce

  • Polyglot persistence: volba úložiště podle charakteru domény (relační databáze/NoSQL/time-series/search).
  • Eventual consistency: počítejte s tím, že ne vše bude silně konzistentní. Publikujte domain events po potvrzení lokální transakce.
  • Sagy: distribuované transakce řešte kompenzačními akcemi. Každý krok musí být idempotentní a opakovatelný.
  • Outbox pattern: zapisujte událost do tabulky outbox a spolehlivě ji přenášejte do brokeru (transactional outbox + CDC).

Odolnost a řízení chyb

  • Idempotence a doručování at-least-once: použijte idempotentní klíče a deduplikaci na straně konzumenta.
  • Timeouty, opakování s exponenciálním prodlužováním prodlevy a jitterem: nastavte rozumné limity; rozlišujte chyby, u nichž lze volání opakovat (retriable), a chyby, u nichž to možné není (non-retriable).
  • Circuit breaker a bulkhead: izolujte zdroje; předcházejte kaskádovým selháním.
  • Rate limiting a backpressure: chraňte upstream systémy a udržujte stabilitu během špiček.

Bezpečnost a řízení přístupu

  • Identita a federace: OIDC/OAuth 2.1 pro uživatele; SPIFFE/SPIRE/SVID pro identitu služeb a mTLS.
  • Autorizace: RBAC/ABAC nebo centrální policy engine (OPA) s policy-as-code.
  • Šifrování: TLS 1.3 v síti, šifrování dat v klidu; rotace klíčů v KMS/HSM, tajemství mimo image (Secrets).
  • Zero trust: komunikaci výslovně povolujte (network policies); uvnitř clusteru nesmí existovat implicitní důvěra.

Service Mesh a síťová vrstva

  • Service discovery a load balancing: DNS/Envoy/Consul. Vyhledávání endpointů a směrování na vrstvě L7 s observabilitou.
  • Service mesh (Istio/Linkerd): jednotné mTLS, řízení provozu (canary, mirroring), retries, timeouts, circuit breaking bez změn v kódu.
  • Network policies: segmentace komunikace mezi jmennými prostory a službami.

Observabilita: logy, metriky a trasování

  • Metriky: RED (Rate, Errors, Duration) pro API, USE (Utilization, Saturation, Errors) pro infrastrukturu. Export do Promethea; SLO/SLI definované na úrovni domén.
  • Distribuované trasování: OpenTelemetry → backend (Jaeger/Tempo/Zipkin); korelační ID předávejte mezi službami.
  • Logy: strukturovaný JSON, jednotná pole traceId/spanId, zákaz ukládání citlivých dat; centralizace (ELK/Vector/Fluent Bit).
  • Alerting: upozorňujte na porušení SLO (error budget), nikoli na šum. Runbooky a automatická náprava.

CI/CD a řízení releasů

  • Pipelines: lint → jednotkové/integrační testy → kontraktové testy → sestavení image → SCA/scan → podpis → nasazení.
  • Strategie: blue/green, canary, progressive delivery (Argo Rollouts/Flagger). Feature flags pro řízenou aktivaci funkcí.
  • Prostředí: dev/test/stage/prod, izolace tajemství a konfigurací; GitOps (Argo CD/Flux) jako jediný zdroj pravdy.

Platforma: kontejnery, orchestrace a runtime

  • Kubernetes jako standardní orchestrátor: Deployment/StatefulSet, Services, Ingress/Gateway API, HPA/VPA, PodDisruptionBudget.
  • Konfigurace a tajemství: ConfigMap/Secrets, šifrování dat v klidu, sealed secrets; hierarchická konfigurace podle prostředí.
  • Limity zdrojů: requests/limits, třídy QoS; u jazyků s JIT šetřete CPU/RAM (zahřívání, jemné ladění GC).
  • Persistentní data: ovladače CSI, operátory pro zálohování; u databází zvažte spravované služby (RDS/CloudSQL) oproti vlastním operátorům (postgres-operator).

Správa schémat a verzí dat

  • Schema registry: kontrola kompatibility (backward/forward).
  • Migrace databází: migrační nástroje (Flyway/Liquibase) se strategií expand/contract.
  • Event sourcing & CQRS: pro složitá doménová pravidla a auditovatelnost; počítejte s náklady na projekce a přehrávání událostí.

Testování v mikroservisním světě

  • Contract testing: testování mezi konzumentem a poskytovatelem (Pact), které předchází rozbití integrace.
  • Testcontainers: integrační testy proti reálným závislostem v kontejnerech.
  • Chaos engineering: výpadky uzlů, zpoždění, ztráta paketů; ověřte odolnost vůči částečným poruchám.
  • Zátěž a kapacita: sledujte latenci p95/p99, saturaci vláken, fronty a backpressure.

Edge vrstva a caching

  • API Gateway / Ingress: autentizace, WAF, rate-limit, transformace požadavků/odpovědí, geo a canary routing.
  • Cache: CDN/edge cache pro statický obsah; aplikační cache (Redis) pro často používanou cestu; invalidace řízená událostmi.
  • Vyjednávání o obsahu a komprese: Gzip/Brotli na edge; upřednostňujte HTTP/2/3.

Monitoring nákladů a efektivity

  • Cost observability: přiřazujte náklady jednotlivým službám (labels/annotations), sledujte náklady na požadavek/tenanta.
  • Optimalizace: správné dimenzování podů, autoscaling podle doménových metrik (hloubka fronty), vypínání nevyužívaných prostředí.

Více tenantů a izolace

  • Model multi-tenancy: shared-nothing (izolované instance), shared-with-guards (ID tenanta v datech + zabezpečení na úrovni řádků) nebo hybridní model.
  • Izolace rizik: rate-limit pro každého tenanta, limity kvót, oddělené fronty/partitions pro stanovení priorit.

Compliance, audit a správa dat

  • Auditní logy: kdo/co/kdy, neměnitelné úložiště (WORM); korelace s trasami.
  • Privacy-by-design: minimalizace dat, šifrování, doba uchovávání dat, mazání na žádost (GDPR/ekvivalenty).
  • SBOM a supply chain: podepisování imagí (cosign), skenování zranitelností (Trivy), zásady nasazování (OPA/Gatekeeper).

Organizační model a provoz

  • „You build it, you run it“: tým vlastní službu od začátku do konce (kód, infrastrukturu, upozornění, náklady).
  • Platform engineering: poskytuje samoobslužné standardizované postupy (šablony CI/CD, observabilitu, runtime) a katalog služeb.
  • Runbooky a SRE: definujte SLO, zásady pro error budget, reakci na incidenty a postmortem analýzy bez obviňování.

Checklist návrhu mikroservisní infrastruktury

  • Jasně definované bounded contexts a vlastnictví dat každé služby.
  • Kontrakt-first API, verzování a schema registry pro události.
  • Asynchronní integrace pro toky napříč doménami, outbox + sagy.
  • Idempotence, opakování/backoff, circuit breaker, rate-limit.
  • mTLS, OIDC, centralizovaná autorizace, správa tajemství v KMS.
  • Observabilita: metriky RED/USE, trace, strukturované logy, SLO/SLI.
  • Kubernetes s GitOps, limity/requests, PDB, autoscaling.
  • CI/CD s canary/blue-green, podpis imagí, SCA/DAST v pipeline.
  • Edge: API Gateway, WAF, caching, řízení provozu.
  • Compliance: auditní logy, doba uchovávání dat, SBOM, zásady nasazování.

Závěr

Návrh mikroservisní infrastruktury je kombinací správně vymezených domén, robustních integračních vzorů, bezpečné a pozorovatelné platformy a disciplinovaných týmových postupů. Úspěch spočívá v koherentních hranicích, asynchronní komunikaci, automatizovaném a bezpečném provozu a měřitelných cílech spolehlivosti. Začněte s jednoduchými hranicemi, investujte do platformy a observability a postupně upravujte řešení podle skutečných potřeb domény a uživatelů.