Archyno
UMLPraxe modelování

Mikroslužby nakreslené poctivě

Každý diagram mikroslužeb vypadá stejně a téměř žádný neodpoví na jedinou důležitou otázku: dá se kterákoli z nich nasadit samostatně? Dvě uspořádání týchž čtyř služeb - jedno, kde to jde, a jedno, kde ne.

8 min čteníUML 2.5.134 z 35

Krátká odpověď

  • Jediná otázka, na kterou musí diagram mikroslužeb odpovědět, je, jestli by šlo kteroukoli krabici vydat ve svůj vlastní den.
  • Sledujte synchronní šipky a spočítejte skoky. Tři a více služeb, které musí všechny běžet pro jednu uživatelskou akci, je distribuovaný monolit.
  • Volání kreslete jako rozhraní a události jako signály. Úsudek schovaný v kódu se tím promění v něco, s čím může recenzent nesouhlasit.
  • Jedna databáze na službu a mimo tento diagram. Kde běží, je pohled na nasazení; co obsahují, je vlastní model každé služby.
UML diagram komponent mikroslužbového systému. API gateway závisí na rozhraní IOrders, které realizuje Order service. Order service posílá signál OrderPlaced, ke kterému jsou přihlášené Shipping service i Billing service.
Čtyři služby, dva druhy vazby. Gateway volá rozhraní, protože potřebuje odpověď; shipping a billing jsou přihlášené k signálu, protože ji nepotřebují.

01Otázka, na kterou musí diagram mikroslužeb odpovědět#

Ne "jaké služby existují" - to zvládne seznam a ten seznam bývá v názvech repozitářů. Otázka zní: dá se kterákoli z nich nasadit samostatně? Všechno, co lidé od mikroslužeb doufají získat - nezávislá vydání, nezávislé škálování, tým, který umí dodat bez koordinační schůzky - plyne z toho, že odpověď je ano, a žádná jiná vlastnost toho obrázku není důležitá, pokud je ne.

Diagram komponent na ni odpoví, pokud nakreslíte ty správné věci. Každá nasaditelná služba je komponenta; každý zveřejněný kontrakt je rozhraní; každá událost je «signal». Pak zakryjte jednu službu dlaní: pokud to, co zbude, plně specifikuje její náhradu, ta služba se dá vydávat ve vlastním rytmu.

02Dva druhy šipky, záměrně#

Na obrázku výše gateway závisí na IOrders - synchronním kontraktu, protože gateway neumí uživateli odpovědět bez objednávky. Shipping a billing míří na OrderPlaced, signál, který order service posílá a nečeká na něj.

Nakreslit ty dvě odlišně je celá hodnota toho obrázku. Synchronní hrany jsou místa, kde se skládá dostupnost: pokud je order service dole, gateway vrátí chybu. Událostní hrany jsou místa, kde ne: když je dole shipping, opozdí se balík a nic jiného to s sebou nestrhne. Diagram, který obě kreslí jako obyčejné šipky, smazal rozdíl, který rozhoduje o tom, jak systém selhává.

03Uspořádání, které je třeba poznat#

UML diagram komponent se čtyřmi službami v synchronním řetězu: API gateway volá Orders, ta volá Pricing, ta volá Inventory. Každé volání je blokující síťový skok.
Tytéž služby, zapojené jako synchronní řetěz. Jeden uživatelský požadavek teď prochází čtyřmi procesy a třemi sítěmi a všechny musí běžet, aby fungovalo cokoli.

Tohle je distribuovaný monolit a je to nejčastější tvar v produkci. Nic na něm není nelegální, nic není špatně pojmenované a projde posouzením, protože vypadá jako každý jiný diagram mikroslužeb. To, co říká, když čtete šipky místo boxů, je, že ty čtyři služby se musí nasazovat spolu, testovat spolu a být nahoře spolu - takže tým vzal na sebe každý náklad distribuce a nechal si každé omezení monolitu.

Příznak se dá spočítat: počet synchronních skoků na jeden požadavek. Jeden je v pořádku. Dva jsou obvykle v pořádku. Tři a víc a dostupnost celku je součinem dostupností částí, takže čtyři služby po 99,9 % dají dohromady asi 99,6 % - což jsou tři hodiny měsíčně, kdy si nikdo nic neobjedná.

Nápravy jsou vidět na témže obrázku. Nechte orders publikovat událost a nechte pricing a inventory na ni reagovat. Nebo sloučte dva z těch boxů, což je legitimní odpověď, která se navrhuje zřídka. Nebo nakešujte to, co pricing potřebuje, aby ten skok přestal být na cestě požadavku. Všechny tři jsou úpravy tohohle diagramu, a proto se ho vyplatí nakreslit před stavbou za těch dvacet minut.

Po jednom řádku na každé

  1. 01Jedna komponenta na nasaditelnou službu, jedno rozhraní na zveřejněný kontrakt, jeden signál na událost.
  2. 02Synchronní a asynchronní vazbu kreslete odlišně - je to způsob, jakým systém selhává.
  3. 03Synchronně, když volající potřebuje odpověď; událost, když ne.
  4. 04Počítejte synchronní skoky na požadavek: tři a víc je distribuovaný monolit.
  5. 05Po synchronním řetězu se dostupnost násobí a ze čtyř devítek jsou tři.
  6. 06Zakryjte kteroukoli službu: to, co zbude, musí specifikovat její náhradu, jinak se nedá vydávat samostatně.

Notace je pokrytá v průvodci diagramem komponent a pět dalších uspořádání - včetně obousměrného cyklu, který tenhle článek neopakuje - je v příkladech diagramů komponent.

04Časté dotazy#

Jak se mikroslužby kreslí v UML?

Jako komponenty, jedna na každou nasaditelnou službu, s rozhraním pro každou publikovanou smlouvu a signálem pro každou událost. Diagramem mikroslužeb ho dělá to, že každý box by šlo vydat ve svůj vlastní den - a rozhraní kolem něj toto tvrzení buď podporují, nebo mu protiřečí.

Jak z diagramu poznám distribuovaný monolit?

Sledujte synchronní šipky a spočítejte skoky na jeden požadavek. Jestli jedna uživatelská akce projde přes tři a více služeb, které musí všechny běžet, distribuovali jste monolit místo toho, abyste ho rozložili - a diagram vám to řekl dřív než produkce.

Mají spolu služby mluvit synchronně, nebo přes události?

Synchronně tehdy, když volající bez odpovědi nemůže pokračovat, a přes událost tehdy, když může. Kreslit to dvěma různými způsoby - rozhraní pro volání, signál pro události - mění tento úsudek v něco, co recenzent vidí a může s tím nesouhlasit, místo konvence schované v kódu.

Kam patří databáze na diagramu mikroslužeb?

Jedna na službu a mimo tento diagram. Pohled na komponenty je o smlouvách mezi službami a nakreslení pěti databází přidá pět boxů, které říkají totéž; kde běží, patří do diagramu nasazení a co obsahují, do vlastního modelu každé služby.

V této sérii

Související články

Všechny články