1

Curso: Arquitetura de Sistemas Avançado - (Material Curso Dio)

#Arquitetura de Sistemas
Anderson Froes
Anderson Froes
Professores: 
Jefferson Stachelski
Laureano Gilioli
Thiago Barradas

Link para Download do Artigo:
https://drive.google.com/file/d/1XjAdSctptXH9PV2p3mSxQe8lfKZ_qZi3/view?usp=sharing

Capitulo 1 - Conceitos de Integração de Sistemas e Mensageria
**Aprenda o que é, e como funciona Arquitetura em Mensageria (Objetivos da Aula)**
- O que é arquitetura em mensageria
- Comunicação assíncrona entre serviços
- Gerenciamento de erros

**Requisitos Básicos**
- Entendimento sobre RestAPI
- Conhecimento básico sobre message brokers

**O que é arquitetura em mensageria?**
- **Pros** - Desacoplamento, Fácil plug & play, Comunicação assíncrona, Simples escalabilidade, Broadcasting, Permite Event Source
- **Contras** - Single point of failure, Difícil monitoramento
**Comunicação Assíncrona entre Serviços**

**Modelo 1**
- Passo 1 = WebApp → Proxy HTTP → Serviço1 → Message Broker
- Passo 2 = Message Broker → Serviço2 → Message Broker
- Passo 3 = Message Broker → Serviço3

**Modelo 2**
- Passo 1 = Serviço1
- Passo 2 = Serviço2 e Serviço3 → (Serviço1)
- Passo 3 = Serviço4 e Serviço5 → (Serviço2) / Serviço6 e Serviço7 → (Serviço3)

**Gerenciando Erros em uma Arquitetura Assíncrona (Objetivos da Aula)**
**Gerenciamento de erros**
- Dead letter queue (Filas de re-tentativas)
- Monitoramento entre serviços
- Rastreamento de fluxo

**Inconsistência de dados**
- Passo 1 = WebApp → Proxy HTTP (Adicionar cartão de crédito) → Serviço de Carteira → Message Broker
- Passo 2 = WebApp → Proxy HTTP (Adquirir plano) → Serviço de Planos → Message Broker
- Passo 3 = Message Broker (Aquisição de plano) → Serviço de Cobrança → Banco de Dados
- Passo 4 = Message Broker (Aquisição de plano) → Serviço de Cobrança (Dead letter queue / Aquisição de plano)→ Banco de Dados

**Rastreamento de fluxo**
**Passos**
WebApp → Proxy HTTP → Serviço1 (log, logs, logs) → Message Broker → Serviço2 (logs, logs, logs) → Serviço3 (logs, logs, logs)


Capitulo 2 - Arquitetura de Dados não Estruturados e Business Intelligence
**Business Intelligence em Modelos de Dados (Objetivos da Aula)**
- Business Intelligence em modelos de Dados
- Data Warehouse
- BigData - Dados Não Estruturados
- Data Lake

**Requisitos Básicos**
- Conhecimentos de Bancos de Dados
- Conhecimentos de Lógica

**Business Intelligence em Modelos e Dados**
O BI é composto basicamente por:
- Ferramentas, Infraestrutura, Profissionais (corpo técnico), Dados.

**BI - Data**
- Dados da operação, Pesquisa de campo, Dados gerenciais, Indicadores de mercado

**BI - Solution**
- Infraestrutura, Gerenciamento dos dados, Analises, Compartilhamento, Ferramentas gerais.

**BI - Ferramentas**
- QlikView, Domo, Spotfire, Oracle, MicroStrategy, SAP BusinessObjects, Qlik Sense, Tableau, PowerBI, IBM Cognos Analytics, Sas.

**Aprenda sobre os conceitos de Data Warehouse**
**OLTP x OLAP**
- OLTP = On-Line Transaction Processing
- OLAP = On-Line Analytical Processing

**O que é Big Data e dados não estruturados**
**BigData - Dados Não Estruturados**
BigData é um termo que descreve o grande volume de dados, tanto estruturados quanto não-estruturados.

**NoSQL Databases (Dados Semi-Estruturados)**
- Apache HBASE, Cassandra, Redis, Riak, CouchDB, mongoDB (etc...)

**Dados Não Estruturados (Ferramentas)**
- Hadoop, Ceph, Apache Spark, Apache Storm, DataTorrent, Google BigQuery, Presto

**Exemplo prático MongoDB**
- **Site Oficial:**
https://www.mongodb.com/

- **Download Versão Windows:**
https://www.mongodb.com/try/download/community

- **Configuração Windows:**
**Passo 1:** Escolher opção: Run service as Network Service user
**Passo 2:** Meu Computador → Propriedades → Configurações Avançadas do Sistema → Avançado → Variáveis de Ambiente → Variáveis do Sistema → Path → Novo → (Colocar o direito .bin do Mongo).

**Comandos Usados no Terminal (MongoDB)**
- mongo → rodar o mongo
- show databases → mostrar os bancos de dados
- use + nome → criar banco de dados (use loja)
- inserir item → db.produtos.insert({ codigo: "01", descricao: "caneta" })
- selecionar item → db.produtos.find()
- inserir item → db.produtos.insert({ codigo: "02", descricao: "lapis", cor: "vermelha" })
- selecionar item → db.produtos.find()
- inserir item → db.produtos.insert({ codigo: "03", cor: "azul" })
- selecionar item → db.produtos.find()
- exit -> sair do banco de dados


Capitulo 3 - Fundamentos de Arquitetura de Aplicações em Nuvem
**Arquitetura em nuvem e sua evolução (Objetivos da Aula)**
- Cloud Computing
- Disponibilidade
- Serverless

**Requisitos Básicos**
- Entendimento básico sobre arquitetura de sistemas.

**Cloud Computing**
- Gerenciamento de hardware/software
- Provedores de servidor e armazenamento
- Pague o que consumir
- Iaas / Pass / Bass

**IaaS (Infrastructure as a Service)**
- Google Cloud, Amazon WebServices, Microsoft Azure

**PaaS (Plataform as a Service)**
- Google Cloud, Amazon WebServices, Microsoft Azure, Terraform, CloudFormation

**BaaS (Backend as a Service)**
- Mobile Backend as a Service (Firebase)

**Entenda sobre disponibilidade de aplicações**
**Disponibilidade**
- IaaS - Hardware e Internet
- PaaS - Auto Scale on the go
- BaaS - Não há Backend Service.
- Kubernets (K8S)
- Multiplos nodos
- Load Balancer

**Aprenda a executar serviços com Serverless**
**Serverless**
- Sem Servidor
- Sem serviço "rodando"
- Sem down time
(API Gateway, Amazon Kinesis, AWS Lambda, Amazon S3)


Capitulo 4 - Desenvolvimento e Operação de Software Integrado
**O que é DevOps? (Objetivos da Aula)**
- DevOps - Conceito e Práticas
- Continuous Integration
- Continuous Inspection

**Requisitos Básicos**
- Conhecimentos de infraestrutura
- Conhecimentos de testes
- Versionamento com Git
- Scripts (bash, power shell, etc)

**DevOps - Conceitos Básicos**
- Development, Quality Assurance (QA), IT Operations
- Integração das 3 áreas (DevOps)

"DevOps é um termo criado para definir o conjunto de práticas que integram e automatizam os processos entre as equipes de desenvolvimento, operações e de apoio (como QA) para a produção rápida e confiável de software".

"O conceito do DevOps baseia-se em criar uma cultura de colaboração entre as equipes que sempre trabalharam separadas. DevOps é uma mudança de mentalidade, uma cultura, um movimento, uma filosofia."

**Framework CALMS**
- Culture, Automation, Lean, Measurement, Sharing

**Culture**
- Todas ferramentas e automações são inúteis se não forem acompanhadas pela verdadeira disposição da área de desenvolvimento e operações em trabalhar juntos.
- Porque DevOps não resolve problemas de ferramentas. Resolve problemas humanos.

**Automation**
- Automação elimina o trabalho manual repetitivo, produz processos repetíveis e cria sistemas confiáveis. Automatizar gera velocidade na entrega e tornam os envolvidos mais produtivos.
- Normalmente, compilação, teste, implementação e provisionamento automatizados são o ponto de partida típico para equipes que ainda não têm isso implantado.

**Lean**
- Precisamos focar nas entregas de valor ao cliente. Precisamos ser objetivos e enxutos. Precisamos conhecer as nossas limitações e os gargalos do processo. Precisamos ser Lean.
- A mentalidade DevOps vê oportunidades de melhoria contínua em toda parte. identificando as limitações, podemos otimizar o fluxo, entregando mais velocidade e maior eficiência.

**Measurement**
- DevOps é cíclico e infinito. Mensurar e obter métricas é o ponto de partida para novas melhorias, seja para o processo de desenvolvimento, o software produzido ou as regras de negócio.
- Além de gerar conhecimento, métricas criam previsibilidade sobre possíveis incidentes que possam vir a surgir. Assim, temos insumos suficientes para analisar falhas e gerar melhorias constantemente.

**Sharing**
- O compartilhamento de informações, além de ser saudável, auxilia na descentralização de conhecimento em pessoas dos times, evitando que os processos se tornem dependentes.
- Compartilhar conhecimento ajuda na criação de times genéricos, com conhecimentos básicos em diversos assuntos do negócio e tecnologias. Assim, o time se torna autossustentável.

**Os Três Caminhos**
- Flow, FeedBack, Learning

**Flow**
- A otimização do fluxo visa eliminar desperdícios, gargalos no processo, transferência de responsabilidades e tempos de espera. Esse caminho é trilhado entre a demanda e a entrega em produção.
- A chave para este caminho é a aplicação de metodologias ágeis e a automatização dos processos do desenvolvimento à release, como a integração contínua e/ou entrega contínua.

**FeedBack**
- Ciclos rápidos de feedbacks visam resolver problemas o quanto antes, testando tudo, alertando em qualquer falha, considerando todas as métricas coletadas no ambiente produtivo sobre o valor entregado.
- O monitoramento é a chave, ajudando a gerar informações relevantes constantemente. Com feedbacks rápidos, o negócio consegue falhar rápido, e logo retomar o rumo, caso necessário.

**Learning**
- O aprendizado contínuo visa gerar conhecimento através da experimentação. Hipóteses são melhores do que uma certeza imediata. Este caminho é fruto do processo científico e produz segurança psicológica.
- A chave é o trabalho dinâmico, com times realizando experimentos em seu trabalho diário para gerar novas melhorias. Elimine a cultura da culpa e a aumente a colaboração e o compartilhamento de conhecimento.

**Entregando Software**
**Planejamento**
- Microsoft Teams, Draw.io, Balsamiq, Roadmunk, Confluence, Jira (etc...)

**Codificação**
- VisualStudio, GitHub, Sublime Text, Cmder, Git, VsCode, Notepad++ (etc...)

**Construção**
- ContainerD, Docker, NuGet, Npm, Cri-o, .Net Cli, MSBuild (etc...)

**Testes**
- Unit.net, Loader.io, JMeter, Selenium, Runscope, Postman, Sonarqube, Code Climate, Codacy (etc...)

**Release**
- Planejar, Codificar, Construir, Testar, Disponibilizar.

**Deploy**
- Azure Pipelines, CricleCi, AppVeyor, GitLab CI, Travis CI, Jenkins (etc...)

**Operação**
- Kubernetes, Rancher, Microsoft Azure, Puppet, Terraform, CHEF, OpenShift, AWS (etc...)

**Monitorar**
- Datadog, Prometheus, AppMetrics, Rollbar, Zabbix, New Relic, Pushover, Seq, Monitis (etc...)

**Continuous Integration**
**CI/CD (Continuous Integrarion e Continunous Deployment)**
**Principais Ferramentas**
- Circleci, Azure Pipelines, Travis CI, AppVeyor. GitLab CI, Jenkins

**Projeto de Exemplo**
- Continuous Integration
  - CircleCI (.circleci/config.yml)
  - Azure Pipelines (azure-pipelines.yml)
  - AppVeyor (appveyor.yml)

**Link GitHub**
https://github.com/ThiagoBarradas/jsonmasking

**Continuous Inspection**
**Code Quality Analysis Continuous Inspection**
**Principais Ferramentas**
- Sonarqube, Code Climate, Codacy

**Para que servem essas ferramentas?**
Servem para resolver os seguintes itens:

- Complexidade Ciclomática, Código Duplicado, Vulnerabilidades/Code Smell, padronização e Estilo, Débito Técnico, Cobertura de Testes, Métricas, Validando Pull-Requests
3
45

Comentários (3)

0
Anderson Froes

Anderson Froes

04/03/2021 13:14

Obrigado Thiago Guedes e David Martín!!

Tenho muitos artigos aqui na Plataforma.

Segue o link:

https://web.digitalinnovation.one/articles/inter-java-developer-artigos-material-bootcamp?back=%2Farticles&page=1&order=oldest

0
David Martín

David Martín

03/03/2021 15:36

Muito útil. Agradeço o empenho e gentileza em compartilhar.

0
Thiago Guedes

Thiago Guedes

03/03/2021 15:12

Sucinto, bem-pontuado e direito a ponto. Parabéns pelo artigo, Anderson.
Podemos esperar mais artigos como estes? :o

Um ser humano buscando conhecimento e sucesso em sua vida profissional

Brasil