Sizing calculation using a simple system as an example (CLI)

updated on: May 28, 2026  published: ⏰ 17

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
<?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:

XML
<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:

XML
<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
<?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:

XML
<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
<?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:

XML
<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
<?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:

XML
<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
<?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:

XML
<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.

XML
<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_orders service – 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.

XML
<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.
XML
<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:

XML
<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
<?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

Shell
./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:

Shell
./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 solve command uses not the original blueprint file for calculations, but the result of the software solve command, 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:

Shell
./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

Infra Forecast Planning Design Tutorial Tb-Infra