ActFramework Test Bed
The test application is listening on port 8080
ActFramework is a fullstack Java web application framework with rich set of features:
- Hot reload on dev mode
- Easy to start, easy to deploy
- SpringMVC style MVC without verbosity of Spring
- Multi-environment configuration
- SQL and NoSQL data access
- Multi-datasource in one application
- i18n
- Security ready
- Awesome RESTful support
- Powerful view architecture with multiple rendering engine support
- ... a lot more can be checked on http://actframework.org
The application is created on ActFramework 1.6.4
./run.sh
And you should see something like this:
_ ___ _ _ _ _
/\ / | __ |_) |_ |\ | / |_| |\/| /\ |_) |/
/--\ \_ | |_) |_ | \| \_ | | | | /--\ | \ |\
powered by ActFramework r1.6.4-da20
version: r1.6.0
scan pkg: benchmark.act
base dir: /home/luog/p/greenlaw110/microservices-framework-benchmark/actframework/target/dist
pid: 12458
profile: prod
mode: PROD
zen: If the implementation is easy to explain, it may be a good idea.
2018-01-20 06:26:10,727 INFO a.Act@[main] - loading application(s) ...
2018-01-20 06:26:10,731 INFO a.a.App@[main] - App starting ....
2018-01-20 06:26:10,834 WARN a.h.b.ResourceGetter@[main] - URL base not exists: META-INF/resources/webjars
2018-01-20 06:26:10,844 WARN a.a.DbServiceManager@[main] - DB service not initialized: No DB plugin found
2018-01-20 06:26:11,299 INFO a.a.App@[main] - App[act-benchmark] loaded in 568ms
2018-01-20 06:26:11,317 INFO o.xnio@[main] - XNIO version 3.3.8.Final
2018-01-20 06:26:11,331 INFO o.x.nio@[main] - XNIO NIO Implementation Version 3.3.8.Final
2018-01-20 06:26:11,432 INFO a.Act@[main] - network client hooked on port: 8080
2018-01-20 06:26:11,433 INFO a.Act@[main] - app is ready at: http://192.168.1.8:8080
2018-01-20 06:26:11,433 INFO a.Act@[main] - it takes 2160ms to start the app
It shall respond with Hello World! response with content-type set to text/plain.
This is a nonblock service without session processing. This kind of service endpoint is not a usually application service. It shows the high water mark of ActFramework's performance on dealing with simplest scenario.
This endpoint is implemented through an entry in resources/routes.conf file:
GET / echo: Hello World!
It shall respond with Hello World! response with content-type set to text/html.
This is a blocking service with session processing. This endpoint represent how a normal service is implemented in ActFramework.
@GetAction("/txt")
public String text() {
return "Hello World!";
}
Testing the above endpoints on my local machine generates the following results
| Endpoint | Block I/O | Session processing | Throughput |
|---|---|---|---|
| / | nonblock | no | 1430632.33/s |
| /txt | block | yes | 244022.40/s |
Test logs:
For default / endpoint:
luog@luog-Satellite-P50-A:~/p/greenlaw110/microservices-framework-benchmark$ wrk -t4 -c128 -d15s http://localhost:8080 -s pipeline.lua --latency -- / 16
Running 15s test @ http://localhost:8080
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.67ms 2.21ms 35.46ms 89.73%
Req/Sec 360.09k 36.97k 475.68k 70.50%
Latency Distribution
50% 0.93ms
75% 1.95ms
90% 3.95ms
99% 11.28ms
21581744 requests in 15.09s, 2.03GB read
Requests/sec: 1430632.33
Transfer/sec: 137.80MB
For /txt endpoint:
luog@luog-Satellite-P50-A:~/p/greenlaw110/microservices-framework-benchmark$ wrk -t4 -c128 -d15s http://localhost:8080 -s pipeline.lua --latency -- /txt 16
Running 15s test @ http://localhost:8080
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 6.78ms 5.54ms 73.09ms 76.03%
Req/Sec 64.53k 4.43k 74.88k 70.17%
Latency Distribution
50% 5.30ms
75% 9.41ms
90% 14.26ms
99% 25.18ms
3853264 requests in 15.01s, 0.89GB read
Requests/sec: 256795.14
Transfer/sec: 60.49MB
- CPU: Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz
- RAM: 16GB
- Storage: 200G SSD