A növekedés microservice elfogadása okozott egy kis népszerűsége néhány korábban figyelmen kívül hagyott szoftver tervezési minták. Ezek közül a minták közül sokat Eric Evans Domain Driven Design-jából bányásztak ki, egy könyv, amely ugyanúgy szól a csapat felépítéséről, mint a szoftverarchitektúráról.
ezen minták közül talán a határolt kontextus a legfontosabb, amelyet meg kell érteni. Mérnökökként a korlátozott kontextust Szoftverarchitektúra-tervezési mintának tekintettük. De ez azért van, mert egy kicsit az eredeti használatból választottuk. Ahogy Evans használta, a korlátozott kontextus ugyanolyan szervezeti minta, mint technikai.
ezért jöttem, hogy a korlátozott Kontextusmintát a mikroszolgáltatások megértésének láncszemeként tekintsem. Nem csak azt, hogyan építsük fel őket, hanem azt is, hogy miért építjük fel őket, és hogyan tehetik sikeresebbé szervezeteinket. Ha megértjük, hogy mi a határolt kontextus — ha elfogadjuk a határolt kontextus gondolkodásmódot mind technikailag, mind szervezetileg — akkor valóban sikeresek lehetünk a mikroszolgáltatások architektúrájának felépítésében.
miért érdemes áttérni a mikroszolgáltatásokra?
először hajtsunk végre egy kis gyakorlatot. Tedd fel magadnak ezt a kérdést: Miért építünk elsősorban mikroszolgáltatásokat?
szánjon egy percet arra, hogy átgondolja. Melyek azok az előnyök, amelyek először eszébe jutnak? Melyek a legfontosabb problémák, amelyeket meg kell oldanunk? Írj le néhány választ, csak hogy őszinte legyél.
…
megvan a válaszod? Jó. Olvasd vissza magadnak. Elérte a szokásos technikai előnyöket? Folyamatos szállítás, skálázhatóság, poliglot környezetek, konténerek és felhők, és mindezek a jó dolgok? Remek.
de a legfontosabb válaszod tartalmazott-e valamit a szervezet hatékonyabb működésének lehetővé tételéről? Kellene. Mivel a mikroszolgáltatások építése nem a technikai előnyök megvalósításáról szól. Valójában a szervezeti előnyök megszerzéséről szól. Minden más egy végrehajtási részlet.
Monoliths = coupled code and couped teams
ahogy monolitjaink egyre nagyobbak és nagyobbak lesznek, a termelékenység csökkenni kezd. Ennek legalább két fő oka van.
fékezzük a sebességünket
először is, minden mérnöki csapat hozzájárul egy hatalmas kódbázishoz. Mint ilyen, a csapatok egyre nagyobb valószínűséggel szembesülnek azzal, hogy kódjuk ütközik mások kódjával. A lehetséges problémák enyhítése érdekében eljárásokat indítunk — kódfagyasztások, minőségbiztosítási tesztelési időszakok, vonatok kiadása stb. – amelyeket szó szerint arra terveztek, hogy lelassítsák a termelékenységünket.
természetesen ezek az eljárások megakadályozzák a funkciók és fejlesztések időben történő telepítését. Pusztítást okoznak a mérnökök azon képességében is, hogy csapataik prioritásaira összpontosítsanak. Ha egy hiba egy tesztelési időszak alatt található, a felelős csapatnak kontextust kell váltania, és a hiba megoldására kell összpontosítania. Ha súlyos hibát találnak a gyártásban, a csapatnak nemcsak javítania kell a hibát, hanem át kell ugrania a karikákon is, hogy a következő kiadási vonat telepíthesse.
az ügyeleti szolgálat boondoggle-vé válik. Ha valami baj van a monolitunkkal, valakinek rendelkezésre kell állnia — éjjel — nappal-a probléma megoldásához. De ki? A nagy monolitokkal rendelkező nagy szervezetek általában két választási lehetőséggel szembesülnek:
egy eseménykezelő csapat, amelynek egyetlen, szomorú, sajnálatos feladata a szervezeten belül az, hogy reagáljon más mérnökök kódja által okozott problémákra, és kitalálja, hogyan oldja meg őket.
egy forgó ügyeleti ütemterv, amelynek során minden héten egy tetszőleges mérnöknek kijelölik azt a szomorú, sajnálatos feladatot, hogy felelőssé váljon olyan problémák megoldásáért, amelyeket valószínűleg egy másik mérnök, egy másik mérnöki csapat által írt kód okoz.
(Mis)csapataink szervezése
a monolitok még más módon keverednek szervezeteinkkel. Az egész szervezetünk ugyanazon a nagy terméken dolgozik. De még mindig meg kell szakítanunk a szervezetet kezelhető csapatokra. Tehát hajlamosak vagyunk funkcionális szerepeket keresni a csapat határainak megtalálásához: