Skip to content
Amal Amine edited this page Apr 11, 2018 · 4 revisions

Short Name

Create a microservices-based digital banking web-application

Short Description

Build and deploy a digital bank capable of managing users accounts, transactions, transfers, and bills; composed of a set of microservices that communicate with each other.

Offering Type

Cloud

Introduction

Development of cloud native apps that are broken down into a set of microservices has been praised and commended as best-practice in software development methodologies. Software stacks like Kubernetes, which enable cloud native computing, have therefore picked up quite a bit of popularity.

It’s a little (a lot) more fun, however, to try build a so-called cloud native app, than to talk about one.

So here's our attempt: We’ll take a use-case that has a bit of real-world familiarity to it — A digital bank. Naturally inspired by Monzo. Let’s call it Innovate.

Author

By Amal Amine

Code

https://github.com/amalamine/innovate-digital-bank

Demo

live demo: http://ibm.biz/digibank; demo video: https://ibm.box.com/s/fgpqiacn9ewaorgp8l97bnrk760s8rx3

Video

Overview

This journey is meant to describe how a (somehow) real world application can be broken down into a set of microservices; where core functionality is delegated to the appropriate microservice, and the web-app portal is left as light-weight as possible.

Ideally, the pattern is meant to portray some of the 12-factor-app characteristics in use, and justify the use of microservices where appropriate. In this case, the microservices are independently deployable and independently scalable.

When the reader has completed this journey, they will understand how to:

  • Break an application down to a set of microservices
  • Create and manage a Kubernetes cluster on IBM Cloud
  • Deploy to a Kubernetes cluster on IBM Cloud
  • Deploy to IBM Cloud Private

Flow

Demo architecture

  1. Portal: Loads the UI and takes care of user sessions. Relies on all other microservices for core functionality.
  2. Authentication: Handles user profile creation, as well as login & logout.
  3. Accounts: Handles creation, management, and retrieval of a user’s banking accounts.
  4. Transactions: Handles creation and retrieval of transactions made against users' bank accounts.
  5. Bills: Handles creation, payment, and retrieval of bills.
  6. Support: Handles communication with Watson Conversation to enable a support chat feature.

Included components

  • IBM Cloud Container Service: IBM Bluemix Container Service manages highly available apps inside Docker containers and Kubernetes clusters on the IBM Cloud.
  • Kubernetes Cluster: Create and manage your own cloud infrastructure and use Kubernetes as your container orchestration engine.
  • Microservice Builder: Learn, build, run, and manage applications in a microservices framework.
  • Watson Conversation: Create a chatbot with a program that conducts a conversation via auditory or textual methods.

Featured technologies

  • Microservices: Collection of fine-grained, loosely coupled services using a lightweight protocol to provide building blocks in modern application composition in the cloud.
  • Node.js: An open-source JavaScript run-time environment for executing server-side JavaScript code.
  • Containers: Virtual software objects that include all the elements that an app needs to run.
  • Databases: Repository for storing and managing collections of data.
  • Hybrid Integration: Enabling customers to draw on the capabilities of public cloud service providers while using private cloud deployment for sensitive applications and data.

Blog

Blog is posted on medium

Links

  • 12 Factor App: ideal practices for app development, paying particular attention to the dynamics of the organic growth of an app over time, the dynamics of collaboration between developers working on the app’s codebase, and avoiding the cost of software erosion.
  • Martin Fowler's microservices blog: a comprehensive definition of the microservices-based architectural style.
  • MonoLith First: A more sensible approach to microservices, monolith-first.