Archyno
C4Diagramy struktury

Diagram kontejnerů v C4

Druhá úroveň modelu C4, nakreslená od začátku do konce - a jediná úroveň, jejíž název působí víc zmatku než samotný diagram.

6 min čteníC4 model2 z 3

Krátká odpověď

  • Kontejner je cokoli samostatně nasaditelného nebo spustitelného: aplikace, API, databáze, broker. Ne Docker kontejner.
  • Každý box dostane svou technologii a každá čára svůj protokol. Diagram kontejnerů bez nich je skica z boxů a šipek.
  • Šipku kreslete ve směru volání, ne ve směru dat. Odpověď je implikovaná a kreslit ji znamená zdvojnásobit čáry za nic.
  • Externí systémy zůstávají na diagramu, ale mimo hranici a v šedé - vysvětlí okraje, aniž by předstíraly, že je řídíte.

01Jeden systém, otevřený#

Diagram kontejnerů vezme jediný box z diagramu kontextu systému a otevře ho. Všechno uvnitř je něco, co musí běžet; všechno venku zůstává kontextem.

Kontejnerový diagram C4 pro internetový obchod. Zákazník používá jednostránkovou aplikaci v prohlížeči, která volá API obchodu přes HTTPS a JSON. API čte a zapisuje do databáze objednávek přes SQL, publikuje do brokera zpráv přes AMQP a volá externího poskytovatele plateb přes HTTPS. Pracovník expedice konzumuje z brokera a zapisuje do téže databáze objednávek.
Sedm boxů, každý z nich buď běží, nebo je výslovně externí. Technologie je na boxu a protokol na čáře, a právě to dělá diagram čitelným pro někoho, kdo systém nikdy neviděl.

Čtěte ho jako soubor vět: zákazník prohlíží jednostránkovou aplikaci; aplikace volá storefront API přes HTTPS; API zapisuje objednávky do PostgreSQL a publikuje do RabbitMQ; worker konzumuje z RabbitMQ a zapisuje do téže databáze. Právě ta poslední věta je důvod, proč diagram kontejnerů existuje - dva kontejnery zapisující do jedné databáze jsou vazba, kterou žádný katalog služeb neukáže.

02Technologie na boxu, protokol na čáře#

Právě tyhle dvě popisky odlišují diagram kontejnerů od skici. Bez technologie by box s názvem "Storefront API" mohl být Lambda, monolit v Rails nebo uložená procedura. Bez protokolu by čára mezi dvěma boxy mohla být synchronní volání v cestě požadavku, nebo noční dávka - a to jsou pro kohokoli, kdo uvažuje o selháních, opačné skutečnosti.

Šipku kreslete ve směru volání, ne ve směru dat. Čtení je pořád volání od čtenáře k úložišti a kreslit odpověď jako druhou šipku zdvojnásobí počet čar bez jakéhokoli přínosu - odpověď je implikovaná požadavkem.

03Čtyři chyby, které ho udělají zbytečným#

Vynechání úložišť. Diagram služeb bez databází skrývá přesně tu vazbu, která způsobuje incidenty. Pokud dva kontejnery zapisují do téže tabulky, musí to být na obrázku.

Míchání úrovní. Diagram kontejnerů s jedním kontejnerem otevřeným do jeho vnitřních tříd jsou dva diagramy špatně přeložené přes sebe. Otevřete ho raději na diagramu komponent, kde publikum takovou hloubku očekává.

Kreslení infrastruktury. Load balancery, sidecary a uzly Kubernetes patří na diagram nasazení. Diagram kontejnerů je o tom, čím software je, ne o tom, kde běží.

Tiché vypuštění externích systémů. Poskytovatel plateb není váš a z toho důvodu ho nelze vynechat - je zdrojem vaší latence a poloviny vašich režimů selhání. Nechte ho tam, označte ho jako externí a tím to skončí.

Po jednom řádku na každé

  1. 01Kontejner je samostatně nasaditelný nebo spustitelný - aplikace, API, databáze, broker, úloha.
  2. 02Označte každý box technologií a každou čáru protokolem, jinak diagram neříká nic.
  3. 03Šipky sledují volání, ne data. Odpověď je implikovaná.
  4. 04Úložiště a externí systémy zůstávají na diagramu; infrastruktura se přesouvá na diagram nasazení.

04Časté dotazy#

Co se v C4 počítá jako kontejner?

Cokoli, co musí běžet, aby systém fungoval, a co lze nasadit nebo spustit samostatně: webová aplikace, jednostránková aplikace, mobilní aplikace, API, databáze, message broker, plánovaná úloha. Testem je nasaditelnost, ne počet procesů ani technologie.

Je Docker kontejner kontejnerem podle C4?

Ne nutně. Názvy se shodují, ale znamenají jiné věci. Tři procesy v jednom image jsou tři C4 kontejnery, pokud o nich tým uvažuje odděleně; jedna služba běžící na čtyřiceti replikách je jeden C4 kontejner. Ignorujte balení a ptejte se, co je samostatně nasaditelné.

Má být každá mikroslužba kontejnerem?

Ano, a to je poctivý důvod, proč diagramy kontejnerů narůstají. Pokud čtyřicet služeb udělá diagram nečitelným, je to informace o architektuře, ne o notaci - seskupte je podle ohraničených kontextů a kreslete skupiny, nebo kreslete jeden diagram na kontext.

Kam patří fronty a databáze?

Na diagram, jako kontejnery, s označenou technologií. Vynechat databázi je nejčastější způsob, jak se diagram kontejnerů stane zavádějícím: skryje vazbu mezi dvěma službami, které do ní obě zapisují.

V této sérii
  1. 01Co je C4?
  2. 02Diagram kontejnerů
  3. 03C4 vs UML

Související články

Všechny články