2. Measuring performance of container cluster systems¶
- status
ready
- version
1.0
- Abstract
A complete microservices architecture has the ability to manage a large number of small applications which together form a set of services. Container technology provides a way to package and run applications independent of the underlying operating system. Microservice and container technologies are very complimentary and usually used in conjunction. There are several container management systems, such as Apache Mesos, Kubernetes, and Docker Swarm, which provide various ways to manage groups of containers.
2.1. Test Plan¶
2.1.1. Test Environment¶
2.1.1.1. Preparation¶
- Typical container frameworks consist of several components:
Configuration and Synchronization (Zookeeper)
Scheduler (Mesos)
Application manager (Marathon)
2.1.1.2. Environment description¶
In this document only performance and scaling aspects of the different frameworks will be covered. It is expected that existing solutions will be used and that they have had sufficient functional testing. Performance aspects should cover elapsed times for operations used in the framework.
2.1.2. Test Case #1: A new application creation time¶
2.1.2.1. Description¶
This test is aimed at measuring the total elapsed time of the create application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers spawning on the slaves hosts.
2.1.2.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.2.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.3. Test Case #2: A application CPU update time¶
2.1.3.1. Description¶
This test is aimed at measuring the total elapsed time of the update CPU application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers updated on the slaves hosts.
2.1.3.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.3.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Update applications CPU up to 2.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.4. Test Case #3: A application memory update time¶
2.1.4.1. Description¶
This test is aimed at measuring the total elapsed time of the update memory application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers updated on the slaves hosts.
2.1.4.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.4.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Update applications memory up to 512M.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.5. Test Case #4: A application disk update time¶
2.1.5.1. Description¶
This test is aimed at measuring the total elapsed time of the update disk application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers updated on the slaves hosts.
2.1.5.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.5.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Update applications disk up to 100G.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.6. Test Case #5: A application instances update time¶
2.1.6.1. Description¶
This test is aimed at measuring the total elapsed time of the update number of instances application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers updated on the slaves hosts.
2.1.6.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.6.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Update instances up to twice in the each application.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.7. Test Case #6: A application restart time¶
2.1.7.1. Description¶
This test is aimed at measuring the total elapsed time of the restart application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers restarted on the slaves hosts.
2.1.7.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.7.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Restart all applications.
Wait util all application go to state Running
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.8. Test Case #7: A application delete time¶
2.1.8.1. Description¶
This test is aimed at measuring the total elapsed time of the delete application operation. This metric includes the time of application submission processing, time of scheduling, and time of actual all containers deleted on the slaves hosts.
2.1.8.2. List of performance metrics¶
Parameter |
Description |
---|---|
APPLICATION_OPERATION_MAX |
Maximum execution time of one operation |
APPLICATION_OPERATION_MIN |
Minimum execution time of one operation |
APPLICATION_OPERATION_MEAN |
Mean execution time of all operations |
APPLICATION_OPERATION_MEDIAN |
Median execution time of all operations |
Parameter |
Value |
---|---|
NODES_NUMBER_PER_APPLICATION |
50, 100, 500 |
CONCURRENCY |
1, 2, 4, 8, 16 |
2.1.8.3. Measuring values¶
Start to create simultaneously the number of applications equal CONCURRENCY with number of instances equal NODES_NUMBER_PER_APPLICATION in the each application through Marathon API. Every instances is docker container with nginx from dockerhub. Every instances has 1 CPU, 256M RAM and 50G disk.
Wait util all application go to state Running
Delete all applications.
Wait util list of application return empty list.
As a result of the previous step you should be able to provide the amount of graphs and tables with the dependencies on an concurrency and instances number of a operation time. One table for all results and graphs for every concurrency and every nodes number. On this step you need to calculate minimum, maxima, average and median of operation time. You need to fill the following table with calculated values:
CONCURRENCY |
NODES_NUMBER_PER_APPLICATION |
APPLICATION_OPERATION (sec) |
|||
---|---|---|---|---|---|
minimum |
maximum |
average |
median |
||
1 |
50 |
||||
1 |
100 |
||||
1 |
500 |
||||
2 |
50 |
||||
2 |
100 |
||||
2 |
500 |
||||
4 |
50 |
||||
4 |
100 |
||||
4 |
500 |
||||
8 |
50 |
||||
8 |
100 |
||||
8 |
500 |
||||
16 |
50 |
||||
16 |
100 |
||||
16 |
500 |
2.1.9. Test Case #8: Health check Performance¶
2.1.9.1. Description¶
This test is aimed at validating the response time of a health check when many health checks are configured.
2.1.9.2. List of performance metrics¶
Parameter |
Description |
---|---|
HEALTH_CHECK_INTERVAL_DEVIATION(CONTAINERS_COUNT) |
Difference between real health check
interval and configured value
|
Parameter |
Value |
---|---|
HEALTH_CHECK_TEST_DURATION |
20 |
HEALTH_CHECK_INTERVAL |
30 |
2.1.9.3. Measuring REAL_INTERVAL(TASK_COUNT) values¶
Deploy Marathon cluster from scratch.
Run CONTAINERS_COUNT containers in container cluster system. Setup health check for those containers in container cluster system with health check interval is set to HEALTH_CHECK_INTERVAL seconds.
Gather HEALTH_CHECK_INTERVAL_DEVIATION from containers during HEALTH_CHECK_TEST_DURATION minutes.
You need to perform step 2 and step 3 per each CONTAINERS_COUNT value from the following list:
CONTAINERS_COUNT=2500
CONTAINERS_COUNT=5000
CONTAINERS_COUNT=7500
CONTAINERS_COUNT=10000
CONTAINERS_COUNT=12500
CONTAINERS_COUNT=15000
CONTAINERS_COUNT=17500
CONTAINERS_COUNT=20000
As a result of the previous step you should be able to provide table with the dependences on an health check interval deviation of a containers count. You need to calculate minimuml, maximal, average and 95% percental of HEALTH_CHECK_INTERVAL_DEVIATION parameter per each CONTAINERS_COUNT value. You need to fill the following table with calculated values:
¶ CONTAINERS_COUNT
HEALTH_CHECK_INTERVAL_DEVIATION
minimum
maximal
average
95%
2.2. Applications¶
2.2.1. list of container platforms¶
Name of container platform |
Version |
---|---|
Apache Mesos |
|
Marathon |
|
Docker |
2.3. Reports¶
- Test plan execution reports: