Inside The Rocketship
Inside UiPath Apps: The Engineering Team Shares Their Favorite Architecture Components
We strive to become the one-stop shop for all your automation needs—be it putting together a simple workflow using UiPath Studio, building a custom ML based automation using AI Center, or managing your test automation through UiPath Test Manager.
In 2019, our automation community shared that they needed a new way to build sleek user interfaces on top of their automations. We consistently hear from developers wanting an easier way for their end users to engage with automations. We wanted to improve common interactions, such as accepting automation workflow inputs, adding items to queues for automated processing, and pushing new records to UiPath Data Service.
We built UiPath Apps to help our customers create UIs faster using a simple drag and drop interface. It is now available to all of our customers on the UiPath Automation Cloud and UiPath Automation Suite platforms.
Let's take a look at the architecture of UiPath Apps and how it helps create delightful automation experiences for your business users.
Routing Infrastructure, which helps route a request from the client to one of the services of UiPath Apps.
• Server, a node.js service which exposes REST endpoints for the App Studio and Apps Runtime to consume. It exposes APIs for storage and retrieval of app data and interaction with other UiPath services.
• Web Socket Server, a node.js service which accepts socket connections from clients for, to and from communication between the different clients and also between the Server and the clients.
Azure Managed Resources
• Application Insights is the core logging and telemetry sink for UiPath Apps. All services write their logs and telemetry to Azure application insights.
• Azure Blob is used for storing static multimedia (images) that users upload to their apps as part of design.
• Azure Managed Redis is used by Server for caching certain information related to apps for improving performance of certain critical flows.
• Mongo DB, used by UiPath Apps as its main storage component for app data.
• Launch Darkly is used for feature rollout and A/B testing management within UiPath Apps.
UiPath First Party Services
UiPath Apps platform talks to bunch of our first party services hosted within UiPath ecosystem to manage our users and our accounts/tenants.
UiPath has a common routing infrastructure that's used for all of its cloud services. Major components include:
• Cloudflare, which serves as the DNS for client-initiated requests.
• Azure APIM, which is a gateway, and Cloudflare sends the requests to this resource. We have region-specific APIM and Cloudflare will forward the request to the nearest APIM. This isn't UiPath Apps specific resource and all the incoming requests to our cloud portal will be handled by these platform level API gateways. After receiving each request, it'll go through its configuration and will forward the request to a product-specific traffic manager cluster.
• Azure traffic managers will receive the request from APIM and will load balance the incoming traffic between our primary and secondary clusters. This will further forward the request to Nginx.
• Nginx router, which is an internal router each cloud service cluster has. This forwards a request sent by the Azure traffic manager to the correct service within the cluster. API requests will be routed to our server cluster, UiPath Apps Studio/Designer client-specific requests will be routed to our designer cluster, and Runtime client-specific requests will be routed to our runtime cluster.
App Studio is one of the main components of UiPath Apps where users can create, design, deploy, and share their apps. It's backed by the Designer angular application. Navigating to UiPath Apps from the Left Navigation bar, lands the user on the home page. From there a user can create a new app or open an existing app, both of which launch the App Studio for that app. The Designer application exposes:
functionalities to add pages, integrations like processes, controls, entities, etc. to your app (via REST API calls to the Server),
a variety of controls and rules that a user can add to his app,
capability to communicate with the local robot and with other UiPath services directly.
This is the main backend component for UiPath Apps, used by both Designer and Apps Runtime. It is a node application housing an express cluster, which exposes REST endpoints for:
creation and storage of apps (which involves storage of app definitions, pages in the app, controls added to all pages, rules etc., in MongoDB),
interacting with other components like Azure blob storage and other UiPath services like UiPath Orchestrator,
supporting the rest of the functionalities like deploying, sharing applications with other users, and many more.
WebSocket Server Application
This is also a node application, which has a WebSocket server listening to client connections. Whenever a client opens the App Studio for an app, a socket connection is established with the socket server (with a particular process). Certain information that needs to be shared among different clients for the same app is then done via web sockets. Also, a socket connection is established when a UiPath process starts in unattended mode from an app's runtime. The Web Socket Server sends the result of the job back to the client.
• MongoDB is our main store where all app data for users is persisted. We use a multitenant database, where all user data is logically separated by the tenant id. UiPath Apps use managed MongoDB provided by Atlas. Each MongoDB instance (deployment) is a three-node replica set. The data that's stored as mongo documents includes app definitions, page definitions (with control and rule definitions) and metadata of static multimedia content.
• Launch Darkly is our A/B testing provider. We use it to roll out new features to customers in a gradual manner, and to switch off/on features for customers selectively.
• Application Insights: UiPath Apps uses application insights provided by Azure for logging and telemetry. All four components push their logs, telemetry, and metrics data to application insights.
• Redis: we use managed cache provided by Azure to cache certain data to reduce latency of critical user operations. This cache is used by the Apps Server component. In some overly critical flows, where latency is of concern, the Apps Server communicates with the cache to speed things up. It does fall back to DB if and when required. This also helps us reduce the load on mongo instances for reads.
• Blob Store: Azure blob storage is used for storing static files (images) that users upload to their apps. UiPath Apps stores the image metadata in MongoDB and the actual content of the images is stored as a blob in Azure storage. The blobs are hierarchically stored per customer and per application.
• CDN: client-specific static resources like fonts, icons, etc., are stored in Azure CDN. This helps to improve load time for the client as the resources are fetched from the nearest CDN and used for rendering.
• Identity Service is the root service of the UiPath Cloud platform, which makes on boarding of new services possible; it also is the source of truth for user management. UiPath Apps is registered as a first party client with Identity Service like multiple other cloud services of UiPath, which makes apps accessible on the portal home page. UiPath Apps also relies on identity for access token grants for a user, and then this token is used by Apps to communicate with certain other services. UiPath Apps doesn't do any user management on its own. Users are added/removed to a cloud organization via Identity and Apps relies on Identity for the latest state.
• Directory And Tenant Services: A UiPath Cloud account can have multiple tenants. UiPath Apps is an account-level service; but there are certain services that are configured per tenant too. For UiPath Apps to be able to communicate with these services, we need to know the available list of tenants in the account. UiPath Apps fetches this information from directory and tenant services.
UiPath Apps enables customers to create stunning UIs quickly and easily using a drag-and-drop interface, and it is now available on both UiPath Automation Cloud and UiPath Automation Suite platforms.
Our team contributing to the UiPath Apps has made a significant contribution to our world of automation. They listened to the needs of the community and developed a solution that makes it easier for end-users to engage with automations. If you are interested in joining them, be sure to check our career website for available roles.