archives

Projetos que uso no dia a dia como Cloud Engineer.


Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Kubernetes, Cloud Native e CI/CD.

Aproveite e siga também a CD Foundation e Cloud Native Foundation.


Bora lá descobrir!

Para orquestrar Infra em provedores de nuvem?

  • Terraform

Para orquestrar um sistema operacional?

  • Ansible

Qual plataforma eu uso/prefiro para rodar APPs?

  • Kubernetes

Qual meu K8S Gerenciado preferido?

Em primeiro lugar!

  • EKS

Uma nova opção que tem se mostrado econômica e viável

Qual distribuição preferida para Kubernetes OnPrem?

  • RKE

Qual distribuição preferida para Kubernetes Leve/Edge/IoT?

  • K3S

Runtime para Kubernetes?

  • Docker

Pretente mudar para algum outro runtime?

Sem dúvida estou de olho em alternativas, são elas:

  • CRI-O
  • Containerd

Quais dashboards preferidos para K8S?

  • LENS para Desktop
  • Rancher como Dashboard Web
  • K9S para terminal

E estou de olho no projeto abaixo

  • Kubevious

O que usa para validar seus manifestos YAML ?

  • Kubeval

Para empacotar APPs para Kubernetes?

  • HELM

O que usa para monitorar o cluster e apps em seu Kubernetes?

  • Kube-prometheus-stack (Node Exporter + Prometheus + Grafana)

E como storage de blocos distribuído rodando no cluster?

Quando existe a necessidade eu uso

  • Longhorn

E como storage de objetos rodando no cluster?

Quando existe a necessidade eu uso

  • Minio

E para fazer backup?

  • Velero

E como ferramenta de registry?

  • Harbor

O que usa para gerenciar certificados no Kubernetes?

  • CertManager + LetsEncrypt

O quer usa para service mesh no Kubernetes?

Quando o projeto pede, vamos de

  • Istio

O que usa no kubernetes para autoscaling?

O que já vem pronto

  • HPA

E para complementar?

  • Keptn ou
  • Kaperter

O que usa para manter a qualidade da APPs rodando?

Quando o projeto pede, vamos de

  • Keda

O que usa para centralizar logs do cluster e suas APPs?

  • Grafana Loki

Qual tecnologia de CI/CD usa hoje em dia?

Difícil apontar uma, normalmente eu vou onde me sinto confortável:

  • GitLab CI ou
  • GitHub Actions

Contudo estou inclinado em usar coisas mais Cloud Native e tenho estudado:

  • ArgoCD
  • Flux
  • Tekton
  • Werf

O que usa para checar a sanidade/saúde do cluster?

  • Popeye
  • Kube Bench

E para checar aspectos de segurança?

  • Kuber Hunter

E no caso de Chaos Test?

É bem nicho, mas tem essa ferramentinha simples e bacana

  • ChaosKube

Para API Gateway?

Quando o projeto pede, vamos de

  • Kong

Para Tracing

To de olho no

  • Grafana Tempo + OpenTelemetry

Amarrando as pontas

Acho que é isso. A lista é longa e mostra como o Cloud Enginner tem que ser flexível e estudar muito para integrar tudo e manter sua aplicação rodando em nuvem da forma mais estável, saudável, performática e segura possível ;)

Volto para atualizar se tiver mais alguma coisa em mente!

[s]
Guto

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Pessoal estarei com a Save'in'Cloud falando sobre Kubernetes e Cloud Native. 


A live começará as 19 horas no horário de Brasília.

Participe e aproveite para tirar suas dúvidas!

https://cloud.saveincloud.com.br/lp/meetup-kubernetes-22-02/

[s]
Guto


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Bora entender isso e ficar na mesma página? Vem com a gente!

Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Siga a CD Foundation e Cloud Native Foundation no twitter.

O que é?

O kubernetes é um orquestrador de containers que oferece meios para você executar, escalar e atualizar seu software de forma simples e eficiente.

Com o kubernetes podemos automatizar a implantação de nosso software integrando nossa pipeline com um cluster de containers, conseguindo assim entregar nosso software de maneira rápida e controlada.

Origens

Em 2014 o google liberou um projeto open source interno que orquestrava containers, ele foi a base para o Kubernetes.

Curiosidades sobre as origens

No Google, internamente o projeto se chamava BORG.

O projeto BORG foi reescrito em GO e foi rebatizado de Kubernetes.

Kubernetes significa timoneiro – em grego, aquele que pilota uma embarcação.

A primeira release do kubernetes foi lançada em 7 de Junho de 2014.

Cloud Native Computing Foundation ou CNCF

O Google queria algum lugar para hospedar não só o projeto Kubernetes em si, mais um lugar em que todos pudessem contribuir com o projeto e criar novas soluções para esse segmento de aplicações rodando em containers.

Com essa ideia em mente, o Google entrou em contato com a Linux Foundation para criar uma estrutura que pudesse receber esse projeto e fomentar tecnologias e soluções ligadas a esse novo universo de containers.

A Linux Foundation criou então a CNCF, Cloud Native Computing Foundation para fomentar o desenvolvimento do Kubernetes e de tecnologias com foco em containers. O Termo Cloud Native foi cunhado e passou a ser utilizado para se referir aplicações desta natureza.

A CNCF foi fundada e teve seu anúncio junto com o lançamento da versão 1.0 do Kubernetes em 21 de Julho de 2015.

Como funciona ?

O Kubernetes ou K8S como é chamado de forma abreviada é um orquestrador que foi desenhado para gerenciar workloads de containers e serviços de forma automatizada, utilizando configuração declarativa que usa o estrutura e formato de dados do projeto YAML.

Isso significa que podemos definir o estado desejado de funcionamento de nosso cluster e também das aplicações rodando neste, apenas utilizando convenções em YAML. Os operadores do cluster vão ler essas definições e garantir esse estado, fazendo modificações quando for necessário.

O kubernetes oferece:

  • Serviço de descoberta
  • Serviço de balanceamento de carga
  • Serviço de proxy
  • Gerenciamento de redes e sub-redes
  • Gerenciamento de DNS
  • Orquestração de storage para os containers
  • Automação de rollouts ou rollbacks de suas aplicações
  • Gerenciamento dos certificados com geração e renovação automática
  • Gerenciamento de configuraçoes (configmaps)
  • Gerenciamento de segredos (secrets)
  • Gerenciamento de jobs (cronjobs)
  • Gerenciamento de limites de recursos para cada container
  • Self-healing, ele reinicia ou substitiu um container em caso de falha

Em resumo, o kubernetes vai oferecer tudo que é necessário para sua aplicação rodar e ser utilizada por seus usuários.

Por que chamam o K8S de OS de Datacenter?

Em alguns treinamentos ou palestras você pode ouvir o pessoal falando que o Kuberneters – antigo BORG – é um sistema operacional de datacenter, e tudo bem, faz sentido falar isso.

Se obervarmos com cuidado, vamos ver que o kubernetes oferece tudo que um software precisa, indo do endereço ip, rede, storage, balanceamento, dns, certificado, configurações, segredos, em suma, ele traz tudo que um datacenter ofereceria para uma aplicação em um lugar só, e essa é beleza e a força do projeto.

É de fato um datacenter inteiro em uma única solução.

Quais os benefícios?

Como o kubernetes oferece tudo que sua aplicação precisa, você tem mais tempo para se preocupar com o negócio, isso pode melhorar sua produtividade e reduzir tempo gasto com configurações comuns geralmente executadas em sua infraestrutura clássica.

O cluster kubernetes te ajuda a usar os recursos computacionais de forma mais eficiente. Como tudo roda em containers, você consegue compartilhar mais recursos computacionais com diferentes aplicações sendo executadas no cluster.

O processo de entrega e o ciclo de desenvolvimento do software pode ser sensivelmente reduzido depois que você integrar o cluster ao seu processo de desenvolvimento.

Uma vez que sua aplicação está rodando em Kubernetes, você conseguirá rodá-la praticamente em quaisquer cloud pública que suporte kubernetes. Essa portabilidade é muito importante e oferece a capacidade de seu software funcionar em diferentes clouds, podendo escolher aquela com melhor custo, ou até replicar sua aplicação em provedores diferentes para garantir mais disponibilidade.

Ao usar aplicações dentro do cluster, você conseguirá reduzir sensivelmente o custo de sua conta em uma Cloud Pública, isso acontece pois o Kubernetes já traz a maioria dos recursos de forma nativa, reduzindo assim dua despesa no final do mês.

O Kubernetes é o orquestrador líder de mercado, é comprovadamente estável, é mantido por diversas empresas incluindo o Google e foi testado em produção em diversos cenários com sucesso, o que nos garante que não estamos embarcando em uma aventura com uma tecnologia com pouca maturidade. Existem muitos cases de aplicações de missão crítica rodando em clusters Kubernetes, se é eficiente para eles, é eficiente para você.

É realmente seguro?

Sim é seguro, contudo, como qualquer outro software ou plataforma a segurança tem que fazer parte de suas preocupações desde o momento do design de seu cluster.

Coisas como:

  • Escolher uma distribuição kubernetes certificada pela CNCF
  • Escolher um OS base mínimo, com foco em K8S
  • Remover credenciais e acessos desnecessários
  • Evitar rodar qualquer coisa com privilégios de ROOT
  • Seguir todas as boas práticas de segurança para clusters K8S
  • Fazer o hardeding de seus clusters
  • Instalar ferramentas para verificar a segurança de seu cluster regularmente
  • Centralizar e acompanhar os logs do cluster e das APPs
  • Centralizar e acompanhar as métricas do cluster e das APPs
  • Inserir segurança no processo de desenvolvimento de suas APPS desde o dia zero

Seguindo essas dicas você terá tanto um cluster quando APPs seguras rodando nele.

Consigo rodar meu software nele?

Consegue sim, mesmo se for um monolito.

Diferente do que muitos pensam o Kubernetes pode rodar qualquer software que esteja embarcado em um container, seja um monolito, um microserviço ou uma API.

Obviamente se você estiver iniciando o desenvolvimento do seu software o ideal é pensar em decompor sua solução em microserviços que se comunicam via API, pensar em aplicações do tipo stateless, pensar em aplicações que podem rodar em múltiplos nodes e pods, pensar em uso de banco de dados externo, pensar em persistência e armazenamento de arquivos usando storage de objetos – estilo S3 – dentre outras boas práticas de APPs Cloud Native.

Seguindo essas dicas, você terá de fato uma aplicação Cloud Native que poderá usar o melhor do Kubernetes. Sua aplicação conseguirá escalar horizontalmente e atender a demanda crescente de seus usuários.

Consigo rodar Kubernetes on-premisses?

Sim consegue, existem excelentes distribuições para rodar On-Premisses, uma delas é o RKE da Rancher.

Quando falamos de on-premisses, precisamos pensar em um desenho robusto de nosso cluster, lembrar que precisamos de redudância entre hypervisors, backup real e eficiente, load balancer L4, centralização de logs, monitoramento, avaliação de métricas e performance, gerenciamento de certificados dentre outras coisas que precisam ser configuradas e levadas em conta para termos um cluster on-premisses rodando de forma segura, estável e performática.

Consigo rodar Kubernetes em meu provedor de nuvem?

Sim consegue também, rodando em instâncias virtuais da mesma forma como rodaria on-premisses ou usando serviços gerenciados do provedor.

Vale a pena usar o kubernetes gerenciado?

Vale muito, especialmente se seu time é mais focado em desenvolvimento do que em infraestrutura.

No caso de plataformas gerenciadas como EKS da AWS, GKS do Google, AKS da Azure, OKE da Oracle ou mesmo o Kubernetes gerenciado da Jelastic/SaveinCloud toda a parte da configuração e funcionamento do cluster, em especial os nós de controle, são mantidos pelo provedor, você só se preocupa com seus workloads e os nós do tipo worker que serão registrados no cluster que foi criado.

Com um kubernetes gerenciado você pode focar em seu negócio e deixar a infra com o provedor, é o melhor cenário para uma empresa com um time pequeno de desenvovledores ou um time sem engenheiros de nuvem.

O que são aplicações Cloud Native?

Aplicações Cloud Native são aquelas que já são construídas pensando em se beneficiar de recursos da computação em nuvem. E neste caso, isso esta intimamente ligado ao uso de containers e a orquestração destes.

Características de aplicações Cloud Native

  • Uso da Cultura DevOps no dia-a-dia do time do produto
  • Uso de métodos ágeis no desenvolvimento do produto
  • Uso de arquitetura de microserviços e API-First
  • Foco em oferecer métricas de seus componentes desde o dia zero
  • Foco em oferecer amplo monitoramento de suas features desde o dia zero
  • Foco em portabilidade e execução multi-cloud desde o dia zero
  • Abstração de sistema operacional com uso de containers
  • Uso de pipelines de integração contínua no processo de desenvolvimento
  • Uso de pipelines de entrega contínua para publicar seu software
  • Software desenhado para rodar como “Stateless”
  • Software pensado para uso de storage de objetos ao invés de filesystem
  • Software pensado para funcionar em cenários de escalabilidade horizontal
  • Software pensado para rodar em clusters de containers como kubernetes ou nomad
  • Software pensado para ser resiliente a falhas, onde possamos usar chaos engineering para testá-lo
  • Foco na rápida entrega de atualizações e novidades para seus usuários
  • Foco na capacidade de fazer rollback de forma fácil e simples caso seja nesessário

Eu acrescentaria ainda:

  • Suporte nativo a Kubernetes e Docker

Basicamente são essas as características que representam uma APP Cloud Native hoje, pelo menos em minha humilde opinião.

Amarrando as pontas

Espero que eu tenha conseguido explicar o projeto Kubernetes e o conceito de Cloud Native para você.

Em breve falaremos da arquitetura do Kubernetes! :)

[s]
Guto


Este post é do tipo #TLDR, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Pessoal, faltam 5 dias para fechar a CFP para a CdCON Texas 2022.

Bora enviar propostas!

https://events.linuxfoundation.org/cdcon/program/cfp

Visite o site da CDCON

https://events.linuxfoundation.org/cdcon

[s]
Guto


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Saiba como iniciar sua jornada Cloud Native!


Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Siga a CD Foundation e Cloud Native Foundation no twitter.

Revisor: Ricardo Pegoraro



Esse mapa sugere um caminho com 10 passos para você entrar no mundo Cloud Native sempre utilizando tecnologias open source para sua jornada.

Abaixo do mapa eu comento livremente passo a passo! :)

Cloud Native Trail Map

Passo 1: Containerização


Aqui nesse passo a ideia é atuar para que sua aplicação rode em containers. No futuro é interessante pensar em desacoplar sua APP para rodar pequenas partes do seu software de forma separada usando o conceito de microserviços.

Normalmente nesse passo usamos Docker e escrevemos os primeiros Dockerfiles.

Passo 2: Construir sua esteira CI/CD

Neste passo a ideia é criar uma esteira para que essa faça o build da sua imagem automaticamente quando houver uma atualização no seu código. Essa esteira deve fazer o buildtestar sua app e fazer o deploy para staging e depois para produção, já rodando sua aplicação em uma plataforma de containers.

Aqui algumas pessoas já estão usando um pouco de docker-compose para facilitar o uso de Docker.

Um excelente solução para construir sua esteira é usar o projeto ArgoCD.

Passo 3: Começar a orquestrar sua APP

Aqui a ideia é ir além do Docker, começando a utilizar um orquestrador de containers como Kubernetes ou Nomad. Utilizando um orquestrador você já vai rodar suas apps em um ambiente mais robusto, com estrutura de cluster com diversos benefícios como disponibilidade, escalabilidade, descoberta e muito mais.

É importante escolher uma distribuição certificada pela CNCF e usar ferramentas adequadas para armazenar suas imagens e empacotar sua aplicação.

Sugestões de ferramentas são Kubernetes para o cluster de containers, HELM para empacotamento de suas apps e Harbor para armazenamento de suas imagens.

Mudando para um cluster você terá que ajustar suas esteiras para que o deploy seja feito neste novo ambiente, na esteira você também vai adicionar um passo para armazenar a imagem no registry e empacotar sua APP no formato HELM.

Passo 4: Observabilidade e Análise

Do passo 1 ao passo 3 você estará se preparando para entrar no universo Cloud Native, se chegou no passo 3 já é uma grande vitória. Entrar no passo 4 significa que você já atingiu uma certa maturidade para rodar seu software e agora precisa de dados para melhorar e manter tudo funcionando da forma mais adequada.

Aqui vamos pensar em monitoração, métricas, logs e tracing de aplicações.

Para monitoramento geralmente utilizamos o prometheus para coletar e consolidar os dados, o grafana para visualizar esses dados em dashboards, para logs podemos usar o fluentd e para tracing o opentracing.

Usamos essas ferramenta para ver se tudo está funcionando, para avaliar a saúde de nossa aplicação e sua performance, afinal, não tem como melhorar algo se não temos métricas para comparar a evolução – ou regressão -  de alguma coisa.

Passo 5: Service Proxy, Discovery and Mesh

Bom agora que já temos nossa APP rodando em um cluster Kubernetes, com pipeline para entregar software, monitoramento e métricas de nosso software é hora de pensarmos em usarmos mais de nossos clusters.

Podemos explorar mais os recursos de serviço discovery, service mesh e load balancing, cada qual em seu quadrado para ajudar nossa aplicação a se manter consistente e escalar.

As sugestões aqui são Envoy (Proxy), CoreDNS (Discovery) e Linkerd (Mesh).

Passo 6: Network Policy & Security

Pensar em rede segurança é importante, manter seu cluster seguro é essencial. O kubernetes oferece recursos muito flexíveis para fazer o design de sua rede interna, e além disso, temos excelentes ferramentas para tratar da segurança de nosso cluster, desde a segurança de acesso aos recursos do cluster, configurações do cluster indo até a avaliação de vulnerabilidades das APPs rodando.

APPs para ajudar: CNI (rede), OPA (Policy) e Falco (security).

Passo 7: Storage e Banco de dados distribuídos

Quando a gente precisa de mais resiliência e disponibilidade para nossos bancos, rodar o banco no cluster começa a fazer muito sentido, em especial se compararmos com um banco rodando em uma arquitetura single-instance.

Temos tecnologias Cloud Native para por exemplo rodar bancos de dados com o MySQL de forma distribuída no cluster como o Vitess, temos ainda projetos como o CrunchyData para rodar um ambiente HA de Postgres (completo) em nosso cluster.

A parte de persistência de dados também ganha uma atenção especial, no caso de banco de dados ou de qualquer outra aplicação “stateful” que necessite persistir dados.

Para atender a demanda de persistir dados temos soluções robustas como LongHorn e OpenEBS que são soluções de block-storage que podem ser utilizadas combinados com o Vitess, CrunchyData ou qualquer outra app.

Temos ainda soluções de storage de objetos como Minio e CEPH que são compatíveis com aplicações S3-Like, dentre outras soluções.

Além de tecnologias de bancos de chave-valor como ETCd que consegue armazenar e distribuir dados através dos nós do nosso cluster.

Passo 8: Stream e mensageria

Existem excelentes soluções como NATs e gRPC para rodar em nossos clusters. O gRPC é uma solução universal de framework RPC e o NATS é um sistema de mensageria que nasceu na era Cloud Native.

Passo 9: Container Registry e Runtime

Armazenar imagens de suas aplicações e dependências se torna fácil com Harbor.

Quer experimentar algum outro runtime diferente de Docker? Temos opções como Containerd, e CRI-O que podem substituir a altura e manter seus padrões cloud-native sem perder código já feito para o Docker.

Passo 10: Distribuição de software

Caso precise distribuir software de forma segura, o projeto Notary, baseado no TUF (The Update Framework) pode te ajudar.

Quer ver o mapa atualizado?

https://raw.githubusercontent.com/cncf/trailmap/master/CNCF_TrailMap_latest.png

[s]
Guto

--

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.

 


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Entenda para que serve e como usar!


Me siga no twitter @gutocarvalho e acompanhe meus posts sobre Cloud Native e CI/CD.

Siga a CD Foundation e Cloud Native Foundation no twitter.

Revisor: Ricardo Pegoraro





Fala pessoa, tudo em paz?

Talvez você já tenha visto o Cloud Native Landscape, mas ainda tem dúvidas sobre ele.

Para que serve isso?

Esse landscape é um grande mapa de projetos que compõe esse universo Cloud Native, são centenas de projetos open source em constante expansão através de contribuições de suas comunidades.

O Landscape é uma grande vitrine de projetos. Essa vitrine te ajuda a encontrar soluções open source para seu projeto Cloud Native de forma simples e fácil.

Como está organizado?

O Landscape está separado em categorias e sub-categorias, sendo elas:

- App Definition And Development
  - Database
  - Streaming & Messaging
  - Application Definition & Image Build
  - Continuous Integration & Delivery


- Orchestration & Management
  - Scheduling & Orchestration
  - Coordination & Service Discovery
  - Remote Procedure Call
  - Service Proxy
  - API Gateway
  - Service Mesh

- Runtime
  - Cloud Native Storage
  - Container Runtime
  - Cloud Native Network

- Provisioning
  - Automation & Configuration
  - Container Registry
  - Security & Compliance
  - Key Management

- Special
  - Kubernetes Certified Service Provider
  - Kubernetes Training Partner

- Plataform
  - Certified Kubernetes Distribuition
  - Certified Kubernetes Hosted
  - Certified Kubernetes Installer

- Observabilty & Analysis
  - Monitoring
  - Logging
  - Tracing
  - Chaos Engineering

Como usar?

É simples, precisa de uma solução de storage, procure uma na seção de storage, precisa de um proxy, tem uma seção para isso, basta pesquisar, testar e encontrar a solução que se encaixa com seu projeto.

 Outros Landscapes

E ainda temos dois projetos separados que também tem seus próprios landscapes
  
  - Serverless Landscape
  - CD.Foundation Landscape

Bora para os sites?

Acesse o CNCF Landspace
Acesse o Serverless Landscape
Acesse o CD.Foundation Landscape

[s]
Guto

--

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

30 dicas especiais para Cloud Engineers.

O Básico

1. Configure corretamente nome e e-mail

Para que seus commits não sejam gravados com autor “root” e-mail “root@root” configure esses valores iniciais assim que instalar seu GIT.

$ git config —global user.name “Nome Sobrenome” $ git config —global user.email “email@domain.ext”

Pode acontecer de ter que mudar de e-mail dependendo do projeto, nesse caso rode isso dentro do diretório do seu projeto para sobrescrever as configurações globais

$ cd meu_projeto/ $ git config user.name “Nome Sobrenome” $ git config user.email “email@domain.ext”

2. Configure seu editor favorito globalmente

Eu gosto de usar o VIM

$ git config —global core.editor vim

3. Ative o autocorrect

O autocorrect vai te ajudar nos erros mais comuns, afinal quem nunca digitou git stats o bramch né?

$ git config —global help.autocorrect 10

olhe um exemplo quando digitamos BRAMCH ao invés de BRANCH

$ git bramch
WARNING: You called a Git command named 'bramch', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'branch'.
dev
prod
* main

olhe um exemplo quando digitamo STATS ao invés de STATUS

$ git stats
WARNING: You called a Git command named 'stats', which does not exist.
Continuing in 1.0 seconds, assuming that you meant 'status'.
On branch gh-pages
nothing to commit, working tree clean

É bastante útil não é?

O valor 10 declara 10x10 décimos de segundo, o mesmo que 1 segundo e por aí vai. Caso queira que corrija automaticamente sem aguardar, use o valor 1.

$ git config —global help.autocorrect 1

Dessa forma ele vai digitar o comando para você, veja mais detalhes no link abaixo

como desligar o autocorrect?

$ git config —global —unset help.autocorrect

4. Use uma versão atualizada do GIT

Normalmente o GIT que vem nas distribuições linux é bem antigo então é uma boa ideia atualizar se quer usar recursos mais recentes e versões com mais performance.

Se estiver no mac o Homebrew pode ajudar.

$ brew install git

Com isso você vai usar a última versão estável.

5. Crie aliases para agilizar seu trabalho

Atalhos para mais produtividade, o Git oferece aliases para que possamos economizar alguns caracteres, veja como usar

$ git config --global alias.co checkout
$ git co production
Switched to branch 'production'

outro exemplo

$ git config --global alias.st status
$ git st
On branch gh-pages
nothing to commit, working tree clean

Uma outra forma de criar aliases é editar seu gitconfig e setar manualmengte

$ vim ~/.gitconfig

Adicione uma sessão com essa

[alias]
    co = checkout
    st = status

Simples e rápido!

Junte seu time e defina os padrões que vão usar

Agora que seu GIT já está atualizado e configurado vamos definir algumas coisas.

6. Sente com seu time e formalize o padrão de versionamento que vão seguir

Combinar antes é sai mais barato do que arrumar depois, converse com seu time e defina:

  • Convenções comuns
  • Quais serão e como usar branchs de integração
  • Quais serão e como usar branchs de features
  • Quais serão e como usar demais branchs
  • Padrão de nome de branchs para integração
    • feature-xyz, hotfix-xyz, stage, test, prod
  • Padrão esperado para commit, forma, mensagens
  • Templates e forma de se fazer merge
  • Regras gerais do que se deve ou se deve não fazer

Eu sugiro que crie um repo git e coloque tudo isso em formato MD, nada melhor do que versionar suas regras :)

Boas práticas com branchs

7. Use e abuse de branchs

O recurso de branch é fantástico, você pode criar a partir de qualquer uma.

Dicas principais:

  • Evite gravar diretamente na main.
  • Sempre trabalhe em uma branch separada
  • Integre sua branch quando finalizar seu trabalho
  • Apague sua branch depois que tiver terminado

Exemplo

$ git branch -u main correcaocriacaovpc $ git checkout correcaocriacaovpc

Quando terminar seu ticket, apague a branch

$ git branch -D correcaocriacaovpc

8. Use branchs de integração

Quando estamos trabalhando com integração contínua o uso de branchs de integração é fundamental, precisamos integrar nosso código com o código de nossos colegas e rodar os testes na pipeline.

Geralmente temos uma branch de integração para desenvolvimento e depois vamos promovendo esse código para outras branchs que vão nos ajudar a fechar a release e publicar, tudo depende do git-flow que seu time acordou e está seguindo.

9. Não escreva direto na branch MAIN

Evitamos escrever direto na branch main pois geralmente é a última versão estável devidamente testada e validada por todos, é de fato a fonte da verdade, portanto, para colocar código lá devemos sempre passar por diversos testes em sua pipeline e revisões de seus colegas.

10. Mantenha sua feature-branch atualizada

Faça rebases regulares para garantir isso!

Exemplo de atualização da branch main localmente e depois rebase

$ git checkout main
$ git pull
$ git checkout feature-xyz  
$ git rebase main  

Exemplo de merge do código com a main

$ git checkout main
$ git pull
$ git merge feature-xyz

Hoje em dia eu quase não faço merge no braço, geralmente uso MR ou PR, depende da ferramenta que estamos usando.

11. De vez em quando recrie suas branchs de integração

Isso é legal de fazer para dar uma limpada na coisa toda e começar novamente.

$ git checkout main $ git branch -D devel $ git branch -u main devel

12. Limpe periodicamente branchs de feature

O ideal é sempre apagar suas branchs de feature ou de teste após finalizar um ticket.

Apesar de ser o ideal, nem sempre lembramos, então de vez em quando é bom olhar e apagar branchs que não estão sendo usadas.

Pode-se até definir um tempo de vida para branchs que não são fixas, e definindo isso podemos até criar uma automação para limpar o repo.

Boas práticas com commit

13. Corrija as mensagens do seu commit se errar

Caso perceba algum typo na sua mensagem de commit, use o amend para corrigir

$ git commit -v —amend

14. Faça commits pontuais e objetivos

Evite fazer um commit com dezenas de arquivos, em especial se esses arquivos trazem mais de uma mudança ou correção. Devemos evitar isso pois fica difícil rastrear, entender e revisar o que foi feito no commit.

Prefira fazer commits pequenos e pontuais de algo que está terminado, algo que funciona e que não traga muitas alterações de uma vez só.

15. Faça commits atômicos quando possível

Já sabemos que commitar poucas alterações é o melhor caminho, mas dá para ser ainda menor.

Os commits atômicos são aqueles que gravam apenas uma única mudança – ainda que envolva vários arquivos – em um único commit.

É claro que nem sempre dá para fazer, mas é uma prática excelente se conseguir fazer.

A ideia do commit atômico é gravar a menor e mais importante melhoria que voce fez no código, sendo grande suficiente para adicionar algum valor, contudo, pequena o suficiente para ser gerenciada com flexibilidade.

Se quiser trabalhar dessa forma tenha em mente duas coisas:

  • Trabalhe em uma coisa por vez
  • Faça alterações pequenas e pontuais

16. Faça commits regulares e frequentes

Não espere demais!

Algumas pessoas esperam demais até gravar alguma alteração, às vezes ficam ali melhorando algo que já está funcionando, buscando algum tipo de perfeição antes de gravar.

Deixa eu te dizer uma coisa, o git funciona melhor e te ajuda mais quando você grava com frequência ao invés de esperar muitoooo tempo para gravar sua mudança.

Ao gravar com frequência você vai rastrear inclusive como você foi melhorando aquele código ao longo do seu processo e histórico de desenvolvimento.

E lembre-se, o GIT só cuida do seu código depois que você grava, se você fechar o editor por acidente ou se o editor travar, seu código já era, contudo, se estiver commitando com frequência você evita isso.

17. Quebre seu commit em commits menores

As vezes a gente vai trabalhando e se empolga demais, e com isso acaba fazendo mais de uma alteração em um mesmo arquivo, e neste caso, tais alteraçoes que poderiam ser commitadas de forma separada. Se for esse o caso, o commando abaixo te permite escolher quais mudanças você deseja commitar em um determinado arquivo.

$ git add -p

Assim vamos conseguir commitar pequenas porções do arquivo por vez.

18. Não faça commit de algo que você não finalizou

Nunca, eu repito, nunca grave algo que não está funcionando ou que não está completo.

19. Teste seu código antes de gravar

Essa é uma das coisas mais básicas que vou falar hoje, mas tem que falar e tem que fazer.

Caso não saiba, gravar código quebrado é algo bastante incômodo, poderá irritar seus colegas, podendo em alguns casos chegar a ser considerado uma falta de respeito e falta de profissionalismo.

Verifique a sintaxe do seu código, rode um linter e execute o código para ver se o que fez está funcionando, seja uma feature, seja um bugfix, seja um hotfix, afinal, se o código estiver funcionando e se sua solução resolver o ticket, isso será o melhor dos mundos.

O git inclusive oferece um sistema de HOOKS que permite por exemplo, executar comandos de checagem antes de de gravar seu código, nesse caso estou falando do hook “pre-commit”, veja o link abaixo e leia sobre esse e outros hooks, é um recurso muito útil, acredite.

20. Escreva mensagens de commit claras

As mensagens precisam fazer sentido e ser úteis para todos do time.

20.1 Commitando em uma linha

A mensagem tem que fazer sentido, ser fácil de ler e ser suficiente para entender o que foi feito.

Exemplos

Podemos usar convenções para mostrar que fizemos uma correção

fix: corrige bug quando modulo vai crair a 2o VPC na AWS

ou uma refatoração

refact: refatora código que configura IAM para EKS na AWS

ou uma documentação

doc: adiciona docs para uso do modulo IAM/EKS

ou que inserimos testes

test: adiciona testes unitários no módulo

ou que criamos uma nova feature

feat: adiciona recurso para lidar com ALB no EC2/AWS

Entendendo a estrutura

É simples

feat: adiciona fature para recursos ALB no EC2/AWS #220412
^--^  ^-----------------------------------------^
|     |
|     +-> Sumário da sua mudança
|
+-------> Tipo: docs, feat, fix, refact, ou test.

Se você estiver usando um sistema de tickets junto, adicione o número do ticket na mensagem, sistemas como GitLab e GitHub já farão a associação para você entre a issue e o commit.

Evite colocar ponto final na mensagem, afinal é um título.

Vale lembrar que você deve evitar escrever mais de 50 caracteres ou vai quebrar a saída do “git log”.

De que modo escrever a mensagem?

Em alguns blogs vocês verão pessoas que defendam usar verbos no imperativo ou presente do indicativo, e faz sentido. Em ambos os casos a ideia é que o commit responda essa pergunta:

“Em caso de aplicar esse commit ele...”

Resposta

...altera código X ...corrige módulo Y ...refatora manifesto Z ...cria feature W para módulo X

Eu já gosto de usar particípio do passado, pois foi algo que já foi realizado e nem precisa fazer a perguntinha para ver como tem que escrever, neste caso você pode afirmar ao invés de perguntar, dessa forma:

“Nesse commit foi...”

Resposta

...alterado código X ...corrigido módulo Y ...refatorado manifesto Z ...criada a feature W para módulo X

Enfim, existem longas threads sobre isso na internet, quase uma guerra santa, contudo, IMHO isso vai depender de cada um, ou da forma como cada time decidiu trabalhar.

No final o importante é você versionar seu código e conseguir entender o que fez ali lendo a mensagem de commit :)

20.2 Usando o editor para algo mais detalhado

As vezes precisamos escrever um pouco mais, indo além do “one line commit”, especialmente se foi uma correção complexa, se tem alguma pegadinha, ou se for preciso explicar porque você fez aquilo daquela forma. No caso do trabalho e o dia-a-dia dos Cloud Engineers nem sempre é necessário, mas se for, veja como fazer.

Nesse caso, como é uma mensagem longa, não podemos fazer “one line commit”, temos que ir para o editor.

$ git commit

E escrever a mensagem

Assunto da mensagem com no máximo 50 caracteres, sem ponto final

Descrição em múltiplas linhas
sobre seu commit. Use até 72 caracteres

Outros parágrafos podem vir após inserir 
uma linha em branco
Aqui nao tem mais limite de caracteres

Podemos usar bullets também, ajuda a organizar a informação

- Enumerando
- Alterações
- Realizadas
- Por
- Este
- Commit

Se existe um ticket coloque 
o número dele na mensagem e os tickets relacionados

Esse commit resolve o problema do ticket #2222
E está relacionado com o ticket #3333 e #4444

É bem simples!

21. Não reescreva o histórico da branch principal

Se você já gravou o código na branch principal, e o código alterado já está disponível para outras pessoas verem, recomenda-se não alterar esse histórico.

Fazer rebase na MAIN ou qualquer que seja o nome da sua branch upstream, ou mesmo em uma branch de integração pode causar problemas para seus colegas e eles podem ter que lidar com conflitos ou ter que fazer stash e baixar toda a branch novamente. Fora que normalmente alterações nessas branchs geralmente acionam gatilhos em ferramentas de CICD, o que pode gerar um deploy com regressão.

Dito isso, muito cuidado com suas branchs, em especial a upstream e as branchs de integração.

Na sua branch de feature você faz o que quiser, use o rebase sem problema algum, mas só nela ok?

Boas práticas com merge

22. Faça squash antes de fazer um merge

Antes de fazer um merge verifique seu histórico de commit, veja se é possível melhorar o histórico, reduzir e juntar algumas coisas, as vezes 20 commits podem ser agrupados em 10, fica mais limpo, organizado e facilitará a revisão por seus pares.

$ git rebase -i HEAD~20 # apresenta os últimos 20 commits para fazer o squash

Faça o squash na sua branch de trabalho antes de mandar o PR/MR e altere apenas os seus commits ok?

23. Use e abuse de MRs e PRs no GitHub e GitLab

A vantagem de usar PR ou MR seja no GitLab ou GitHub é que você tem facilidades para fazer squash, resolver conflitos, enxergar o que mudou (diff), solicitar revisão de pares, receber comentários e então finalmente fazer o merge. São excelentes recursos e devemos usá-los pois facilitam nossa vida.

Outras coisas interessantes

24. Use nomes consistentes para seus remotes

Origin é um nome padrão, mas não é obrigatório tá?

$ git push origin main

Podemos mudar esse nome para dar mais contexto e ficar mais claro de qual remote estamos falando

$ git push gitlab main $ git push github main $ git push bitbucket main $ git push clienteX main

Colocar um contexto no nome do remote ajuda bastante, especialmente se tem vários remotes.

25. Prefira autenticação SSH ao invés de user/senha

Autenticação através de chaves é mais segura, tanto que algumas ferramentas como GitHub desabilitam push em outros métodos.

Criando uma chave ssh segura (ed2559)

Como criar um chave segura?

$ ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/nomedasua_chave -C “nome@domain.ext”

Quer saber por que usar o ed25519?

Basicamente pois é um algoritmo mais moderno que usa curvas elípiticas, mais performático comparado com outras alternativas.

Se quiser saber mais mergulhe nesse post!

Definindo o uso de chaves ssh para repos específicos

No meu caso eu trabalho com várias chaves ssh, uma para projetos pessoais, uma para projetos na empresa que trabalho e sempre crio chaves para projetos ou freelas que eu estou fazendo.

É sempre bom evitar usar a mesma chave para tudo.

Mas como organizar isso?

Simples edite o arquivo ~/.ssh/config e configure a chave para cada server

Host nativeltrail_gitlab
  Hostname gitlab.nativetrail.io
  User git
  IdentityFile ~/.ssh/id_ed2559_gitlab_nativetrail_key

Host client_x_gitlab
  Hostname gitlab.cliente-x.com
  User git
  IdentityFile ~/.ssh/id_ed2559_gitlab_clientex_key
  
Host gitlab
  Hostname gitlab.com
  User git
  IdentityFile ~/.ssh/id_ed2559_gitlab_key 

Host github
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_ed2559_github_key  

Pronto, diferentes chaves para diferentes servidores e serviços.

26. Use e abuse do .Gitignore

O Gitignore é um arquivo essencial em nosso repositório, é através dele que dizemos para o GIT ignorar alguns arquivos e não versioná-los.

O Github traz uma bela coleção de templates para isso, veja no link abaixo:

usando o gitignore local

neste caso crie na raiz do diretorio um arquivo com o nome .gitignore e insira o que deseja ignorar.

_site
_temp
_build
*.zip
*.tar.gz

e pronto, seu git vai ignorar esses padroes, saiba mais na documentação:

usando o gitignore global

Esse arquivo é global e todos os projetos vão ler ele, é bem útil para coisas comuns e para projetos que ainda não tem um .gitignore construído

Criando o arquivo

$ touch ~/caminho/para/seu/global/.gitignore

Ativando via CLI

$ git config —global core.excludesFile ~/caminho/para/seu/global/.gitignore

Caso prefira edite seu .gitconfig diretamente e insira a configuração

[core]
  excludesFile = ~/caminho/para/seu/global/.gitignore

No mac eu uso esse conteúdo

# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

# Files that might appear on external disks
.Spotlight-V100
.Trashes

# Vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets

# Local History for Visual Studio Code
.history/

# Built Visual Studio Code Extensions
*.vsix

27. Use tags para criar referências no seu histórico

Tags que identificam milestones

$ git tag milestone-id -m $ git push —tags

Tags que identificam um estado

$ git tag stable -m $ git push —tags

Tags que identificam versões

$ git tag v1.2.3 -m $ git push —tags

Existem várias formas de usar tags, seu uso facilita a identificação de um momento específico em seu histórico de desenvolvimento, tal como o fechamento de uma release, a conclusão de um milestones, a identifição e uma versão, o que possibilita que façamos clone do código naquele momento exato.

28. Se possível use versionamento semântico

Caso não conheça acessa o site https://semver.org

O versionamento semântico consiste basicamente no uso de três numeros que podem ser incrementados, como o exemplo abaixo:

2.3.5

MAJOR

O primeiro número é chamado de major, ele deve ser incrementando quando alguma mudança causa uma quebra de compatilidade de API

MINOR

O segundo número é chamado de minor, ele deve ser incrementado quando uma nova funcionalidade é adicionada, sem quebra de compatibilidade

PATCH

O terceiro número é chamado de patch, ele deve ser incrementado quando fazemos algum tipo de correção na versão minor

BUILD/RELEASE

Ao ler o semver.org você verá outras possibilidades de versionar, usando build number e release name, veja alguns exemplos:

1.0.0-alpha
1.0.0-beta
1.0.0-rc1
1.0.0-rc2
1.0.0+20130313144700
1.0.0-0.3.7

O versionamento semântico é bem flexível e fácil de usar, você vai ver.

Posso automatizar o incremento de versão?

Como as regras são claras fica fácil entender como incrementar a versões manualmente e podemos até mesmo automatizar isso em nossa pipeline.

Posso criar o meu próprio método?

Claro, cada time pode definir seu jeito de versionar, mas lembre-se criar um repo onde você explica isso para todo mundo, em formato MD. :)

29. Cuidado com Push usando FORCE

Quando você manda um

$ git push origin main —force

Você está sobrescrevendo tudo que tem no ORIGIN na branch MAIN.

Todo o cuidado é pouco, se for fazer avise a turma, peça permissão e faça um backup antes.

Quais problemas isso pode gerar?

Se alguém fez um push e você não atualizou sua branch local, os commits do coleginha serão perdidos.

Se alguém fez um clone e você mandou um force removendo várias coisas, no próximo pull o coleginha vai lidar com conflitos ou coisas piores, talvez tenha até que apagar o repo e baixar novamente.

Isso pode gerar algumas situações chatas com seu time, tome cuidado, use com cuidado.

30. Aprenda mais sobre o GIT e pratique

Aprender, entender e usar boas práticas vem com a experiência do dia a dia, quanto mais ler para conhecer seus recursos, quanto mais usar, mais precisará aprender, é assim que funciona.

Então vai lá e estuda!

Sucesso!

Refs

[s]
Guto

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Essa é outra daquelas perguntinhas marotas de entrevistas, bora entender isso direitinho para responder com segurança!

VCS?

VCS significa version control system, ou sistema de controle de versões.

O GIT é o mais famoso hoje, o qual faz parte do grupo dos distribuídos.

Mas qual a diferença entre sistemas centralizados e distribuídos?

VSC Centralizado

O sistema centralizado, como o nome diz tem um servidor ou serviço central e funciona na arquitetura cliente/servidor. Este servidor tem todas as versões do código.

Para trabalhar em um projeto você precisa instalar o cliente e fazer o download de todo o código e sempre vai depender do servidor para gravar suas modificações, se ele não estiver no ar você não consegue fazer seus commits, e isso te impede de trabalhar.

A dependência do serviço no ar para trabalhar por si só já é algo que pode incomodar, além disso, temos um problema maior ainda, uma vez que todo o código está no servidor, perdeu o servidor, perdeu o código e aí ninguém trabalha mesmo.

Em resumo, se o servidor estiver fora, ninguém faz nada.

Os VCS centralizados podem até ser mais simples de instalar, manter e usar, mas o risco de um ponto único de falha é muito grande para assumir hoje em dia.

Exemplos de sistemas centralizados:

  • SVN
  • CVS
  • Perforce

VCS Distribuído

No VCS distribuído todo mundo tem a cópia do software em sua máquina, pode trabalhar localmente e depois enviar e integrar seu código em um repositório intermediário usado para isso, no caso do GIT chamamos esse locais de remotes.

Como todo mundo tem o código, temos múltiplos backups e caso o repositório de alguém se corrompa, podemos facilmente pegar a cópia de outro desenvolvedor e seguir trabalhando.

Como temos uma cópia local, podemos trabalhar offline e depois enviar e integrar o código com dos nossos colegas, e saiba que trabalhar local é bem mais rápido.

A criação de branchs é rápida e objetiva pq é tudo local e não precisa contatar um servidor central toda a vez que for criar uma branch.

A única coisa que precisa ficar claro é a curva de aprendizado pode ser maior do que sistemas mais simples e centralizados, contudo, o poder, a flexibilidade, a segurança e a velocidade de trabalhar superam esse detalhe.

Exemplos de sistemas centralizados:

  • GIT
  • Mercurial
  • Bazaar

Amarrando as pontas

Hoje o GIT se tornou padrão do mercado, todo mundo usa, conhece e sabe trabalhar, contudo, não é incomum encontrar empresas usando Mercurial o segundo mais popular entre os distribuídos.

Espero que tenha te ajudado a entender a diferença :)

[s]
Guto

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

Se você está se inscrevendo para vagas de Cloud Engineer ou DevOps Engineer esse termo pode aparecer em sua entrevista, vamos entender de forma simples o que é.

É um arquitetura client-server bem conhecida e está organizada da seguinte forma:

  • Presentation Layer (GUI)
  • Application Layer (Business)
  • Data Layer (Persistence)

Fazendo uma APP seguindo esse modelo nos dias de hoje geraria algo como:

  • Frontend (HTML, JS, CSS)
  • Backend (Python, C)
  • Database (PostgreSQL, Mongo)

Atualmente seria um Backend desenvolvido com a estratégia API-FIRST, um Frontend leve e moderno usando algum framework JS consumindo as APIs e Endpoints do Backend que estará gravando os dados em sistemas SGBDS modernos, sendo estes relacionais e não relacionais de acordo com o tipo de dado e contexto a ser persistido.

Quais as vantagens?

  • Pode-se atualizar os componentes de forma separada e independente
  • Como os componentes são separados, o desenvolvimento é simplificado e independente, podendo inclusive ser feito por times distintos
  • Podemos trabalhar com objetivo de melhorar a escalabilidade em cada componente de forma independente, o que vai aumentar a resiliência e disponibilidade da aplicação
  • Teremos mais segurança já que o o frontend nao fala diretamente com o banco

Esse é o básico do básico sobre o assunto, mas suficiente para responder.

Refs

[s]
Guto

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]

A ideia aqui é falar sobre a diferença de Load Balancer (LB) na camada 4 e 7, perguntinha comum em entrevistas de emprego para quem está disputando uma vaga de Cloud Engineer ou Cloud Architect. Antes de entrar no assunto vamos relembrar algumas coisinhas básicas.

Relembrando do Modelo OSI?

É um modelo referência para comunicação entre sistemas computacionais composto por 7 camadas.

  • Application (HTTP, FTP, SSH, NTP, NFS, SNMP...)
  • Presentation (SSL, TLS...)
  • Session Layer (RCP, SOCKS, NetBios...)
  • Transport (TCP, UDP...)
  • Network ( IP, IPSEC, ICMP, IGMP, RIP...)
  • Data Link ( PPP, ARP, WIFI, Ethernet...)
  • Physical ( 1000BASE-TX, RJ45...)'

Só precisa lembrar que é um modelo conceitual e referencial, nunca foi implementado, quem virou realidade foi o TCP/IP que é uma versão mais simples e de alguma forma parecida com esse modelo.

Relembrando o Modelo TCP/IP

É um modelo mais enxuto e muito funcional.

  • Application (HTTP, HTTPS, SSH, SSL, TLS...)
  • Transport (TCP, UDP...)
  • Internet ( IP, ICMP, IGMP... )
  • Link ( ARP, NDP... )

Esse foi o modelo que se tornou o padrão, sendo o que é usado até hoje.

Qual a diferença entre Load Balancer na camada 4 ou 7?

Quando fazem essa pergunta estão falando do modelo OSI pq é a única que tem 7 camadas.

A camada 7 é a camada mais alta do modelo OSI, chamada de aplicação, nessa camada no caso do LB estamos falando do HTTP que é o que importa para LB geralmente.

A camada 4 é camada de transporte onde temos o TCP que o que importa quando estamos falando de LB geralmente.

Camada 4

O balanceamento nesta camada leve em conta as informações de endereçamento de cada pacote – dos primeiros que recebe – para tomar decisões de roteamento, contudo ele não lê ou inspeciona os dados do pacote.

Aqui estamos falando dos dados brutos, estamos falando dos pacotes de fato. Neste cenário o LB vai receber pacotes em uma porta TCP qualquer, por exemplo a 80 e repassar para outro IP na mesma porta ou em outra porta que for definida. O balanceador pode encaminhar pacotes para vários IPs diferentes de acordo com as regras estabelecidas pelo administrador.

Pode-se ainda definir configurações de estratégia de balanceamento como RR (round-robin), persistência de sessão, definir pesos, prioridades, tempo de timeout, nível máximo de tolerância a falhas e outras regras que a tecnologia escolhida oferecer e suportar.

O único tratamento – de fato – que ele vai fazer é um NAT que irá mudar quando necessário o ip de origem e o ip destino dos pacotes.

Camada 7

Já nesta camada o LB baseia todas as decisões de roteamento usando características e informações presentes nos pacotes, e falando especicamente de HTTP temos o cabeçalho HTTP, o conteúdo da mensagem, a url, o tipo de dados (imagem, texto, áudio, vídeo...) e os cookies.

Além destas informações, o administrador pode definir configurações de estratégia de balanceamento, persistência de sessão, definir pesos, prioridades, tempo de timeout, nível máximo de tolerância a falhas e outras regras que a tecnologia escolhida oferecer e suportar.

E não é só isso, o balanceamento na L7 pode ir além, usando características de reverse-proxys ele permite por exemplo, enviar requisições específicas para um determinado servidor, habilitar compressão de dados (GZIP) e criptografia na comunicação (TLS/SSL), coisas que não podem ser feitas em um LB do tipo L4.

Amarrando as pontas

Sabemos que o custo computacional do L7 é bem maior que o L4, contudo, hoje em dia isso é praticamente imperceptível para a maioria das aplicações e cenários. Só vamos começar a perceber o custo computacional com aplicaçoes de missão crítica ou em sites com acessos na casa dos centenas de milhares por segundo. Ainda assim, os benefícios são maiores IMHO.

Refs

[s]
Guto

Este post é do tipo #MindNotes, entenda aqui.

Se gostou manda um alo no twitter @gutocarvalho.


Gostou do conteúdo?

Você também me encontra nessas redes!

Mastodon

@gutocarvalho@bolha.us

PixelFed

@gutocarvalho@bolha.photos

Lemmy

@gutocarvalho@bolha.forum

WriteFreely

@gutocarvalho@bolha.blog @notamental@bolha.blog @poesias@bolha.blog @contos@bolha.blog

Bookwyrm

@gutocarvalho@bolha.review

Peertube

@gutocarvalho@bolha.tube

Friendica

@gutocarvalho@bolha.network

Quer saber mais sobre mim?

Visite meus sites!

E meus blogs:

Conhece o Coletivo Bolha?

Então vem conhecer o bolha.io ou bolhaverso!

Nós temos muito mais para compartilhar contigo!

Quer apoiar nosso trabalho? Você pode!

Te vejo no mastodon da bolha.us!

[s]