Architecture overview
- 3 minutes to read
Customer's Canvas is not a monolithic application. It consists of several components, each of them having different prerequisites. You may have different setups - when you deploy everything on the same machine or build a distributed solution. To properly plan the infrastructure, it is important to understand the Customer's Canvas architecture.
The diagram below illustrates all components, and what third-party software (databases) are used.
SQLServer)]:::db AssetStorage --> mongo[(Metadata
MongoDB)]:::db AssetStorage --> files[(Files
Azure/MongoDB)]:::db AssetStorage --> rabbitmq[Message Queue
RabbitMQ/Azure Service Bus]:::db
Note
Legend:
- Gray - back-end services
- Blue - front-end editor
- Green - admin application
- Orange - third-party components (database, message queue)
Now, let's take a brief overview of each of the Customer's Canvas components.
Storage
As you can see from the diagram above, the Asset Storage service is the heart of the system. It is used to store all assets used by the editor - designs, fonts, images, etc.
Third-party dependencies
The main dependency of Asset Storage is a database (or even two, see further).
The data is divided into two big categories - files and metadata. To store files, you have two options - use the MongoDB database or Azure Blob Storage. To store metadata, there is only one option - MongoDB.
So you essentially must install MongoDB (or get a cluster in MongoDB Atlas) in some way. If you expect to have a manageable amount of files, you may configure the system to store both files and metadata together in the same MongoDB cluster. However, if you feel that you may have to keep several terabytes of data, you may want to store large files in Azure Blob Storage and only use MongoDB for the smaller metadata.
In addition to the database, Asset Storage also uses another third-party component - message queue, which is necessary to notify the services, for example, when you add or delete fonts or other data.
Platform
The storage service requires .NET Core 3.1 to run. It can be hosted on both Windows and Linux machines.
Processor / Design Atoms API
These two services do all of the image processing work. The processor service is used relatively seldom, but for heavy tasks like parsing InDesign/PSD files or creating previews while the Design Atoms API service is used by the editor for a lot of frequent but typically lightweight image processing operations.
Third-party dependencies
Neither of these services require any database. You may need to install Microsoft Visual C++ Redistributable Package x64 (latest supported).
Platform
Both of these services require Windows and they should run as x64 bit processes.
BackOffice
This application is an admin control panel for Customer's Canvas. It allows you to manage designs/fonts/images, which are stored in Asset Storage, and works with the user's projects as well as configurations. Another important role of this service is as an identity provider for the system. All of the authorization happens here.
Third-party dependencies
BackOffice has its own data and it stores it in the SQL Server database. The amount of data stored by BackOffice is relatively small, so you may consider using SQL Server Express. However, whenever possible, it is recommended to use SQL Server Standard or higher.
Platform
The BackOffice application requires .NET Core 3.1 to run. It can be hosted on both Windows and Linux machines.
Design Editor
Design Editor is an editor application that is used on a storefront by the end-users. You may refer to the Design Editor documentation for more details.
Third-party dependencies
If you install it on a single machine, no special dependencies are required other than Microsoft Visual C++ Redistributable Package x64 (latest supported). For the load-balanced environment, you may need to use its own SQL Server instance (Express is enough).
Platform
Design Editor requires Windows.
Now that you have some idea of Customer's Canvas architecture, the Deployment considerations article will help you to plan your infrastructure.