Podle meho nazoru maji microservices velice uzkou niku pro sluzby s prostupnosti pro radove miliony uzivatelu.
Kdyz si budu stavet novy google, microservices me neminou.
Prakticky jedina realna vyhoda microservices je moznost dynamickeho pridavani/vymeny workeru. Coz je na druhou stranu taky pekne nebezpecne.
Pro bezne skalovane aplikace v ceskem prostredi je to overkill ktery prinese jenom prusery.
A to hlavne diky zminovanemu bodu 9.6.
Predrecnici navrhovali toto resit asyc API - nejlepsi zpusob jak si vytvorit nejake pekne race condition peklo.
Debug a troubleshooting aplikace je peklo. Monitoring aplikace je peklo. Udrzovani stavove informace peklo. Paxe to lepi obezlickama typu Hazelcast a Zookeeper, aby se zviratka nerozebehly. A pres message bus, SPOF jak prase.
Devops peklo, srani s dokerama a ansiblama, nachylne na chyby.
Monolit aplikace takove problemy nema, volani metody v ramci jednoho procesu pro potreby sync message nic neprebije.
Monolit aplikaci, jak ostatne p. Tisnovsky popsal, je mozno na urovni zdrojoaku pekne modularizovat, kombo spring+maven prehledne rozdeli kompetence. Teprve vysledny build je monolit, pokud vykonove postacuje, je mnohem jednodussi na spravu. Devops Spring Boot FAT JAR je primitivni deploy jednoho JAR file - hotovo.
Pokud jsou vykonove potize, aplikace se vyztuzi na urovni modulu ve zdrojaku, zparalelizuju uzke hrdlo, zclusteruju DB backend apod.
Nevyhoda je nemoznost dynamicke upravy, monolit je nuno otocit cely.
Obecne, kod bezne aplikace obsahuje z drtive vetsiny kod, na jehoz rychlosti vykonavani az tak nezalezi. Pouze par procent horkeho kodu ma smysl vykonove optimalizovat.
Osobne se snazim pri navrhu aplikace zachovat pokuf mozno monolit. Vysledek je jednoduchy, snadno pochopitelny, predikovatelny, debugovatelny, mam k dispozici prakticky vsude komplet stacktrace.
A zatim mi to stacilo vsude.
Pokud najdu uzke hrdlo, zkusim paralelizovat na urovni Spring TaskExecutor a TaskScheduler.
Teprve kdyz toto nepomuze, ma cenu externalizovat dilci funkcionalitu do microservice. Treba postavenou na GOLANG pipeline navrhovem vzoru.
Jinak ponechat monolit kde to jenom jde.