Showing posts with label cloud. Show all posts
Showing posts with label cloud. Show all posts

Wednesday, May 22, 2019

Why split your application in microservices?

Why we need to split the logic?

When a nontechnical person things in an application, he visualizes it as an engine to solve a problem in the company in order to generate money, this monolithic concept is widely propagated across business managers and business owners. It's not wrong, because in order to generate profit, all of the parts should act as one big application, however, the different components should be synchronized and run in a coordinate way. The ability to align those multiple parts is responsibility of the enterprise architects who has to understand the view of the managers/owners that are receiving the profit of the engine and is paying to keep it running in a effective way.

In business side, every day the drivers are changing and the company should adapt to those new drivers smoothly and promptly without loose control over the process and ideally reducing cost and increasing quality. The implementation of each change should be performed in all parts of the company, including applications, and it's better if the applications are modular and easy to assembly returning to the original best practice to have loosely coupled software components, reducing the dependencies between the components and making easy to replace or update one component in the big structure.

In order to reach this model, each task identified on the company, should be implemented as a service and must run independently of the other components, at this point, it's very important to have defined the input, output and exception management of the task that the service will represent, each service will receive a set of parameters and will execute a process to transform the parameters in an output following a deterministic process. Also, the service could generate an action over information, such as write a file, send an email, modify information in a database or over any other resources available in the platform. When you have to update a process due to a new requirement from the business, you have change just the services that are covering tasks that are impacted for this change, trying to keep the input, output and exception process according with the original, if it's not possible, it should modify just an small part of the communication. 


Also, each component should run in an independent environment, allocating his own resources and avoiding coalitions with other task, in the same way, it could be run using a pool of resources able to run a lot of instances of the same task in parallel without mixing data or fighting for resources; in older architectures models this could be solved with a finite pool of instance of the same component pre loaded, this concept solved a lot of issues but it fails when the pooled instances run out of resources and finally generates a crash in the components. In new architectures based in cloud you could configure unlimited instances on-demand that will be instantiated as soon as are invoked. Those instances should not generate any consumption of resources meanwhile it's idle and also doesn't generate any cost to the company.

To communicate micro services we have to establish a common language to move information between the components, usually, this language requeries to identify the main entities that are playing inside the company processes and generate a detailed documentation of each one, taking care of all the posible stages and all the views that could have each entity.

Micro services must be coordinated by an orquestation process that knows all the capabilities of each service and manage the business logic to generate value to the user, this process act a workflow engine with all the steps and conditions requeried to process a business job with all the exceptions and variations.

Saturday, October 27, 2018

Cloud storage advantage

These days every company has to keep information about their business in digital format, data is related to accounting, operations, clients or whatever the company do to generate money.
Every single piece of this information has  different condition to be store, keep and access according with their nature and sensitivity. The drivers of those conditions are regulatory, strategic or controls; and each section has different set of stakeholders.

In order to keep this big amount of information aligned and fulfilling the big amount of conditions, each company has two possible ways:

1. Build their own infrastructure to keep the information safe.

2. Delegate this management to an expert partner.

Both options are valid and extensive uses by different companies in all sectors of the economy across the world.We will analyze both.

1. Own infrastructure:

Due to the huge set of alternatives that the company could select on this way, it makes this way so complicated, you could start from keep all the information in the hard drive of your computer in a good identified set of folders or you could build a huge data center in a remote location.

In general, each requirement that you have to keep your data will generate an extra cost to your company.

If you have to keep three spreadsheets with accounting information from your first year, those spreadsheets should be stored in a pen drive or a CD that have to pay part of your rent during next X number of years until the Tax authorities said that it's not relevant.

Escalate it to the next level, your company has a small sales team that use a local CRM open source application, you have this application running in the powerful desktop that your company have under your desk. You paid a big amount of money for your machine, you have to keep it running all time and you have to contract a guy to keep it in good shape, also, you have to keep a separate backup of the information in CRM database for at least 1 month. You are investing more than one hour per day in keep your infrastructure running and paying an extra cost in your electricity bill on monthly basis. Also, you have to keep the backup safe in a second location that also should have to pay for rent.

Now, your small CRM is a headache, that is consuming time and resources and generating operative dependencies and additional stress changing the focus of the company to support systems in stead of generate money.

If you escalete it to the next levels, could understand that every single piece of data that you put in your company, will generate an infraestructure cost in the future.

2. Delegate it to an expert, cloud expert:


In the same case, you could start working with the spreadsheets in cloud platform editing it online with free tools, and storing it in an online storage that with bill you a couple of cents per month for the usage, once you stop to use this spreadsheet on daily basis, you could move it to a cold storage that generate just a couple of cents per year.

If you escalete it to the next level, you could buy a CRM for about five dollars per month including infrastructure and backup according with complex requirements according with your business needs; if you need to grow your business, your application could configure to escalete in infraestructure to support more traffic; if you need more applications just add to your package in the same infraestructure and increase your bill according with your needs.