Product Architecture Image

Introduction

The payments industry is rapidly changing, and there are numerous opportunities for companies that are in a position to exploit them. This means that payments companies need a reliable, flexible and highly performant switching platform that is flexible enough to facilitate rather than to inhibit change.

The Aviso team has many years’ experience in the payments business, with a real understanding of the difficulties that companies so often face with their payments infrastructure. Allied with this understanding of the payments space is a deep knowledge of the latest technologies in software development, and years of experience developing and maintaining mission-critical processing systems.

The Aviso team has applied the fruits of this knowledge and experience to the problem of inflexibility in switching systems – Novate is the result.

Novate

Novate is a uniquely flexible and powerful payment messaging application delivered as a modular suite of payment functions.

The service oriented architecture of the application is designed to allow individual Novate modules to seamlessly integrate not only with one another, but also with other payment systems – empowering Novate users to cost effectively adapt their switching infrastructure to meet changing requirements.

A functional approach

The Java Virtual Machine (JVM) is ubiquitous, and is a natural choice for server-side systems today. However, the Java language itself is not such a good choice for a switching platform. A switch must be both highly concurrent and correct: a difficult combination when dealing with Java’s mish mash of mutable data and thread synchronization.

Additionally, financial messages themselves do not sit well within Java’s object oriented model: too often in the past, attempts to model financial messages in Java have led to sprawling object graphs consisting of numerous interfaces and multiple levels of inheritance. This complexity causes such systems to be inflexible.

Product Architecture Image

Enter Clojure

Taking into account the limitations of Java in this space, we decided to develop Novate using Clojure, which is a functional programming language based on the JVM. Clojure is a dialect of Lisp, which shares Lisp’s ‘code as data’ approach.

All data structures within Clojure are immutable by default – which is ideal for concurrent systems – and the code-as-data philosophy of Lisp allows Novate to express message definitions, message transformations and message routes in a uniquely expressive and flexible way.

Additionally, as Clojure is fully compatible with Java, it is possible to utilise existing Java libraries from the open source world – allowing Novate to make use of best-of-breed libraries such as the netty.io networking stack, standard JDBC interfaces to databases and the excellent java.util.concurrent Java package.

Core design objectives

There are certain basic requirements that any payments switch must fulfill: it must be completely reliable and highly performant.

In addition to these key requirements, the core design objective for Novate is flexibility.

Flexibility in switching makes it possible for companies to innovate in the payments space, to reduce the TCO of a payment system and to quickly react to changes that occur in other parts of the payments chain.

 

Product Architecture Image

Novate achieves this flexibility through the reification of message definitions and transformations into a concrete, configurable form. These definitions are both general and highly configurable, making use of Clojure’s ‘code as data’ philosophy. They allow arbitrarily complex message types, validations, security restrictions and translations to be defined using a single set of data structures – accommodating messaging formats as different as ISO 8583, APACS and XML to be processed using configurable rules.

Architecture Fundamentals

Novate has been designed to incorporate the following features:

Product Architecture Image

Flexible message pipelines

Novate makes extensive use of message pipelines to process transactions. A message pipeline carries messages between a network interface and the Novate core.

Transaction processing within a specific message pipeline is carried out via a staged, event-driven architecture – making the addition of new events and processing steps a trivial task.

Product Architecture Image

SOA

Novate has a service oriented architecture, and functionality within the system is encapsulated in a set of modular and reusable services.

Novate uses the Java OSGi standard to achieve service modularity and high levels of code reuse, as well as making extensive use of https REST services and messaging queues to allow services to be hosted in an arbitrary number of JVM’s. This allows Novate to scale up or down to suit any type of processing workload.

Product Architecture Image

Active-active configuration

Payments systems cannot tolerate downtime. The service-oriented, distributed architecture of Novate makes it possible to deploy an arbitrary number of switch instances, and control and monitor each instance from a central management web application. Spinning up and taking down Novate instances can be done with the click of a button.

However, we understand that complexity is the enemy of availability, so individual Novate instances themselves will happily continue to process transactions, regardless of network outages or failures in other parts of a customer’s infrastructure.

Product Architecture Image

No external dependencies

Novate comes as a single, simple Java application that will run on any platform for which a Java 1.6 JDK is available.

Currently, Novate supports the Oracle database, but its modular architecture makes it simple to add support for other databases and data storage services.

Product Architecture Image

Testing done right

The Aviso team has built a number of large scale systems, and we know how important efficient testing is to successful software projects.

Novate has a huge array of unit, functional and performance tests that are run after every code commit. This allows the development team to build features at a rapid pace while dramatically reducing regression rates.

Product Architecture Image

Multi-core optimisation

Multi-core servers are now the norm in most environments. Novate takes full advantage of an asynchronous architecture, data immutability and the concurrency libraries available within Java to ensure that it can make full use of all server resources available to it.

Novate can make use of every core available on a server – meaning dramatically increased messaging throughput when deployed on multi-core servers.

Product Architecture Image

Instrumentation

A transaction switch is a critical piece of infrastructure. Novate allows switching operators to see large amounts of real-time performance information, transaction statistics and system alerts generated by the application.

Novate has a highly configurable logging and performance measurement subsystem – allowing operators to scale up or down log levels and alerting thresholds according to their needs.