domingo, 7 de junho de 2020

Basic Cloud Architecture

 **Matéria Publicada no The TechnologyJournal da GFT na edição de jun-2020**

Some concepts that every developer should know before starting in the cloud.

Marcelo Goberto Azevedo –  marcelo.azevedo@gft.com 

The diagram below is a representation of a well-structured basic web application, if you are not a cloud developer, you will probably find it complicated.

 

Next, we will get to know each one of this component and give an introduction so that you can have the necessary knowledge when including it in the project architecture.

(1) DNS

The acronym DNS (Domain Name System) is the technology that allows the internet. This component allows all IP and domains to be referenced and found. Imagine a giant phone book on the internet, it is through it that you can find where a particular address is. When we enter a domain in our browser, for example, http://www.pudim.com.br, that address will be searched in this phone book to find where it should be directed to, it is always behind an IP, in the case of that address it is 54.207.20.104.

(2) LOAD BALANCE

Load Balance is an essential component for cloud architecture, one of the main characteristics of cloud applications is its horizontal scalability, that is, we can create numerous instances (replicas) of applications to meet a large demand of requests, thus ensuring availability It is in this scenario that Load Balance enters because it will be responsible for distributing this demand among all existing instances, ensuring that the rules defined therein are met to avoid overload in a given instance and provide high performance of requests.

(3) WEB APP SERVER

These are the web application servers, basically, it is where the application is installed and will respond to the user by receiving the request and providing an HTML response. As the brain of the application, it will be responsible for communicating with a variety of other components, such as databases, queues, caches, microservices and, much more. Server implementations require a choice a language (C # .NET, Node.js, Ruby, Scala, Java, etc.).

(4) DATABASE

Basically, every application uses a database to store information. It is through them that we can store and update the data captured or generated by the application. In the cloud model, mainly with microservices, it is quite common to use several databases. Also, there are currently two database versions, the most used being the relational database (SQL Server, Oracle, MySql, etc.) and the non-relational database (CosmoDB, MongoDB, DynamoDB, etc.), basically, the difference is that the relational offers greater consistency and reliability and non-relational has the advantage of greater scalability, with the information grouped and stored in the same record.

(5) CACHE SERVER

The cache service basically provides query and persistence of data in virtually real-time. Applications generally use database queries that are executed several times and return the same value, to avoid processing this information, the cache stores this result in memory and keep it available for the time configured for the application, thus making a big gain performance.

(6) JOBS

Most applications need to work asynchronously, that is, that is not associated with responding to a user's request. For that, the "work queues" are used, it is through them that routines are scheduled to be executed from time to time to perform jobs that do not need to happen directly associated with users. The language options and underlying structures are as numerous as for web servers and most of them can be created in the "serverless" concept, which are algorithms that run without a server and are event-oriented.

(7) STORAGE

These repositories are a simple and scalable way to store and access data in the cloud. They are perfect for any type of information you would store on a local file system, with the benefit of being accessible via http from anywhere. And you can also count on the redundancy configuration to guarantee its high availability.

(8) CDN

CDN (Content Delivery Network) is a technology that offers a way to allow access to static files (html, css, javascript, images, etc.) faster than allowing the user to reach the web application to receive their content. Basically, it works by distributing a copy of the most current content among many servers worldwide, so when a user accesses the web application, this content will be delivered by the CDN closest to the user and thus avoiding consumption of server traffic, this will guarantee much lower latency for the user and a better experience.

Working with the cloud is simple and complex at the same time. These elements presented are a small part of the countless possibilities that exist to build an architecture, however, I hope that it will be useful to give the initial kick in its use. Believe that the future of applications will inevitably be in the cloud.

________________________________________________________________________

Marcelo Goberto Azevedo, is a Software Architect at GFT. More than 30 years coding, analyzing and enjoying every moment. - marcelo.azevedo@gft.com