Scalability and performance

Scalability

Dworkin production environment provides simplified zero-conf scaling up support just by running and registering with Consul necessary internal Dworkin service instances deployed to any server or virtual machine. Dworkin Consul service locator will randomly pick up by name requested service across the application network and ask it to process API request.

The scaling mechanism for Dworkin public API (Customer and Merchant API web applications based on Play framework) remains the same as described above except that it will be required to set up additional load balancer system for HTTPS traffic (like Fabio) and then redirect requests to Consul powered API nodes.

Performance

Dworkin production demo environment contains two Ubuntu powered 4GB RAM VPS (NodeA and NodeB) located in LA, USA with ping:

 

NodeA contains Apache server with Wallet and Admin demo with SSL on, PostgreSQL, Elastic Search stack, Consul Agent Server with Gossip encryption on and registered instances of Dworkin internal API services – domain-service, operation-processor-service and card-provider-service.

NodeB contains Consul Agent Client with Gossip encryption on, FileBeat and registered instances of Dworkin API – domain-service, operation-processor-service , card-provider-service, exchangerate-updater-service, sms-service, customer-service(SSL on), administrative-service(SSL on)

Consul and application traffic is going through public network (not private DC traffic due to VPS limitations)

Load tests conducted using loadtest (1000 requests, concurrency level 10, rps 200) and customer API method:

 

API service execution time log fragment on both nodes:

Stress test (10.000 requests, rps 100):

Production performance optimisation

Dworkin production environment performance relies on configuration of network and software components participating in data traffic management. Please refer Consul optimisation docs to tune Consul server performance. Customer and Merchant API services can be optimised in production using Play thread configuration.