Architectural Overview

This tutorial provides a general overview of how a Finsemble application is composed.

As a starting point, consider four Finsemble windows on a monitor: a stock-chart and three chat windows. For this example, these four windows make up a Finsemble application.

Finsemble up and running

A corresponding representation of these windows is shown below: a set of HTML5 windows connected through underlying microservices. By connecting and coordinating with Finsemble microservices, the windows form a Finsemble application.

High level Finsemble architecture


The Finsemble Library and microservices

A microservice in Finsemble is an independently-threaded JavaScript module providing centralized functionality throughout a Finsemble application. Microservices provide capabilities to Finsemble windows. Similar to cloud microservices, these microservices typically don't have a UI. A microservice can be interacted with using a corresponding client API.

Each window is a Chromium container sitting on top of a secure operating layer. These windows are called Finsemble components. The window's JavaScript accesses the underlying Finsemble Library. The Finsemble Library (FSBL.js) is a set of client APIs connecting to the microservices.


Architectural breakdown

Below is a complete architectural breakdown of a Finsemble application: a set of cooperating Finsemble components and microservices. All components access the microservices though the client APIs contained in the Finsemble Library. All communication between windows and microservices takes place through the Router, which is itself a microservice.

The most common scenario for developers is to build new components on top of the core module. Developers can connect their components, our prebuilt components, and third-party components to the Finsemble core to form a single application. For advanced users, Finsemble also supports adding new microservices and corresponding client APIs. The aim is full extensibility though new components, services, and client APIs.

As mentioned earlier, the Finsemble Library is a set of client APIs connecting to one or more microservices. For example, the Launcher Client connects to the Launcher microservice. Likewise, the Router Client connects to the Router microservice. The Router microservice (via the Router Client) acts as an inter-window event hub, providing communication between all components and microservices.

The core of Finsemble is packaged as a NPM module to simplify updates.

Here's a summary of key ideas about the Finsemble architecture reflected in this diagram.

  • Components are "pluggable" in the sense they can be mixed and matched to form an application. ChartIQ has a set of starting fintech components, which can be further customized by developers building their own application. Developers can also create their own components or use third-party components built for Finsemble.

  • A special class of components, called presentation components, are provided as samples to provide common UI functionality to end users. An example is the toolbar component that end users can use to launch or control other components. The presentation components are distinct in their purpose. However, each is built like every other Finsemble component: by using the Finsemble Library's client APIs.

  • Similar to components, microservices are "pluggable"—one might think of a microservice as a kind of "invisible component" delivering centralized functionality. Microservices are less likely to change (or be interchanged) than components since they provide a basic building block functionality. Nevertheless, developers can create their own microservices with corresponding client APIs, essentially extending the Finsemble Library. Third-party microservices built for Finsemble can also be used as they become available.

  • Each individual component and microservice is independently threaded in its own Chromium window that sits on top of a secure operating layer.

  • New microservices and components will be added by the Finsemble development team to the core modules. Advanced components and sample components will also be made available as they are created.

Definition of key terms

TERM DEFINITION
Client API A JavaScript API that interfaces with one or more microservices using Finsemble Router messages. Some client APIs are defined for specific microservices, like the Launcher Client API is specifically for the Launcher microservice. Other client APIs may provide composite functionality out of one or more existing microservices, like the Dialog Manager Client API which builds on the Launcher Client. Depending on the microservice, some parts of the API functionality may be implemented on the client side with the centralized functionality residing on the microservices side.
Finsemble An integration engine designed for the desktop and built and composed of Finsemble components. Depending on context, this term might refer to a specific application instance running on a specific computer.
Finsemble Component A piece of functionality built with HTML5/JavaScript that lives in a Finsemble window. A Finsemble component is the basic building block of the Finsemble application. A component may have multiple active instances within the Finsemble application, each running in its own Finsemble window (e.g., multiple chart windows, multiple chat windows). A distinction can be made between presentation components, which are components created to provide common UI functionality (like dialogs and toolbars), and business components, which are components that manage real-life business objects (like chat and charts). All components are built by using the Finsemble library's client APIs.
Finsemble Framework Also known as just Finsemble. The Finsemble framework is a cooperating set of software components and microservices used to build HTML5 desktop applications on top of an operating layer.
Finsemble Library The Finsemble Library is our set of client APIs. These APIs connect to the Finsemble microservices.
Finsemble Router A microservice that is the center point for all Finsemble communication. The Finsemble Router sends and receives messages between windows, enabling communication between all Finsemble components and services through three types of messaging: Listen/Transmit, Query/Response, and SubPub.
Finsemble Window A Chromium container injected with Finsemble capabilities. These Finsemble capabilities allow the window to plug into the overall Finsemble application, cooperating with other Finsemble components and microservices. A Finsemble window always contains an instance of a Finsemble component.
FSBL The JavaScript object that contains the Finsemble Library.
Microservice An active, independently-threaded JavaScript module providing centralized functionality throughout a Finsemble application. Microservices provide capabilities to Finsemble components as well as other microservices. Example microservices include the Finsemble Router microservice, Launcher microservice, Linker microservice, and Chat microservice. Microservices typically don't have a UI; instead, they can be interacted with using a corresponding client API. All communication to and from microservices is through the Finsemble Router (itself a microservice). A microservice is sometimes simply called a service.
User-Defined Components User-defined components are HTML5 web pages that users integrate into a Finsemble window. If the HTML5 web page has no special customization or knowledge of Finsemble, its integration into the Finsemble application is limited.
Workspace A workspace is the highest-level grouping of windows in the Finsemble architecture. It has a name, and an array of windows that it keeps track of. When the application is reloaded, the workspace is the first thing retrieved from storage.

check   A Finsemble application is comprised of a set of cooperating Finsemble components and microservices. Finsemble allows for full extensibility though pluggable components, services, and client APIs.
 


Further reading

Finsemble is a config-driven platform. For more about the basic set up and configuration of Finsemble, proceed onward to Configuration.

The Distributed Store is an essential part of Finsemble's loose coupling. For more information, read the Distributed Store documentation.

The Router is a central part of Finsemble's "skeleton." To learn more about the Finsemble Router, check out the Router documentation.