W uproszczeniu: Release - produkujemy binarke, Deployment - uruchamiamy
Dobrze, no więc w kontekście mikroserwisów - nie ważne czy mówisz o budowaniu binarki, czy o jej uruchamianiu - jeśli dodajesz zmianę w serwisie#1 w Twoim przykładzie, jego testy przechodzą (tego pojedynczego serwisu), chcesz zbudować lub uruchomić binarkę, i potem testujesz go z innymi serwisami (celem zbudowania lub uruchomienia binarki, nie istotne) - i w wypadku sfailowanych testów wprowadzasz poprawkę w serwisie#1 - to to nie jest mikroserwis.
Mając mikroserwis powinieneś móc wprowadzić zmianę w nim, i jeśli jego testy przejdą, to koniec Twojej pracy, możesz release'ować/deployować, bez sprawdzania Twoich zmian z innymi mikroserwisami - to jest ich największa zaleta i ich siła. Jeśli tego nie masz, to właściwie nie masz żadnych zalet które wynikają z takiej architektury, a masz same wady (dodatkowe complexity, latency, etc.)
Jeśli czujesz potrzebę że musisz przetestować serwisy razem, to to jest sygnał że one nie są tak na prawdę odseparowane od siebie - więc tak na prawdę są rozdystrybuowanym monolitem, więc nie są mikroserwisami.
Zakończenie
Ja rozumiem, że większość ludzi jak się spotyka z terminem "mikroserwis" to nie idzie sprawdzać co znaczy to słowo, tylko się domyśla że to po prostu są kontenery które gadają po HTTP i tyle. I jak się słyszy wtedy takie "radykalne" poglądy z ograniczeniami - typu że jakiś bounded context, jakaś niezależność, nie można testować - to brzmi to dziwnie. Ale to jest podejście do problemu od złej strony, to jest zwracanie zbyt dużej uwagi na narzędzia (http, docker, k8s, etc.), a zbyt mało na faktyczną treść.
Faktycznym sensem MS jest niezależna deployowalność - to jest główny cel, i po to są te zabawki wszystkie - po to są kontenery, po to jest swarm/k8s, po to jest gadanie przez sieć, po to są kontrakty, po to są porty i adaptery, i cała masa dodatkowych rzeczy - żeby umożliwić niezależny deployment. Teraz to co się niestety dzieje w branży, to jest to że ludzie dodają wszystkie te śmieci (BO HYPE, i bo mogą wpisać do CV) - ale i tak nie udaje im się osiągnąć niezależnych deploymentów - więc po co to cała zabawa?
Jakby - zastanów się: jeśli nie masz niezależnych deploymentów (bo i tak testujesz serwisy razem, i poprawka w jednym sprawia że musisz coś zmienić w innym) - to po co Ci osobne kontenery, po co docker, k8s, po co komunikacja przez sieć - czy zwykły polimorfizm i zwykłe moduły nie byłby 10x szybsze, 10x łatwiejsze i w gruncie rzeczy 10x lepsze? Większość ludzi odrzuca ten pomysł bo boi się nazwać swój projekt "monolit" - jak to? Ja mam mój super projekt nazwać monolit? Przecież wszyscy wiedzą że monolity są złe, a mikroserwisy są dobre. No właśnie nie - przywykliśmy do przekonania że słowo "monolit" oznacza spaghetti. Idąc tym krokiem, sporo ludzi myśli że jedyny sposób na jakąkolwiek sensowną modularność to jest podzielić kod na kontenery i gadać przez HTTP. No nie koniecznie - da się zbudować bardzo fajny program w jednym procesie, który ma super moduły i nie będzie spaghetti. Brak modularności jest zły, ale modularność w ramach jednego procesu jest spoko. Tylko że są tańsze i lepsze sposoby na wytworzenie sobie modularności niż MS.