Skip to main content

Architecture

OutSystems

OutSystems Platform Server architecture

OutSystems Platform Server is the core of OutSystems Platform. It is a server component that complements an organization's standard web application server stack with a set of services.

OutSystems Platform doesn't use a proprietary runtime engine. All applications rely on standard .NET and Java. OutSystems Platform Server is what makes this possible. It takes care of all the steps required to generate, optimize, compile, and deploy applications into a standard web application server and has a set of specialized services under the hood:

  • Code generator: This takes the application modeled in the IDE and generates native .NET or Java, enabling the generation of secure applications that are optimized for performance and that run on top of standard technologies.

  • Deployment services: These deploy the generated .NET or Java application to a standard web application server, ensuring that your application is consistently installed on each front-end of your server farm.

  • Application services: These manage the execution of schedules batch jobs, and provide asynchronous logging services to store events like errors, audits and performance metrics.

Code generator

This compiler takes the application model that was developed in the IDE and generates a native .NET or Java application that is ready to be deployed to an application server.

When the code generator gets the application model, it:

  • Runs a deep graph analysis on the application model. This graph is used to check for external dependencies and apply optimizations to the application.

  • Checks for optimizations that can be performed when generating the code. For example, if an application has a query to fetch data from the database, but the result of the query is never used in application, the optimizer flags the query to be removed.

  • Generates integration proxies to isolate an application from changes made to external services.

  • Generates native code for all the layers in the application stack: SQL, C#, Java, HTML5, CSS, and JavaScript.

  • Bundles session management, authentication and configurations to the application.

  • Adds logging and monitoring capabilities to the application, so that developers can check for errors, audits and performance metrics at runtime.

  • Generates the build scripts to upgrade the database model and to deploy the application.

Deployment services

The deployment services deploy the generated .NET or Java application to an application server and ensure the application is consistently installed on each front-end server of an organization's server farm.

There are two different deployment components. The deployment service deploys a .NET or Java application on a specific front-end server. The deployment controller coordinates the deployment across all front-end servers as follows:

  • The deployment controller uses the code generator to compile the application model to .NET or Java.

  • Once the application is compiled, it sends the code to the deployment service on each front-end server. The deployment controller then monitors the deployment, to ensure the application was successfully installed.

  • If all deployments are successful, the deployment controller updates the runtime database to match the data models that were created. If not, the deployment is canceled, and the old application version continues running without changes.

Application services

OutSystems Platform Server also has services for managing the applications at runtime. There are two different services for this:

  • Scheduler service: This service manages the execution of scheduled tasks.

  • Log service: This service manages the error, audit and performance events of the applications.

Scheduler service

OutSystems Platform Server supports the execution of scheduled batch jobs in applications. At runtime, the scheduling service retrieves the next pending job from the metadata database, and executes it.

Batch tasks are designed for horizontal scalability so they are distributed by all the front-end servers.

Log service

Applications are automatically instrumented to create error, audit and performance logs. At runtime, these metrics are captured asynchronously, so that the performance of  applications is not compromised while they create a constant stream of metrics.

The log service runs at lower priority, so that it doesn't compete with the normal processing of applications. At runtime, when an application generates an error, audit, or performance event:

  • The event is written to a standard message queue on the front-end server.

  • The log service running on the front-end server asynchronously retrieves the events from the message queue and adds them to the logs database.

  • The events can then be leveraged by the monitoring consoles to display errors, audits, or performance data. They can also be sent to external systems by using available APIs.