Modernization of applications

Experiences in the modernization of solutions

Creted by Alejandro Escanero Blanco / Twitter: @aescanero Documentatión and demo in https://github.com/aescanero/dockerevents/opensouthcode2018 Presentation in Disasterproject

Introduction

What is a Legacy system?

It's a brown dispacher. That has been there for a long time and nobody knows anything about

No documentation

No source code

There is source code but it does not compile

And worst, there is source and compile, but nobody understands why

Make documentation

Cross fingers

Pray

Mad Max


First problem: Time is money

Fuente: Legacy System

New needs over the service

Comercial: Our product in the customer's infrastructure is really good

Manager: Let's put it in another client!

Old model:

New model:

Systems vs. Development

Systems and Development against the world

Problem (In case you haven't noticed this): Time is money

First step: Project evaluation

Analyze infrastructure:

How the application works:

The Database and its model:

Physical Servers

Two layers or multilayer applications

(Oracle) Database with business logic in it

Reality (red line) is a long list of intermediate layers: ComoEs

How far do we really want to go?

The business model

On Premise or Cloud

Client infrastructure

Prices and fixed costs

Client infrastructure

Control of data

Worst application support

Simpler but slower implementation

Elasticity

Prices by service

Third party infrastructure

Untrust in security

Better application support

Complex but faster implementation

Source: Benefits of Cloud vs On Premise Source: What are public, private, and hybrid clouds?

Other requirements

Time

Cost

Licenses

For yesterday

Free

What?

Second step: Life cycle to modernize a application

ComoEs




Analyze the current situation and look for improvements. It is practically a pre-sale task.

Design improvements that meet the requirements. It is an evangelistic work.

Implement. It includes the tests, it is a communication task.

Operate and collecting opinions.

A continuous improvement job is also continuous communication.

All clients support virtualization

You can't waste time on new physical servers

The first step is: Can we migrate the environment to virtual?

Even very old environments can be virtualized (RHEL or Debian + 10 years)

The second is to migrate and create templates (OVF)

Source: Open Virtualization Format

Client's networks are a mystery

And if you need to mount a cluster but you do not have a balancer or Fence?

A widespread OpenSource solution is Pfsense, which has firewall capabilities, balancer with HaProxy and multiples tools

Configuring a cluster with PfSense is easy and fast and does not require special dependencies.

Automatic deployments

We can schedule deployments or updates of the application

But in an environment with a lot of machines we are interested in move to a configuration manager

Ansible is perfectly valid for launching updates, tests and end

This make simple the rollback job

Source: Ansible

Separate the application from virtual machines

With the MVs does not sufficient to reach the customer, we must package the applications

The containers isolate us the application of the SO

To improve the deployment of the previous point

Advantages of orchestrating containers

Reboot failed containers

Horizontal scaling

DNS Autodiscover and load balancing

Secrets and configuration

Persistent storage

Multiple network solutions

Supported by all the big Cloud platforms

Can be federated

Monitoring and alerts

Zabbix is an easy-to-use monitoring system

It is trending and actually is more used than Nagios

Integrating it into a client is a complex process

Easily integrates with Graphana (better reports)

Source: Zabbix

And Then?