Sizing calculation using a simple system as an example (CLI)
updated on:A small example of sizing calculation for a simple system showing how to describe a blueprint with services, as well as the parameters of the planned load. The description is specially made with a minimum set of services and parameters for them, so as not to overload it with details.
Preparation
For ease of use, it is recommended to use an editor with XML support, such as Visual Studio Code or IntelliJ IDEA.
First, you need to create a new blueprint blueprint-simple-system.xml (the name can be anything) in the workbench
directory with the following contents:
blueprint-simple-system.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tekInfraBlueprint model="0.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.tekblueprint.org/xml/infra http://www.tekblueprint.org/xml/infra-0.6.xsd
http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
xmlns="http://www.tekblueprint.org/xml/infra" xmlns:c="http://www.tekblueprint.org/xml/core">
<c:name>ACME Systems</c:name>
</tekInfraBlueprint>For now, here is only the name of the future system named ACME Systems. Later, we will add various components to it.
Environments
In most cases, the system works in several environments, for example, for development (dev), testing (test),
pre-production (uat), production (prod), etc. To keep things simple, we will make only two environments:
global– a common environment for shared services.prod– a production environment for main services.
The environments for the blueprint are mainly needed to group services in the final report.
Let’s add them to the blueprint:
<tekInfraBlueprint model="0.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.tekblueprint.org/xml/infra http://www.tekblueprint.org/xml/infra-0.6.xsd
http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
xmlns="http://www.tekblueprint.org/xml/infra" xmlns:c="http://www.tekblueprint.org/xml/core">
<c:name>ACME Systems</c:name>
<environments>
<environment id="global" name="Global Environment"/>
<environment id="prod" name="Production Environment"/>
</environments>
</tekInfraBlueprint>Since the global environment is listed first, all default services will be added to it unless otherwise specified.
Servers
This step is optional if you do not plan to distribute services across different servers. Again, for simplicity, we will use only one physical server on which all our services will be located.
Add a server description to the blueprint in the <servers> block:
<tekInfraBlueprint model="0.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.tekblueprint.org/xml/infra http://www.tekblueprint.org/xml/infra-0.6.xsd
http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
xmlns="http://www.tekblueprint.org/xml/infra" xmlns:c="http://www.tekblueprint.org/xml/core">
<c:name>ACME Systems</c:name>
<environments>
<environment id="global" name="Global Environment"/>
<environment id="prod" name="Production Environment"/>
</environments>
<servers>
<server id="main" x="2" name="main server" _base="enterprise:hp-dl360:1.0"/>
</servers>
</tekInfraBlueprint>Here, one server with the identifier main and component reference enterprise:hp-dl360:1.0 via the _base attribute is specified. Components describe
server characteristics, such as the number of processors, RAM, etc.
At the moment, this is necessary for visual grouping of services; available server resources do not impose any restrictions on the distribution of services. In the future, the ability to automatically distribute services across servers and highlight excess available resources will be added.
Example component for the server enterprise:hp-dl360:1.0
<?xml version="1.0" encoding="UTF-8" ?>
<tekHardwareServer model="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.tekblueprint.org/xml/core"
xsi:schemaLocation="http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
group="enterprise" artifact="hp-dl360" version="1.0">
<name>HP :: ProLiant DL360</name>
<t>
The HP ProLiant DL360 is a powerful and versatile server designed for enterprise-level performance. It is ideal
for a wide range of applications, including virtualization, web hosting, database management, and more. The
DL360 series offers excellent performance, reliability, and scalability, making it a popular choice among
businesses of all sizes.
</t>
<variants>
<variant id="gen10-8sff" name="HPE ProLiant DL360 Gen10 Server">
<t>
The HPE ProLiant DL360 Gen10 Server supports the Intel® Xeon® Scalable Processor Family with up to 28
cores, plus 2933 MT/s HPE DDR4 Smart Memory supporting up to 3.0 TB max. With the added performance that
HPE Persistent Memory and 10 NVMe bring, the HPE ProLiant DL360 Gen10 means business. Deploy this dense
platform for diverse workloads in space constrained environments and maintain it with ease by automating
the most essential server lifecycle management tasks with HPE OneView and HPE iLO 5.
</t>
<cpu x="2" _base="enterprise:intel-xeon-gold-6130:1.0"/>
<memory>
<slot x="4" _base="enterprise:kingston-server-premier-dd4-2666:1.0:32"/>
</memory>
<storage>
<slot x="1" _base="enterprise:samsung-pm1643-ssd-sas:1.0:1.92"/>
<slot x="4" _base="enterprise:hpe-hdd-sas:1.0:1.8"/>
</storage>
<network>
<slot x="1" _base="enterprise:hpe-331-rj45:1.0"/>
</network>
</variant>
</variants>
</tekHardwareServer>Systems and Services
The services for which resource consumption is planned to be calculated are grouped into systems within the <systems> block. For
example, one system app with three services will be used:
msvc_orders– an orders processing microservice.db– a DBMS for storing microservice data.san– a SAN storage where DBMS backups will be placed.
msvc_orders
Let’s add the system description with the microservice using component microservice:java-integration:1.0:
<systems>
<system id="app" name="Application System">
<services>
<service id="msvc_orders" name="Orders Microservice" env="prod" replicas="2"
_base="microservice:java-integration:1.0">
<c:requirements>
<c:cpu cores="0.25" freq="3Ghz"/>
<c:mem capacity="512MiB"/>
<c:disk capacity="256MiB" iops="10"/>
<c:net bandwidthRx="10Mbit/s" bandwidthTx="10Mbit/s"/>
</c:requirements>
<c:module id="restapi" type="http" name="RESTful API">
<!-- <balancer disabled="true"/> -->
</c:module>
</service>
</services>
</system>
</systems>The microservice contains only one module restapi which will be accessed to execute requests.
The <c:requirements> block allows you to specify basic resource requirements for the service: CPU, memory, disk, and network.
Component microservice:java-integration:1.0
<?xml version="1.0" encoding="UTF-8" ?>
<tekSoftwareService model="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.tekblueprint.org/xml/core"
xsi:schemaLocation="http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
group="microservice" artifact="java-integration" version="1.0">
<name>Java Microservice for Integration</name>
<t>
The Java Microservice for Integration is a scalable and maintainable solution designed to facilitate seamless
communication between different systems through the use of RESTful APIs.
</t>
<keywords>microservice, integration, java, RESTful, API</keywords>
<license name="tekBlueprint License" holder="tekBlueprint"
url="https://www.tekblueprint.org/about/licence"
commercialUse="true" type="COPYLEFT"/>
<metrics>cpu, mem, net, data, rps, iops</metrics>
<variant id="main" server="main">
<module id="http" type="http"/>
</variant>
<forecasting>
<onModuleOut>
<add-metric id="rps">statistics.probeRequestsPerSecond</add-metric>
<if-type type="http">
<add-metric id="net-tx">statistics.probeBytesPerSecond</add-metric>
<add-metric id="cpu">statistics.probeCpuPerSecond</add-metric>
<add-metric id="mem">statistics.probeMemoryPerSecond</add-metric>
</if-type>
</onModuleOut>
<onModuleIn>
<add-metric id="rps">statistics.probeRequestsPerSecond</add-metric>
<if-type type="http">
<add-metric id="net-rx">statistics.probeBytesPerSecond</add-metric>
<add-metric id="cpu">statistics.probeCpuPerSecond</add-metric>
<add-metric id="mem">statistics.probeMemoryPerSecond</add-metric>
<add-metric id="iops">statistics.probeBytesPerSecond / 4096</add-metric>
</if-type>
</onModuleIn>
</forecasting>
</tekSoftwareService>db
Next, add the database description to the <services> block of the same system:
<service id="db" name="Database" env="global" replicas="2" _base="rdbms:postgresql:17">
<c:requirements>
<c:cpu cores=".25" freq="3Ghz"/>
<c:mem capacity="256MiB"/>
<c:disk capacity="1GiB" iops="1K"/>
<c:net bandwidthTx="10Mbits" bandwidthRx="10Mbits"/>
</c:requirements>
<c:module id="msvc_orders" type="table" name="Orders Database">
<c:storage/>
<c:replicate type="master-slave">
<c:overhead>
<c:data in="512b" out="256b"/>
</c:overhead>
</c:replicate>
</c:module>
</service>Here it is a bit more complicated. table is used as a module – some abstract table that will be accessed. The
database will be shared and located in the global environment.
We also specified replicas="2", that is, we want to place two replicas of the database in the cluster. This means that
we will have two nodes in the cluster, each of which will contain a replica of the database.
In order for the service to store data in itself, we add the <c:storage/> block. It enables accounting of all
incoming requests with data as records in the table. For example, a request of 512 bytes will be considered a data
record of 512 bytes.
We also add master-slave replication. This means that we have one primary server (reading and writing) and a
second one for a copy of the data. All data from the primary service will be copied to the secondary ones. And we will
additionally point out that when replicating between servers, redundancy is added for the transmitted data: 256 bytes per write and 128 bytes per response.
Component rdbms:postgresql:17
<?xml version="1.0" encoding="UTF-8" ?>
<tekSoftwareService model="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.tekblueprint.org/xml/core"
xsi:schemaLocation="http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
group="rdbms" artifact="postgresql" version="17">
<name>PostgreSQL</name>
<t>
PostgreSQL is a powerful, open source object-relational database system that uses and extends the SQL language
combined with many features that safely store and scale the most complicated data workloads. It has more than 35
years of active development and a proven architecture that fully supports ACID transactions, foreign keys,
triggers, updatable views, and common table expressions (CTEs). PostgreSQL enhances robustness with
multi-version concurrency control (MVCC), point-in-time recovery, asynchronous replication, and hot standby.
</t>
<keywords>rdbms, database, sql, mvcc, acid</keywords>
<website>https://www.postgresql.org</website>
<license name="The PostgreSQL License" holder="PostgreSQL Global Development Group"
url="https://www.postgresql.org/about/licence"
commercialUse="true" type="PERMISSIVE"/>
<metrics>cpu, mem, net, data, rps, iops</metrics>
<variant id="main" server="main">
<requirements>
<cpu cores="2" _base="enterprise:intel-xeon-e5-2697:1.0"/>
<mem capacity="512MiB"/>
<disk capacity="1GiB" iops="150"/>
<net bandwidth="10Mbs"/>
</requirements>
<module id="table" type="table"/>
</variant>
</tekSoftwareService>san
And as the last service, we will add storage for DBMS backups to the same system:
<service id="san" name="Storage Area Network" env="global"
_base="san:generic:1.0">
<c:module id="backups" type="disk" name="SAN">
<c:storage/>
</c:module>
</service>An abstract SAN service with component san:generic:1.0 is used. Data storage is also enabled via <c:storage/>.
Component san:generic:1.0
<?xml version="1.0" encoding="UTF-8" ?>
<tekSoftwareService model="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.tekblueprint.org/xml/core"
xsi:schemaLocation="http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
group="san" artifact="generic" version="1.0">
<name>PanelStorage Area Network</name>
<t>
This service provides a robust and scalable PanelStorage Area Network (SAN) solution for high-performance data
storage and retrieval.
</t>
<keywords>san, storage, disk, persistence</keywords>
<license name="tekBlueprint License" holder="tekBlueprint"
url="https://www.tekblueprint.org/about/licence"
commercialUse="true" type="COPYLEFT"/>
<metrics>cpu, mem, net, data, rps, iops</metrics>
<variant id="main" server="main">
<module id="disk" type="disk"/>
</variant>
</tekSoftwareService>Deployments
After describing the services, you need to specify which servers they will be deployed on. This is done using the <deployments> block:
<deployments>
<deploy service="app:msvc_orders" to="main"/>
<deploy service="app:db" to="main"/>
<deploy service="app:san" to="main"/>
</deployments>Each <deploy> element links a service to a server. The service reference format is: system_id:service_id. In our case, all three services are deployed on the single main server.
Simulation parameters
After the basic parameters of environments, systems and services have been described, it is necessary to add parameters for simulating the load on them.
The first thing to do is to determine the period of time for which the system load will be simulated. This is done using
the <timeline> block.
<timeline each="hour" duration="1" unit="year"/>Here we say that we need to calculate metrics for a year with a step of one hour.
Next, we need to determine the load on each service. This is done using the <streams> block, inside which the
parameters for each service are described. Let’s add one request stream from some external system to the restapi module of the msvc_orders
service with the following parameters:
- Request frequency – 10 per second.
- Request size is 1 kilobyte, the size of the response to the request is 128 bytes
- Request processing time on the CPU – 100 ms, the time to send the response – 10 ms
- RAM usage when processing a request – 16 kilobytes.
- Waiting time for a response from the
msvc_ordersservice – 5 seconds.
Next, this request is passed to the msvc_orders module of the database app:db, which we described earlier with the following parameters:
- Request size 512 bytes, response size 128 bytes
- Data must be saved in the service (previously we specified the
<c:storage/>block in the database module).
Note that stream addressing now uses the system:service:module format.
<streams>
<stream id="s1" to="app:msvc_orders:restapi" name="external requests">
<data in="1KiB" out="128b"/>
<cpu in="100ms" out="10ms"/>
<mem in="16KiB"/>
<latency time="5 sec"/>
<!-- nested stream to database -->
<streams>
<stream id="s2" to="app:db:msvc_orders">
<data in="512b" out="128b" persist="true"/>
</stream>
</streams>
<rate qty="10" per="second"/>
</stream>
</streams>Backups
The last step is to add simulations of creating backup copies of data on the san service, which were accumulated in
the db service.
A separate <backups> block at the top level of the blueprint is used for this. Let’s add it with the following parameters:
- Run every 2nd day of the month.
- Data transfer rate is 32 MB/s.
- Use 1 processor core to read data from the service and write data to the storage.
- Use 16 KB of RAM to read data from the service.
<backups>
<backup id="b1" name="Periodic backup of orders database"
from="app:db:msvc_orders" to="app:san:backups">
<!--
* * * * *
| | | | |____ day of week (0—6)
| | | |______ month (0—11)
| | |________ day of month (0—30)
| |__________ hour (0—23)
|____________ minute (0—59)
-->
<schedule cron="? ? 2 ? ?"/>
<throughput size="32 MiB" per="second"/>
<cpu in="1" out="1"/>
<mem in="16KiB"/>
<overhead>
<data in="1KiB" out="128b"/>
</overhead>
</backup>
</backups>Documents and Reports
The blueprint can describe documents that will be generated as a result of the calculation. This is done using the <documents> block:
<documents>
<c:bundle name="Infrastructure">
<c:document name="Infrastructure Sizing v{{doc.self.lastVersion}}"
template="infra:sizing:0.1" format="ASCIIDOC"
author="John Doe" status="draft" priority="high"/>
</c:bundle>
</documents>The template infra:sizing:0.1 defines the report structure, and the format ASCIIDOC specifies the output document format.
Result and start of calculation
As a result, we will receive the following XML file with the description of the system:
Final blueprint
<?xml version="1.0" encoding="UTF-8" ?>
<tekInfraBlueprint model="0.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.tekblueprint.org/xml/infra http://www.tekblueprint.org/xml/infra-0.6.xsd
http://www.tekblueprint.org/xml/core http://www.tekblueprint.org/xml/core-0.7.xsd"
xmlns="http://www.tekblueprint.org/xml/infra" xmlns:c="http://www.tekblueprint.org/xml/core">
<c:name>ACME Systems</c:name>
<!-- Define environments -->
<environments>
<environment id="global" name="Global Environment"/>
<environment id="prod" name="Production Environment"/>
</environments>
<servers>
<server id="main" x="2" name="main server" _base="enterprise:hp-dl360:1.0"/>
</servers>
<deployments>
<deploy service="app:msvc_orders" to="main"/>
<deploy service="app:db" to="main"/>
<deploy service="app:san" to="main"/>
</deployments>
<systems>
<system id="app" name="Application System">
<services>
<!-- orders microservice system configuration -->
<service id="msvc_orders" name="Orders Microservice" env="prod" replicas="2"
_base="microservice:java-integration:1.0">
<c:requirements>
<c:cpu cores="0.25" freq="3Ghz"/>
<c:mem capacity="512MiB"/>
<c:disk capacity="256MiB" iops="10"/>
<c:net bandwidthRx="10Mbit/s" bandwidthTx="10Mbit/s"/>
</c:requirements>
<c:module id="restapi" type="http" name="RESTful API">
<!-- <balancer disabled="true"/> -->
</c:module>
</service>
<!-- database system configuration -->
<service id="db" name="Database" env="global" replicas="2" _base="rdbms:postgresql:17">
<c:requirements>
<c:cpu cores=".25" freq="3Ghz"/>
<c:mem capacity="256MiB"/>
<c:disk capacity="1GiB" iops="1K"/>
<c:net bandwidthTx="10Mbits" bandwidthRx="10Mbits"/>
</c:requirements>
<c:module id="msvc_orders" type="table" name="Orders Database">
<c:storage/>
<c:replicate type="master-slave">
<c:overhead>
<c:data in="512b" out="256b"/>
</c:overhead>
</c:replicate>
</c:module>
</service>
<!-- storage system configuration -->
<service id="san" name="Storage Area Network" env="global"
_base="san:generic:1.0">
<c:module id="backups" type="disk" name="SAN">
<c:storage/>
</c:module>
</service>
</services>
</system>
</systems>
<!-- timeline configuration for forecasting -->
<timeline each="hour" duration="1" unit="year"/>
<!-- stream configurations for external requests to Orders Microservice -->
<streams>
<stream id="s1" to="app:msvc_orders:restapi" name="external requests">
<data in="1KiB" out="128b"/>
<cpu in="100ms" out="10ms"/>
<mem in="16KiB"/>
<latency time="5 sec"/>
<!-- nested stream to database -->
<streams>
<stream id="s2" to="app:db:msvc_orders">
<data in="512b" out="128b" persist="true"/>
</stream>
</streams>
<rate qty="10" per="second"/>
</stream>
</streams>
<backups>
<backup id="b1" name="Periodic backup of orders database"
from="app:db:msvc_orders" to="app:san:backups">
<!--
* * * * *
| | | | |____ day of week (0—6)
| | | |______ month (0—11)
| | |________ day of month (0—30)
| |__________ hour (0—23)
|____________ minute (0—59)
-->
<schedule cron="? ? 2 ? ?"/>
<throughput size="32 MiB" per="second"/>
<cpu in="1" out="1"/>
<mem in="16KiB"/>
<overhead>
<data in="1KiB" out="128b"/>
</overhead>
</backup>
</backups>
<documents>
<c:bundle name="Infrastructure">
<c:document name="Infrastructure Sizing v{{doc.self.lastVersion}}"
template="infra:sizing:0.1" format="ASCIIDOC"
author="John Doe" status="draft" priority="high"
startDate="2025-04-01T08:00:00+04:00"
dueDate="2025-04-04T18:00:00+04:00"
finishDate="2025-04-09T18:00:00+04:00">
<c:versions>
<c:version number="1.0" author="John Doe" approvedBy="Ella Doe" date="2025-04-01T08:00:00+04:00">
Initial draft.
</c:version>
</c:versions>
</c:document>
</c:bundle>
</documents>
</tekInfraBlueprint>Next we start the calculation
./tekBlueprint.infra -w workbench software solve blueprint-simple.en.xml
...
INFO 00:17:07.884 | --- FORECAST SOFTWARE USAGE ---
INFO 00:17:08.011 | 8760 probes, each HOUR during 1 YEAR
INFO 00:17:08.013 | prepare (127 ms)
INFO 00:17:08.226 | progress: 100.00% 8759 / 8760
INFO 00:17:08.226 | forecasting (213 ms)
INFO 00:17:08.229 | merge (2 ms)The metrics will be added to the original blueprint and it will be written to the file
workbench/reports/blueprint-simple-system/blueprint.xml. This file can be opened in the editor and you can see the
added metrics for services, network connections, backups, etc.
Now you can add the calculation for servers by running the following command:
./tekBlueprint.infra -w workbench hardware solve blueprint-simple.en.xml
...
INFO 00:17:38.369 | --- SOLVING HARDWARE ---
INFO 00:17:38.462 | prepare (91 ms)
INFO 00:17:38.464 | assign (1 ms)
INFO 00:17:38.466 | merge (1 ms)ℹ️ Warning
The
hardware solvecommand uses not the original blueprint file for calculations, but the result of thesoftware solvecommand, which contains the necessary metrics.
Reports
Reports are built based on the final blueprint with collected metrics.
ℹ️ Note
Since the blueprint is a regular XML, it is not necessary to use built-in reports. You can write your own generator, for example using XLST transformation.
Let’s generate all available reports (AsciiDoc, deployment scheme, console output) by running the command:
./tekBlueprint.infra -w workbench report blueprint-simple.en.xml
...
INFO 14:32:49.725 | --- GENERATE REPORTS ---
INFO 14:32:51.384 | RENDER : 1429ms (threads 16)
INFO 14:32:51.387 | --- DOCUMENTS ---
INFO 14:32:51.427 |
┌─────────────────────────────────────┬──────────┬─────────┬──────────┬───────────────────┬─────────────────┬───────────────────┬─────────────────┬────────┐
│ Document │ Author │ Version │ Priority │ Status │ Start │ Due │ Finish │ Time │
├─────────────────────────────────────┴──────────┴─────────┴──────────┴───────────────────┼─────────────────┼───────────────────┼─────────────────┼────────┤
│ 1. Infrastructure │ 2025-04-01+0400 │ ⚠ 2025-05-04+0400 │ 2025-05-09+0400 │ - │
├─────────────────────────────────────┬──────────┬─────────┬──────────┬───────────────────┼─────────────────┼───────────────────┼─────────────────┼────────┤
│ :: Infrastructure Sizing v1.0.adoc │ John Doe │ 1.0 │ HIGH │ DRAFT │ 2025-04-01+0400 │ 2025-04-04+0400 │ 2025-04-09+0400 │ 504ms │
├─────────────────────────────────────┼──────────┼─────────┼──────────┼───────────────────┼─────────────────┼───────────────────┼─────────────────┼────────┤
│ :: Infrastructure Sizing v1.0.md │ John Doe │ 1.0 │ HIGH │ DRAFT │ 2025-05-01+0400 │ 2025-05-04+0400 │ 2025-05-09+0400 │ 1423ms │
└─────────────────────────────────────┴──────────┴─────────┴──────────┴───────────────────┴─────────────────┴───────────────────┴─────────────────┴────────┘
document: 1555ms
console: 5ms
INFO 14:32:51.433 | # - size of incoming or outgoing data
INFO 14:32:51.433 | ↓ - incoming
INFO 14:32:51.433 | ↑ - outgoing
INFO 14:32:51.433 | ∑ - sum of incoming and outgoing
INFO 14:32:51.433 |
INFO 14:32:51.433 | TIMELINE: 1 YEAR each HOUR
--- SERVERS ---
ID | NAME | vCPU | MEM | NET-RX | NET-TX | RPS | IOPS | STORE
------ | ----------- | ---- | ---------- | ------------ | ----------- | ----- | ----- | ----------
main | main server | 0.82 | 769.18 MiB | 264.40 Mbits | 1.82 Mbits | 15.00 | 9.04K | 984.66 GiB
main@1 | main server | 0.11 | 400 KiB | 128.00 Kbits | 56.32 Kbits | 15 | 4.84 | 300.75 GiB
--- SERVICES ---
ID | NAME | TYPE | SERVER | # ↓ | # ↑ | # ∑ ↓ | # ∑ ↑ | ↓ ∑ REQ | ↑ ∑ REQ | vCPU | MEM | NET-RX | NET-TX | RPS | IOPS | STORE
---------------------------- | -------------------- | -------- | ------ | ---------- | ---------- | ---------- | ---------- | ------- | ------- | ---- | ------- | ------------ | ------------ | --- | ----- | ----------
* | - | EXTERNAL | - | - | - | - | - | - | - | - | - | - | - | - | - | -
: *:* | | PRIMARY | | 4.39 MiB | 35.15 MiB | 37.59 GiB | 300.75 GiB | - | - | | | 10.24 Kbits | 81.92 Kbits | | |
:: *:*:* | | * | | 4.39 MiB | 35.15 MiB | 37.59 GiB | 300.75 GiB | - | - | | | 10.24 Kbits | 81.92 Kbits | | |
app | - | INTERNAL | - | - | - | - | - | - | - | - | - | - | - | - | - | -
: app:db | Database | PRIMARY | main | 30.76 MiB | 112.53 GiB | 263.15 GiB | 1.14 TiB | 315.36M | - | 0.20 | 800 KiB | 71.68 Kbits | 542.56 Kbits | 10 | 1.56 | 150.37 GiB
:: app:db:msvc_orders | Orders Database | table | | 30.76 MiB | 39.55 MiB | 263.15 GiB | 1.14 TiB | 315.36M | - | 0.20 | 800 KiB | 71.68 Kbits | 542.56 Kbits | 10 | 1.56 | 150.37 GiB
: app:db@1 | - | REPLICA | main@1 | 35.15 MiB | 13.18 MiB | 300.75 GiB | 112.78 GiB | 315.36M | - | | | 81.92 Kbits | 30.72 Kbits | 10 | 3.43 | 300.75 GiB
:: app:db@1:msvc_orders | - | table | | 35.15 MiB | 13.18 MiB | 300.75 GiB | 112.78 GiB | 315.36M | - | | | 81.92 Kbits | 30.72 Kbits | 10 | 3.43 | 300.75 GiB
: app:msvc_orders | Orders Microservice | PRIMARY | main | 19.77 MiB | 10.98 MiB | 169.17 GiB | 93.98 GiB | 157.68M | - | 0.11 | 400 KiB | 46.08 Kbits | 25.60 Kbits | 5 | 1.40 |
:: app:msvc_orders:restapi | RESTful API | http | | 19.77 MiB | 10.98 MiB | 169.17 GiB | 93.98 GiB | 157.68M | - | 0.11 | 400 KiB | 46.08 Kbits | 25.60 Kbits | 5 | 1.40 |
: app:msvc_orders@1 | - | REPLICA | main@1 | 19.77 MiB | 10.98 MiB | 169.17 GiB | 93.98 GiB | 157.68M | - | 0.11 | 400 KiB | 46.08 Kbits | 25.60 Kbits | 5 | 1.40 |
:: app:msvc_orders@1:restapi | - | http | | 19.77 MiB | 10.98 MiB | 169.17 GiB | 93.98 GiB | 157.68M | - | 0.11 | 400 KiB | 46.08 Kbits | 25.60 Kbits | 5 | 1.40 |
: app:san | Storage Area Network | PRIMARY | main | 112.50 GiB | - | 833.03 GiB | - | 15 | - | 0.01 | 16 KiB | 263.03 Mbits | | .00 | 8.02K | 833.03 GiB
:: app:san:backups | SAN | disk | | 112.50 GiB | - | 833.03 GiB | - | 15 | - | 0.01 | 16 KiB | 263.03 Mbits | | .00 | 8.02K | 833.03 GiB
--- STREAMS ---
STREAM | TYPE | NAME | REQUESTS | # ↓ | # ↑
------------------------------- | --------- | ----------------- | -------- | ---------- | ---------
*:*:* → app:msvc_orders:restapi | GENERATOR | external requests | 315.36M | 300.75 GiB | 37.59 GiB
: app:db:msvc_orders | REDIRECT | | 315.36M | 150.37 GiB | 37.59 GiB
--- BACKUPS ---
BACKUP | SUCCESS | START | FINISH | #
------------------------------------ | ------- | ----------------- | ----------------- | ----------
app:db:msvc_orders → app:san:backups | | | |
Periodic backup of orders database | | | |
| ✓ | 02.00.00 00:00:00 | 02.00.00 00:00:00 | 843.75 MiB
| ✓ | 02.01.00 00:00:00 | 02.01.00 00:00:00 | 13.59 GiB
| ✓ | 02.02.00 00:00:00 | 02.02.00 00:00:00 | 25.13 GiB
| ✓ | 02.03.00 00:00:00 | 02.03.00 00:00:00 | 37.90 GiB
| ✓ | 02.04.00 00:00:00 | 02.04.00 00:00:00 | 50.26 GiB
| ✓ | 02.05.00 00:00:00 | 02.05.00 00:00:00 | 63.03 GiB
| ✓ | 02.06.00 00:00:00 | 02.06.00 00:00:00 | 75.39 GiB
| ✓ | 02.07.00 00:00:00 | 02.07.00 00:00:00 | 88.16 GiB
| ✓ | 02.08.00 00:00:00 | 02.08.00 00:00:00 | 100.93 GiB
| ✓ | 02.09.00 00:00:00 | 02.09.00 01:00:00 | 113.29 GiB
| ✓ | 02.10.00 00:00:00 | 02.10.00 01:00:00 | 126.06 GiB
| ✓ | 02.11.00 00:00:00 | 02.11.00 01:00:00 | 138.42 GiB
--- CONNECTIONS ---
CONNECTION | TYPE | # ↓ | # ↑ | REQ | 🖧 ↓ | 🖧 ↑ | ∑ 🖧
---------------------------------------------- | -------- | ---------- | ---------- | ------- | --------------------------- | ----------- | ------------
*:*:* → app:msvc_orders:restapi | PRIMARY | 150.37 GiB | 18.79 GiB | 157.68M | 40.96 Kbits | 5.12 Kbits | 46.08 Kbits
*:*:* → app:msvc_orders@1:restapi | BALANCER | 150.37 GiB | 18.79 GiB | 157.68M | 40.96 Kbits | 5.12 Kbits | 46.08 Kbits
app:db:msvc_orders → app:db@1:msvc_orders | REPLICA | 300.75 GiB | 112.78 GiB | 315.36M | 81.92 Kbits | 30.72 Kbits | 112.64 Kbits
app:db:msvc_orders → app:san:backups | BACKUP | 833.03 GiB | - | 15 | 218.16 Mbits - 268.44 Mbits | - | 268.44 Mbits
app:msvc_orders:restapi → app:db:msvc_orders | PRIMARY | 75.18 GiB | 18.79 GiB | 157.68M | 20.48 Kbits | 5.12 Kbits | 25.60 Kbits
app:msvc_orders@1:restapi → app:db:msvc_orders | PRIMARY | 75.18 GiB | 18.79 GiB | 157.68M | 20.48 Kbits | 5.12 Kbits | 25.60 Kbits The report shows metrics for each service and network connections between them.
You can also see that by the end of the year, backups took about an hour at a speed of 32 MB/s.
The rest of the reports can be found in the workbench/reports/blueprint-simple-system directory.
An example of the final AsciiDoc document as a PDF – infrastructure_sizing.adoc
An example of a deployment diagram, which is also built on the basis of the final XML with metrics