( _Franko_ | 2017. 08. 28., h – 19:02 )

"Tehát szerintem a JEE-vel nagyon jó, modulokból felépülő alkalmazásokat készíthetünk, amelyek még valamelyest skálázhatók is, de microservice rendszerre nem igazán alkalmas."

Aha... na, csináltam teszteket (spring-boot-memory-performance és azonos greeting REST stateless EJB).

Minimum az elinduláshoz és a stabil 16 szálas terheléshez szükséges memória (4 MB lépésekben):

Spring-boot: 24 MB
Wildfly Swarm 2017.8.1: 40 MB
Wildfly 10.1 Standalone default configuration: 56 MB

Terheléses tesztek az elinduláshoz szükséges minimum memória mellett, warm up után.

Spring-boot, -Xmx24M:

Requests per second:    435.86 [#/sec] (mean)
Time per request:       36.709 [ms] (mean)
Time per request:       2.294 [ms] (mean, across all concurrent requests)

Wildfly Swarm 2017.8.1, -Xmx40M:

Requests per second:    2262.06 [#/sec] (mean)
Time per request:       7.073 [ms] (mean)
Time per request:       0.442 [ms] (mean, across all concurrent requests)

Wildfly 10.1 Standalone default configuration, -Xmx56M

Requests per second:    1106.37 [#/sec] (mean)
Time per request:       14.462 [ms] (mean)
Time per request:       0.904 [ms] (mean, across all concurrent requests)

Terheléses tesztek az elinduláshoz szükséges minimum memória +16 MB mellett (ezzel ajánlották futtatni a Spring-boot demót), warm up után.

Spring-boot, -Xmx32M:

Requests per second:    14436.82 [#/sec] (mean)
Time per request:       1.108 [ms] (mean)
Time per request:       0.069 [ms] (mean, across all concurrent requests)

Wildfly Swarm 2017.8.1, -Xmx56M:

Requests per second:    22141.01 [#/sec] (mean)
Time per request:       0.723 [ms] (mean)
Time per request:       0.045 [ms] (mean, across all concurrent requests)
T

Wildfly 10.1 Standalone default configuration, -Xmx72M

Requests per second:    17819.74 [#/sec] (mean)
Time per request:       0.898 [ms] (mean)
Time per request:       0.056 [ms] (mean, across all concurrent requests)

Terheléses tesztek az elinduláshoz szükséges minimum memória +16 MB mellett két külön alkalmazással, külön-külön futtatva, warm up után.

2x(Spring-boot, -Xmx32M), összesen 64MB memória:

Requests per second:    14786.16 [#/sec] (mean)
Time per request:       1.082 [ms] (mean)
Time per request:       0.068 [ms] (mean, across all concurrent requests)

Requests per second:    14498.15 [#/sec] (mean)
Time per request:       1.104 [ms] (mean)
Time per request:       0.069 [ms] (mean, across all concurrent requests)

2x(Wildfly Swarm 2017.8.1, -Xmx56M), összesen 112MB memória:

Requests per second:    22311.87 [#/sec] (mean)
Time per request:       0.717 [ms] (mean)
Time per request:       0.045 [ms] (mean, across all concurrent requests)

Requests per second:    22222.77 [#/sec] (mean)
Time per request:       0.720 [ms] (mean)
Time per request:       0.045 [ms] (mean, across all concurrent requests)

1x(Wildfly 10.1 Standalone default configuration, -Xmx72M), két külön war alkalmazás, összesen 72MB memória.

Requests per second:    17151.07 [#/sec] (mean)
Time per request:       0.933 [ms] (mean)
Time per request:       0.058 [ms] (mean, across all concurrent requests)

Requests per second:    17877.72 [#/sec] (mean)
Time per request:       0.895 [ms] (mean)
Time per request:       0.056 [ms] (mean, across all concurrent requests)

Mindenki gondolkodjon el rajta, mind a terheléses teszten, mind azon, hogy biztos külön-külön szerver kell-e a két külön microservice futtatásához... és persze azon is, hogy a valóságban egy komplexebb metódus esetén elég-e +16 MB memória vagy mondjuk +512 MB kell, amikor szinte nullára olvad a Spring-boot előnye még egy alkalmazással is. És persze azon is érdemes elgondolkodni, hogy ha kell egyszer egy JTA ernyő vagy egy JTS, esetleg local queue, akkor azt mekkora fejlesztési és üzemeltetési overhead belehegeszteni a Spring-boot alkalmazásokba...