Glossary
There is a lot of technology embedded in the Genesis Application Platform. So, inevitably, we have to refer to it in this documentation.
Here, we list many of the technical terms that appear in these pages. For each one, we give you a thumbnail description. We hope that helps you to put the information in context and gives you a useful start if you want to explore further.
ACID
A design principle for database transactions. The ACID properties were created to ensure that transaction-oriented databases can recover in the event of a failure in a transaction.
- Atomicity (All the transaction or none)
- Consistency (all data abides by the rules)
- Isolation (Every transaction is a separate entity)
- Durability (Once completed, the data is changed and stored)
A transaction is a single logical operation that may consist of one or many steps. For example, transferring money between bank accounts (i.e. debiting one account and crediting the other) is a transaction.
If a transaction like this fails halfway through, it could have major consequences. Money could be debited from the first account but not credited to the other account.
This is where the ACID principles should apply.
According to the ACID definition, a database is consistent if, and only if, it contains the results of successful transactions. Any database that is ACID-compliant will ensure that only successful transactions are processed. If a failure occurs before a transaction has been completed, no data will be changed.
Aeron
Aeron is an open-source, low-latency messaging system, initially developed for a large US exchange.
It enables processes running on different hosts (or the same host) to communicate with minimal and consistent latency.
It is used in real-time systems that have high throughput, or which require minimal response time.
Aeron operates in a peer-to-peer model. It is brokerless, in contrast to other middleware, such as RabbitMQ, Kafka, and TIBCO EMS.
There is an aeron wiki on github.
Amazon Elastic Compute Cloud
Also known as EC2.
This is Amazon's Amazon Web Services cloud-computing platform, where the Genesis servers are located. In effect, these are virtual computers that we use to run our services. It enables us to boot an Amazon Machine Image (AMI) to configure a virtual machine - an instance - where we can install any software we like. We also use the AWS Free Tier (known as S3).
Ansible
A development tool.
Ansible is an engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs.
A basic Ansible command or playbook:
- selects machines to execute against from inventory
- connects to those machines (or network devices, or other managed nodes), usually over SSH
- copies one or more modules to the remote machines and starts execution there
If you are excited, stimulated or inspired, you can start here.
Camel (Apache Camel)
An Open Source integration framework that enables you to integrate different systems that consume or produce data.
You can define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or Blueprint XML Configuration files. This gives you smart completion of routing rules in your IDE, whether in a Java or XML editor.
Apache Camel uses Uniform Resource Identifiers (URIs) to work directly with the Transport or messaging model. This can be HTTP, ActiveMQ, JMS, JBI, SCA, MINA or CXF, as well as pluggable Components and Data Format options.
There is a lot of information at the official Apache Camel website.
DAO
A Data Access Object (DAO) is a pattern that provides abstract interfaces to some persistence mechanism. DAOs provide data access without exposing details of the underlying persistence technologies being used.
DBeaver
DBeaver is a desktop application written in Java and based on the Eclipse platform.
It is an SQL client software application and database administration tool that enables you to view data and develop in SQL.
- For relational databases it uses the JDBC application programming interface (API) to interact with databases via a JDBC driver.
- For other databases (NoSQL) it uses proprietary database drivers.
DBeaver provides an editor for SQL that supports code completion and syntax highlighting.
It provides a plug-in architecture (based on the Eclipse plugins architecture) that enables users to modify much of the application's behaviour to provide database-specific functionality or features that are database-independent.
There are also tools for drawing diagrams, import/export and data analysis.
Docker
An open platform for developing, shipping, and running applications.
With Docker, you can package and run an application in a loosely isolated environment called a container. You can run many containers simultaneously on a given host. The containers are lightweight and contain everything needed to run the application, so you do not need to rely on the host's set-up. Therefore, you can deliver software quickly.
EC2
Also known as Amazon Elastic Compute Cloud.
This is where the Genesis Dev, Test and Production instances are housed in the cloud.
Endpoint
An endpoint provides a way to interact with an application. Ultimately, it is a url.
In the HTTP world, endpoints have different methods: GET, POST, DELETE, etc.
- GET endpoints are meant to provide data to the endpoint caller without side effects (i.e. no changes in the application or database)
- POST endpoints cause changes in the system (e.g. creating a new USER record)
- DELETE endpoints delete data in the system (e.g. delete a USER record).
For example, in a user management system, you could have different endpoints to create new user records, view them, or delete them. But other endpoints might not interact with the database at all, and instead interact with other remote systems.
FIX
Financial Information Exchange A protocol for sending and receiving financial information.
FIX has standard dictionaries of different messages. Typically, we use v4.4. note that some banks use earlier versions (usually 4.2) and some have already moved to 5.0. Also note that you can customise these dictionaries to create our own messages.
Genesis uses QuickFIX (open source).
There is a standard FIX module that you can include in applications.
This includes the standard FIX libraries.
It also gives you a standard FIX inbound streamer that listens to the FIX_In table in the database.
GPAL
Genesis Platform Abstraction Language This is our own scripting language, which plugs in to IntelliJ. It means that you have access to autocompletion, Help and error highlighting as you code. Once you define an object in GPAL (such as a View), you can use it in multiple components.
HFT
High Frequency Trading (HFT) relates to software-enabled trading of large numbers of orders within a fraction of a second. This can be achieved using technology such as low-latency caching and high-expense infrastructure. In this world, the trader who can execute the quickest has an advantage, being able to buy low and sell high (or sell high and buy back lower) within milliseconds or less. For example:
- You have an algorithm that "sniffs" the arrival of a new large buy order in the market; this order is likely to push the price up.
- You can execute a lot of buy trades on the instrument within milliseconds and offer these at a higher price because the market has moved up - partly as a result of your buying.
- You get to sell these back to the market at a new higher price. That means no change in your holdings or risk, plus a profit for your trading desk. All in the blink of an eye.
IOPS
Input/output operations per second, a metric for input/output performance, typically used for storage devices, such as disk drives (HDD), solid-state drives (SSD), and storage area networks (SAN).
JMS (Java Message Service)
JMS is an agnostic API, which MQ providers can comply with so that Java applications can be built generically. If an application is built using JMS, it can be connected to any MQ (message queue) provider that supports JMS.
LDAP
Lightweight Directory Access Protocol Industry-standard application protocol for accessing and maintaining distributed directory information services over an Internet Protocol (IP) network.
A common use of LDAP is to provide a central store of usernames and passwords. This allows many different applications and services to connect to the LDAP server so that you can validate users.
LSP
Language Server Protocol. This is an open, JSON-RPC-based protocol that is used to provide source-code editors and integrated development environments (IDEs) with intelligence tools such as code completion, syntax highlighting and marking of warnings and errors.
MarkitWire
An electronic trade capture and confirmation platform.
Maven
A tool for building and managing Java-based projects. There is a very useful Maven tutorial
Maven provides default behaviour for projects. When a Maven project is created, Maven creates a default project structure. As a developer, all you have to do is put the files in the right places. There is no need to define any configuration in pom.xml.
Maven plugins are generally used to:
- create jar and war files
- compile code files
- unit-test your code
- create project documentation
- create project reports
Maven repository
In Maven terminology, a repository is a directory where all the project jars, library jar, plugins or any other project-specific artifacts are stored for use by Maven.
Maven local repository is a folder location on your machine. It is created when you run any maven command for the first time.
When you run a Maven build, Maven automatically downloads all the dependency jars into the local repository. It helps to avoid references to dependencies stored on remote machine every time a project is built.
By default, a local repository is created by Maven in the %USER_HOME% directory. To override the default location, specify a different path in the Maven settings.xml file available at %M2_HOME%\conf directory.
Maven repositories can also be consumed by other tools, such as Gradle or Ivy.
MQ
A message queue is a form of asynchronous service-to-service communication. This functionality is normally provided by a message broker (RabbitMQ, ActiveMQ, IBM MQ, Amazon SQS, etc). Messages are stored on the queue until they are processed and deleted. Each message is processed only once, by a single consumer. Message queues can be used to decouple heavyweight processing, to buffer or batch work, and to smooth spiky workloads.
Message queue brokers also generally support publish and subscribe (Pub/Sub) patterns. In a Pub/Sub system, messages are published to a topic, and multiple subscribers can receive those messages. Publishers and subscribers are decoupled, and subscribers express interest in specific topics. When a message is published to a topic, all interested subscribers receive a copy of the message.
Netty
Netty is the underlying network framework used by the Genesis back-end for HTTP, Websocket, and Genesis Binary Protocol communications between Client and Server, as well as between microservices.
When building a Genesis application, Netty is a transitive dependency that does not need to be added to your application.
Netty Camel component
This is a socket communication component in Camel. It is an NIO client server framework for developing network applications, such as protocol servers and clients. The aim is to simplify and streamline network programming, such as TCP and UDP socket server. The component supports both producer and consumer endpoints.
It has several options and allows fine-grained control of a number of TCP/UDP communication parameters (buffer sizes, keepAlives, tcpNoDelay, etc) and facilitates both In-Only and In-Out communication on a Camel route.
Maven users need to add a dependency to their pom.xml to use Netty.
Find this and a lot more at the Camel website.
nginx
For the applications that we host, Genesis uses Nginx as a reverse proxy and static web server. We strongly recommend Nginx and we can provide sample files to configure it.
This is not mandatory, however. You can use your preferred web server, as long as it can work as a reverse proxy and can host static websites.
NIO
Non-blocking I/O
This usually refers to java.nio, which is a set of Java APIs for intensive I/O operations. The APIs give access to low-level I/O operations in operating systems. So you have APIs that use the most efficient operations of the underlying platform.
Node Package Manager
NPM automates the management of third-party packages (exact version number, etc).
As a general rule, any project that uses Node.js will need a package.json file. This is the control centre for NPM, where you tell NPM which libraries you want to import, provide information about source control, project metadata, and more.
Whenever you run npm install, NPM will look at your package.json file and import the relevant libraries.
Pekko
Apache Pekko (Incubating) is an open-source framework for building applications that are concurrent, distributed, resilient and elastic. Pekko uses the Actor Model to provide more intuitive high-level abstractions for concurrency. Using these abstractions, Pekko also provides libraries for persistence, streams, HTTP, and more. More is available from the Apache Pekko documentation.
POJO
Plain Old Java Object
Polling
In electronic communications, the continuous checking of some resource to check what state it is currently in. This is usually used to ensure sustained communication or when listening for updates.
Resource
In the world of applications servers, a resource is a component that can send and receive messages. It is the part of the application that the front end goes to when it wants to read, write, modify or delete data.
Genesis applications provide three types of resource:
- Request Server (request reply), which supplies static data (reference data)
- Data Server, which provides real-time data, such as price information
- Event Handler, which handles interaction from the front end (such as user clicks), responses to internal database changes and messages to and from external services
In most cases, you can generate these resources automatically (via the AppGen command). You can then configure these basic resources to add sophistication to the application.
REST
Something developers don't do very often.
In the world of applications and servers, REST is short for REpresentational State Transfer.
When you have finished wondering if anyone got paid for thinking that up, we'll explain what is going on below.
REST is a standard that enables client and server systems to talk to each other over the internet via an endpoint. Clients send requests to retrieve or modify data on the server, and servers send responses to these requests.
A request generally consists of:
- an HTTP verb, which defines what kind of operation to perform
- a header, which allows the client to pass along information about the request (see below)
- a path to a resource
- an optional message body containing data
There are 4 basic HTTP verbs used in REST:
- GET — retrieve a specific resource (by ID) or a collection of resources
- POST — create a new resource
- PUT — update a specific resource (by ID)
- DELETE — remove a specific resource (by ID)
RPM
RPM can refer to:
- RPM Package Manager, which is an open-source package management system. It was originally created for Red Hat Linux, but is now used in many Linux distributions, including CentOS.
- the .rpm file format. Most .rpm files are binary RPMs containing the compiled version of the software, but you can also find source RPMs containing the source code used to build the binaries.
Script
Some Genesis commands are scripts that can be executed like a command. But note that many of our commands are backed by Java code and could be considered CLI tools instead.
In the Genesis platform, you are provided with a set of scripts to enable you to do simple things, such as start or stop a process, or more complex things, such as create a schema from an existing database or spreadsheet.
Service
A vital component of the server in an application. A service performs critical action, such as maintaining authorisation information, providing communications between other processes, or providing a resource.
Each service is configured in a processes.xml file.
In the Genesis Application Platform, many of these services are included automatically when you create an application. Some of these are locked because they are essential to the running of the platform (for example, AUTH). Others can be configured to suit the exact requirements of the application (most obviously, the Event Handler).
And finally, you can create your own service if you want to do something particularly clever that isn't already provided by one of the standard Genesis processes. You will be able to use that service in any further applications you develop on the platform.
SSH
Secure Shell Protocol A protocol for operating secure network services over an unsecured network.
Typical applications include remote command-line, login, and remote command execution, but any network service can be secured with SSH.
SSH creates a secure channel on a network by using a client–server architecture. It connects an SSH client application with an SSH server.
There are two major versions: SSH-1 and SSH-2. The standard TCP port for SSH is 22.
SSH is generally used to access Unix-like operating systems, but it can also be used on Microsoft Windows.
Terraform
A tool for building, changing, and versioning infrastructure safely and efficiently.
TerraformConfiguration files describe the components needed to run a single application or a complete data centre. Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure.
As the configuration changes, Terraform is able to determine what changed. It creates incremental execution plans that can be applied when you are ready.
Terraform can manage includes low-level components, such as compute instances, storage, and networking, as well as high-level components, such as DNS entries, SaaS features, etc.
You describe your infrastructure using a high-level configuration syntax to create a blueprint of your data centre. This can be versioned and treated as you would with any other code. Additionally, infrastructure can be shared and re-used.
Terraform has a planning step that generates an execution plan. This shows what Terraform will do when you call apply - so you can avoid any nasty surprises.
Terraform can also build a Resource Graph of all resources, and parallelizes the creation and modification of any non-dependent resources. This gives operators insight into dependencies in their infrastructure.
UDP
User Datagram Protocol.
While TCP provides apps with a way to deliver (and receive) an ordered and error-checked stream of information packets over the network, the User Datagram Protocol (UDP) is used by apps to deliver a faster stream of information by doing away with error-checking. However, it is possible to build protocols on top of UDP that provide this reliability.
A datagram and a packet are more or less the same thing. UDP, built on top of the IP protocol, works similarly to TCP, but is simpler and faster.
The main difference is that UDP doesn’t require the recipient to acknowledge that each packet has been received. Any packets that get lost in transit are not resent.
Web components
Web components are web platform APIs that enable you to create new custom, reusable, encapsulated HTML tags for use in web pages and web apps.
Custom components and widgets build on the Web Component standards. They are designed to work across all standard browsers, and can be used with any JavaScript library or framework that works with HTML.
WSL
Windows Subsystem for Linux. This enables you to run a Linux environment on a Windows machine.