Architectural Overview - VF Server running via Docker
High-Level Overview
The vFunction Server running via Docker includes the following:
- 12 Docker Containers running on a Linux VM
- Three Docker Volumes for MySQL, Monolithic Measurements and Distributed Measurements Storage
- One Docker Network for managing communication between the Docker Containers
- One external Port open (80, 443, other) to listen for browser requests from end users and analysis information from the application(s)
Architectural Diagram
The vFunction Server includes the following Docker Containers:
- vfunction-fluentd
- vfunction-monit
- vfunction-mysql
- vfunction-nginx
- vfunction-vfapi-dm
- vfunction-vfapi-idp
- vfunction-vfapi-mcp
- vfunction-vfapi-measurements
- vfunction-vfapi-organizations
- vfunction-vfapi-parser
- vfunction-vfapi-otlp
- vfunction-vfapi-users
The vFunction Server includes the following Docker Volumes:
- mysql_vol
- vfapi_dm_storage_vol
- vfapi_measurements_storage_vol
The vFunction Server includes the following Docker Networks:
- vfunction
Deployment Details
The vFunction Server includes the following Containers. The table below includes Memory and CPU Limits. While the Cluster-based deployment does explicitly include Limits to the resources, the Host-based deployment does not. In a Host-based deployment, vFunction prefers to allow the peaks to balance out as we have seen that being dynamic provides the most environmental stability. The Memory and CPU Limits documented below represent what an organization can expect when analyzing a very large application:
| vfunction-fluentd | 9880, 24224 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-monit | 2812 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-mysql | 3306 | Not Applicable | 4GB | 1 CPU | mysql_vol |
| vfunction-nginx | 8080 or 8443 | 80, 443 or a Custom Port | 1GB | 1 CPU | Not Applicable |
| vfunction-vfapi-dm | 8007 | Not Applicable | 8GB. Note that this Limit is only relevant for Distributed Applications. Monolithic Applications do not use this Container. | 1 CPU | vfapi_dm_storage_vol |
| vfunction-vfapi-idp | 8005 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-vfapi-mcp | 8008 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-vfapi-measurements | 8003 | Not Applicable | 16GB. Note that this Limit is only relevant for Monolithic Applications. Distributed Applications do not use this Container. | 1 CPU | vfapi_measurements_storage_vol |
| vfunction-vfapi-organizations | 8001 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-vfapi-otlp | 4318 | Not Applicable | 8GB. Note that this Limit is only relevant for Distributed Applications. Monolithic Applications do not use this Container. | 1 CPU | Not Applicable |
| vfunction-vfapi-parser | 8002 | Not Applicable | 1GB | 1 CPU | Not Applicable |
| vfunction-vfapi-users | 8004 | Not Applicable | 1GB | 1 CPU | Not Applicable |
Traffic Legend
External over open Port
End Users to Server
End Users access the Server via a Browser. Standard REST APIs are used to retrieve and update organization, application and measurement information and structure.
Agents to Server
The Agents send standard REST APIs to stop and start Learning and to upload Application details to the vFunction Server for analysis.
Internal over vFunction Docker Network
Nginx to API Containers
The Nginx Container forwards APIs from the browser or from Agents to the relevant services over Ports 8001, 8003, 8004, 8005, 8006, 8007 and 8008.
API Containers to MySQL Container
The API Containers send request to store and process all processed information.
Organizations API Container to SQL Parser Container
The Organizations API Container sends request to the SQL Parser Container to parse queries retrieved from .NET agents.
Measurements API Container to Measurements Volume
The Measurements API Container sends requests to store and retrieve raw data to the Measurements Volume.
Distributed Measurements API Container to Distributed Measurements Volume
The Distributed Measurements API Container sends requests to store and retrieve raw data to the Distributed Measurements Volume.
Information gathered by vFunction from the Application
The vFunction Monolithic Agent gathers information about the Application and sends that information to the vFunction Server for analysis. That information contains statistical and structural data based on the Application’s behavior, including:
- Callstacks
- Field, method and class names
- External HTTP Connection data (IP Addresses, Hostnames)
- File names
- DB Query Metadata (Tables and Stored Procedures)
Container Restarts
10 of the 12 vFunction Containers are configured with the setting restart=no. The vFunction Containers require a specific startup order. The restart of these 10 Containers is managed by the vfunction-monit Container to preserve the required startup order. The vfunction-monit and vfunction-fluentd Containers are the only two set with restart=unless-stopped.
Backups
During the vFunction Server Installation and Upgrade process, backups are written to /etc/sysconfig/vfunction/installation/backup. This Backup location stores the Configurable Settings for the environment. During the Upgrade process, the default locations used for Configurable Settings are overwritten by the new Upgrade package. The Upgrade process restores the Configurable Settings from this Backup location to ensure that there is no risk of lost information.