Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Prof. MSc. Tarcísio Peres
UNIDADE III
Desenvolvimento de
Software para Internet
 Introdução ao Entity Framework.
 CRUD com Entity Framework.
 Migrations e gerenciamento de banco de dados.
 Deploy de aplicações ASP.NET.
 Orquestração de Contêineres com Kubernetes.
 CI/CD para ASP.NET com ferramentas populares.
 Comunicação entre microsserviços em ASP.NET.
 Serverless com ASP.NET
Conteúdo da unidade III 
 O Entity Framework é um ORM (Object-Relational Mapper) desenvolvido pela Microsoft, 
projetado para permitir que desenvolvedores trabalhem com dados usando objetos .NET, 
sem ter que lidar diretamente com o banco de dados ou a linguagem SQL. 
 A integração do Entity Framework com o ASP.NET Core proporciona uma série de 
vantagens, facilitando o processo de desenvolvimento e permitindo que os desenvolvedores 
se concentrem mais na lógica de negócios da aplicação, em vez de preocupações de baixo 
nível relacionadas à persistência de dados. 
 Essa abordagem não só aumenta a produtividade, como também ajuda a reduzir a 
probabilidade de erros relacionados à manipulação de dados.
 Uma das principais características do Entity Framework é sua 
capacidade de mapear classes .NET a tabelas de 
banco de dados. 
 Em vez de escrever consultas SQL complexas, os 
desenvolvedores podem utilizar LINQ (Language Integrated 
Query) para interagir com o banco de dados de uma maneira 
mais intuitiva e segura. 
Entity Framework
 Imagine que temos uma aplicação que utiliza o ASP.NET Core para gerenciar uma loja de 
livros. Nesse cenário, possuímos uma tabela de banco de dados chamada Books, que 
contém colunas para Id, Title, Author, e PublishedYear. Suponha que queremos selecionar 
todos os livros de um determinado autor que foram publicados após o ano de 2000. 
 Essa abordagem requer que o desenvolvedor saiba a sintaxe SQL específica, além de ser 
mais suscetível a erros como typos nos nomes das colunas ou na lógica da consulta, sem 
contar a injeção de SQL. 
LINQ
Fonte: autoria própria.
 A modelagem de domínio e a configuração do DbContext desempenham papéis 
fundamentais na forma como os dados são estruturados e manipulados dentro 
de um projeto. 
 Trabalham em conjunto para fornecer uma abstração robusta e eficiente do banco de dados, 
facilitando tanto o desenvolvimento quanto a manutenção do código. 
 A modelagem de domínio envolve a criação de classes e objetos que refletem as entidades 
do negócio e suas relações dentro da aplicação. 
 Essas entidades, conhecidas como modelos de domínio, são a representação em alto nível 
das tabelas e relações que existirão no banco de dados. 
 Ao definir esses modelos, o desenvolvedor estabelece uma 
base sólida para a lógica de negócios da aplicação, garantindo 
que ela esteja bem alinhada com os requisitos e regras do 
domínio em questão. 
 Os modelos de domínio são classes que você cria para 
representar as entidades do seu negócio. 
Modelagem de domínio
 É um componente do Entity Framework Core, que facilita a interação entre a aplicação e o 
banco de dados. 
 O DbContext atua como um canal de comunicação, permitindo ao desenvolvedor realizar 
operações de CRUD (Create, Read, Update, Delete) sobre as entidades mapeadas sem a 
necessidade de escrever consultas SQL complexas. 
 É responsável por rastrear as alterações feitas nas instâncias dos objetos e sincronizá-las 
com o banco de dados, o que contribui significativamente para a eficiência do 
desenvolvimento e a integridade dos dados. 
 Você cria uma classe derivada de DbContext para definir quais 
modelos de domínio estão incluídos no contexto e para 
configurar o acesso ao banco de dados. 
 A classe DbContext fornece métodos como SaveChanges(), 
que você usa para persistir as alterações feitas nas instâncias 
dos seus modelos de domínio no banco de dados. 
 Ela também expõe propriedades do tipo DbSet, em que T 
é um modelo de domínio. 
DbContext
 Ao empregar o EF Core, os desenvolvedores conseguem mapear classes do C# para tabelas 
de banco de dados e os objetos dessas classes para as linhas dessas tabelas. 
 Isso permite que as operações CRUD sejam realizadas de maneira intuitiva e direta, como se 
estivessem manipulando objetos na memória, sem a necessidade de interagir diretamente 
com o banco de dados. 
 Para a operação de criação (Create), por exemplo, um objeto é instanciado e seus atributos 
são preenchidos. 
 Esse objeto é então adicionado ao contexto do EF Core e, 
com uma simples chamada ao método SaveChanges(), o EF 
Core gera e executa o SQL necessário para inserir um novo 
registro na tabela correspondente. 
 Essa abordagem simplifica o processo de adição de novos 
dados ao banco de dados e mantém o código limpo e fácil 
de entender.
CRUD
 Na operação de leitura (Read), o EF Core oferece métodos como Find() e Where(), que 
permitem aos desenvolvedores recuperar dados de forma eficiente, filtrando registros com 
base em condições específicas ou recuperando entidades por meio de seus identificadores 
únicos. 
 Além disso, o carregamento lazy (preguiçoso) e o carregamento eager (antecipado) de 
relações entre entidades podem ser facilmente configurados, otimizando o desempenho das 
consultas e o consumo de recursos. 
 Quando se trata de atualizar dados (Update), o EF Core rastreia as alterações feitas nos 
objetos desde que foram carregados do banco de dados. 
 Ao chamar SaveChanges(), ele gera o SQL necessário para 
atualizar apenas os campos que foram alterados.
 Por fim, para excluir dados (Delete), basta remover o objeto do 
contexto e chamar SaveChanges(). O EF Core cuida de gerar 
o SQL de exclusão apropriado. Este processo abstrai 
completamente a complexidade envolvida na execução de 
operações de exclusão, permitindo aos desenvolvedores focar 
na lógica de negócios.
CRUD
 Essa modelagem é crucial para refletir a integridade referencial e as conexões entre as 
diferentes partes dos dados manipulados pela aplicação. 
 A implementação de relacionamentos “um para um”, por exemplo, é frequentemente utilizada 
para representar uma relação estreitamente vinculada entre duas entidades, na qual uma 
entidade pode existir sem a outra, mas não sem uma referência a ela. 
 Já os relacionamentos “um para muitos” são mais comuns e refletem situações em que uma 
única entidade está relacionada a múltiplas instâncias de outra entidade, como um autor que 
possui vários livros publicados.
 Por último, os relacionamentos “muitos para muitos” capturam 
a complexidade de cenários em que várias instâncias de uma 
entidade estão relacionadas a várias instâncias de outra, 
requerendo, em muitos casos, uma tabela associativa para 
gerenciar essas conexões.
EF - Relacionamentos entre entidades
 Permite que desenvolvedores controlem e versionem as alterações feitas no modelo de 
dados de uma aplicação. 
 Essa abordagem elimina a necessidade de manualmente ajustar esquemas de banco de 
dados ou de utilizar scripts SQL complexos para atualizações. 
 Com o Migrations, alterações estruturais, como a adição de uma nova tabela ou coluna, são 
implementadas através de classes C# que o Entity Framework automaticamente gera. 
 Esse processo documenta as alterações de forma clara e acessível e permite que elas sejam 
aplicadas de forma consistente em diferentes ambientes de desenvolvimento, teste e 
produção, reduzindo significativamente o risco de erros. 
 O gerenciamento de banco de dados com EF é uma 
abordagem code-first: a estrutura do banco de dados é 
derivada das classes do modelo de domínio da aplicação. 
 O EF suporta uma ampla gama de provedores de banco de 
dados, oferecendo uma camada de abstração que permite aos 
desenvolvedores trabalhar de forma agnóstica em relação ao 
tipo de banco de dados utilizado. 
Migrations
 O Entity Framework oferece diversas funcionalidades que, se bem utilizadas, podem 
contribuir para amelhoria da performance. 
 O uso de consultas LINQ eficientes, a seleção cuidadosa de dados com o uso de .Select 
para evitar o carregamento desnecessário de informações e a aplicação de índices no banco 
de dados para acelerar a busca de dados. 
 O caching é uma técnica vital para reduzir o tempo de resposta de aplicações web, 
diminuindo a necessidade de operações dispendiosas. 
 No contexto do ASP.NET Core, existem diversas abordagens de caching, incluindo o caching 
em memória, caching distribuído e caching de resposta. 
 Para implementar essas estratégias de forma eficaz, os 
desenvolvedores devem adotar práticas de codificação que 
priorizem a eficiência e a escalabilidade. Isso inclui a adoção 
de padrões de design, como o Repository e Unit of Work, que 
além de promoverem uma arquitetura de aplicação mais limpa 
e modular, facilitam a implementação de técnicas de 
otimização e caching. 
Desempenho do EF
Qual é uma das principais vantagens do Entity Framework ao trabalhar com bancos de dados 
em aplicações ASP.NET Core? 
a) Redução da necessidade de migrações de banco de dados.
b) Integração direta com APIs RESTful.
c) Abstração da complexidade das operações de banco de dados.
d) Suporte exclusivo ao SQL Server.
e) Requer menos código para configurar conexões de banco de dados.
Interatividade
Qual é uma das principais vantagens do Entity Framework ao trabalhar com bancos de dados 
em aplicações ASP.NET Core? 
a) Redução da necessidade de migrações de banco de dados.
b) Integração direta com APIs RESTful.
c) Abstração da complexidade das operações de banco de dados.
d) Suporte exclusivo ao SQL Server.
e) Requer menos código para configurar conexões de banco de dados.
Resposta
 Quando o desenvolvimento chega à fase de produção, o deploy da aplicação se torna um 
passo crítico. 
 Esse processo envolve várias etapas cuidadosamente planejadas para garantir que a 
aplicação seja transferida do ambiente de desenvolvimento para o ambiente de produção de 
maneira segura, eficiente e com o mínimo de interrupções possível. 
 Inicialmente, é crucial selecionar uma estratégia de deploy que se alinhe com os objetivos da 
aplicação, o orçamento disponível e os recursos de infraestrutura. 
 Uma das abordagens mais comuns é o deploy em servidores próprios ou em um provedor de 
serviços em nuvem. 
 Serviços como Azure, AWS e Google Cloud oferecem 
integrações nativas com o ASP.NET Core. 
 Esses provedores de nuvem automatizam várias tarefas de 
deploy e oferecem serviços adicionais como balanceamento 
de carga, auto-scaling e gerenciamento de identidades, que 
podem ser integrados à aplicação para melhorar a 
disponibilidade e a segurança.
Deploy 
 Antes de iniciar o deploy, é essencial realizar uma série de testes, como testes de unidade, 
testes de integração e testes de carga, para garantir que a aplicação esteja livre de bugs e 
pronta para ser lançada. 
 Uma vez que a aplicação passou por esses testes, o próximo passo é preparar o ambiente 
de produção, o que pode incluir a configuração de servidores web, bancos de dados, e 
variáveis de ambiente específicas necessárias para o funcionamento da aplicação.
 A automatização do processo de deploy é outra consideração importante. Ferramentas de 
integração contínua/entrega contínua (CI/CD) como Jenkins, Azure DevOps e GitHub Actions 
permitem automatizar o processo de build e deploy da aplicação. 
 Durante o deploy, a comunicação e a colaboração entre as 
equipes de desenvolvimento, operações e suporte são 
fundamentais para resolver rapidamente qualquer problema 
que possa surgir. 
 A utilização de logs de aplicação detalhados e ferramentas de 
monitoramento em tempo real pode ajudar a identificar e 
corrigir problemas de forma proativa, garantindo que a 
experiência do usuário final seja a mais suave possível.
Deploy
 É uma tecnologia revolucionária, desempenhando um papel crucial na forma como os 
desenvolvedores constroem, compartilham e executam aplicações de forma isolada e 
eficiente através de contêineres. 
 Ele é uma plataforma de conteinerização, permite aos desenvolvedores empacotar 
aplicações junto às suas dependências e bibliotecas em contêineres. 
 Esses contêineres, por sua vez, podem ser executados em qualquer sistema que tenha o 
Docker instalado, independente do ambiente de desenvolvimento ou de produção. 
 Essa abordagem garante que a aplicação se comporte da mesma maneira em todos os 
lugares, eliminando o famoso problema "funciona no meu computador". 
 Isso é particularmente benéfico no desenvolvimento de 
aplicações com ASP.NET Core, pois facilita a gestão de 
dependências e a configuração necessária para 
executar a aplicação.
Docker
 Ao utilizar contêineres, os desenvolvedores podem isolar aplicações e seus componentes, 
garantindo que cada serviço execute de forma independente. 
 Esse isolamento contribui para a segurança, pois as aplicações não interferem umas nas 
outras, e facilita a escalabilidade, permitindo que os serviços sejam dimensionados 
individualmente conforme a necessidade. 
 Adicionalmente, o Docker simplifica o processo de implantação e integração contínua. Com 
ferramentas de orquestração de contêineres, como o Kubernetes, os desenvolvedores 
podem automatizar o deployment, o escalonamento e a gestão de aplicações 
conteinerizadas, tornando o processo de entrega de software mais rápido e confiável. 
 Essa capacidade é especialmente valiosa em ambientes de 
produção complexos, onde a eficiência operacional e a rapidez 
na entrega de novas funcionalidades são críticas.
 Existe uma vasta biblioteca de imagens de contêineres 
disponíveis no Docker Hub, permitindo aos desenvolvedores 
encontrar e compartilhar bases para suas aplicações e 
serviços.
Docker
 Encapsulam a aplicação e seu ambiente de execução. Isso significa que uma aplicação 
ASP.NET Core, quando empacotada em um contêiner, pode ser executada 
consistentemente em qualquer infraestrutura que suporte a tecnologia de conteinerização, 
como diferentes ambientes de nuvem (cloud), sistemas operacionais e plataformas 
de hardware. 
 Do aspecto da escalabilidade, os contêineres proporcionam uma maneira eficiente de 
dimensionar aplicações. 
 Como cada contêiner opera de forma independente, é possível orquestrar múltiplas 
instâncias de contêineres para gerenciar a carga, utilizando ferramentas como Kubernetes.
 Isso é particularmente relevante para aplicações ASP.NET 
Core que precisam atender a um alto volume de solicitações 
de forma eficaz, permitindo ajustes dinâmicos da capacidade 
de serviço em resposta às demandas flutuantes. 
Contêineres
 São leves em comparação com máquinas virtuais tradicionais, pois compartilham o mesmo 
sistema operacional subjacente e iniciam mais rapidamente. 
 Essa característica torna o uso de contêineres com ASP.NET Core ideal para ambientes de 
desenvolvimento e produção, nos quais o tempo de implantação e a utilização de recursos 
são críticos. 
 O isolamento proporcionado pelos contêineres melhora a segurança, uma vez que cada 
aplicação é executada em seu próprio ambiente confinado, reduzindo o risco de conflitos e 
vulnerabilidades compartilhadas.
 A adoção de ASP.NET Core em contêineres também incentiva 
práticas de desenvolvimento modernas, como a integração e 
entrega contínuas (CI/CD), facilitando o teste automatizado, a 
integração e a implantação de aplicações.
 Além disso, promove a filosofia de microsserviços, permitindo 
que os desenvolvedores construam aplicações modulares e 
facilmente gerenciáveis, cada uma rodando em seu próprio 
contêiner.
Contêineres
 É uma plataforma de orquestração de contêineres de código aberto que automatiza a 
implantação, a escalabilidade e a gestão de aplicações conteinerizadas. 
 Também conhecido como k8s, foi originalmente desenvolvido pelo Google, com base em sua 
experiência de gerenciamento de bilhõesde contêineres por semana, e agora é mantido pela 
Cloud Native Computing Foundation. 
 Permite que os desenvolvedores empacotem suas aplicações em contêineres, que são então 
gerenciados de maneira eficiente pelo Kubernetes, facilitando implantações consistentes e 
sem interrupções, independentemente do ambiente de execução. 
 Tem se estabelecido como a plataforma líder de orquestração 
de contêineres no mercado, moldando a forma como as 
aplicações são desenvolvidas, implantadas e gerenciadas em 
ambientes de nuvem, híbridos e locais.
 Esse sistema facilita a automação e a gestão de aplicações 
conteinerizadas e promove práticas de desenvolvimento ágil, 
escalabilidade e resiliência, características cada vez mais 
exigidas no atual panorama tecnológico.
Kubernetes
 A adoção do Kubernetes tem sido vasta e variada, abrangendo desde startups até 
grandes corporações. 
 Empresas de tecnologia, serviços financeiros, telecomunicações e muitos outros setores 
reconheceram os benefícios de usar o Kubernetes para gerenciar suas cargas de 
trabalho conteinerizadas. 
 Grandes players do mercado, como Google, Microsoft, Amazon e IBM, oferecem serviços 
gerenciados de Kubernetes, o que simplifica ainda mais sua adoção e gestão, permitindo às 
empresas concentrar-se no desenvolvimento de aplicações sem se preocupar com a 
complexidade da infraestrutura. 
 A plataforma suporta a estratégia de DevOps ao melhorar a 
colaboração entre equipes de desenvolvimento e operações, 
automatizando o pipeline de entrega de software.
 Sua implementação pode ser complexa, exigindo um conjunto 
de habilidades específicas. Há uma curva de aprendizado 
associada ao entendimento de seus conceitos e ao 
gerenciamento eficaz de clusters.
Kubernetes
 A descoberta de serviços no Kubernetes permite que contêineres e serviços se encontrem e 
se comuniquem uns com os outros de forma dinâmica, usando nomes DNS ou endereços IP.
 Cada serviço no Kubernetes recebe um nome DNS único, o qual os outros serviços podem 
usar para descobrir e se comunicar entre si. 
 Simplifica a configuração da comunicação entre microsserviços, pois os programadores não 
precisam codificar IPs fixos ou gerenciar manualmente as mudanças nessas configurações.
 À medida que serviços são escalados para cima ou para baixo, o Kubernetes atualiza 
automaticamente as informações de descoberta para refletir as mudanças, garantindo que a 
comunicação entre serviços permaneça ininterrupta.
 o Kubernetes monitora constantemente o estado de saúde dos 
contêineres e pode automaticamente reiniciar contêineres que 
falham, não respondem ou não atendem a um estado de 
saúde especificado. 
 Isso é feito através de sondas de liveness e readiness, que 
verificam a saúde e a disponibilidade dos contêineres. 
Kubernetes
 As sondas de liveness determinam se um contêiner está funcionando corretamente, 
enquanto as de readiness verificam se o contêiner está pronto para aceitar solicitações. 
 Esses mecanismos de autorreparo aumentam significativamente a resiliência e a 
confiabilidade da aplicação, assegurando que os serviços permaneçam disponíveis.
 O Kubernetes simplifica a implementação de novas versões de aplicações através do 
gerenciamento automatizado de rollouts e rollbacks. 
 Com o Deployment, uma abstração do Kubernetes para gerenciar aplicações, é possível 
atualizar a versão de uma aplicação de forma controlada com estratégias de atualização, 
como atualizações em rolling, que gradualmente substituem instâncias antigas por novas, 
minimizando o tempo de inatividade. 
 Se uma nova versão falhar ou não funcionar como esperado, o 
Kubernetes pode automaticamente reverter para a versão 
anterior, garantindo a estabilidade contínua da aplicação. 
Kubernetes
Qual é uma vantagem do uso de contêineres em comparação com máquinas 
virtuais tradicionais? 
a) Contêineres requerem menos código de configuração.
b) Contêineres podem ser executados sem sistema operacional.
c) Contêineres compartilham o mesmo sistema operacional subjacente, iniciando mais 
rapidamente.
d) Contêineres não necessitam de orquestração.
e) Contêineres têm melhor suporte a linguagens de programação antigas.
Interatividade
Qual é uma vantagem do uso de contêineres em comparação com máquinas 
virtuais tradicionais? 
a) Contêineres requerem menos código de configuração.
b) Contêineres podem ser executados sem sistema operacional.
c) Contêineres compartilham o mesmo sistema operacional subjacente, iniciando mais 
rapidamente.
d) Contêineres não necessitam de orquestração.
e) Contêineres têm melhor suporte a linguagens de programação antigas.
Resposta
 Emergiu como uma abordagem revolucionária, realinhando a maneira pela qual as 
aplicações são construídas e implantadas. 
 Essa metodologia enfatiza a divisão de uma aplicação em um conjunto de serviços menores, 
cada um operando de forma independente e comunicando-se entre si por meio de 
mecanismos leves, usualmente APIs HTTP. 
 O coração da arquitetura de microsserviços reside na ideia de decomposição funcional, na 
qual as funções de negócios são isoladas em serviços distintos. 
 Isso contrasta diretamente com a abordagem monolítica tradicional, em que as 
funcionalidades são entrelaçadas dentro de uma única base de código. 
 No ASP.NET Core, essa decomposição permite que os 
desenvolvedores gerenciem, desenvolvam e implantem cada 
microsserviço independentemente, facilitando a manutenção e 
a atualização do sistema. 
 Cada microsserviço é projetado para realizar uma única 
função de negócio ou um conjunto de funções relacionadas, 
operando sob um modelo de domínio específico. 
Arquitetura de microsserviços
 A especialização não apenas simplifica o desenvolvimento e a depuração, mas também 
promove uma melhor organização do código e da lógica de negócios. 
 Os microsserviços podem ser desenvolvidos utilizando diferentes tecnologias e frameworks, 
desde que consigam se comunicar uns com os outros por meio de interfaces bem definidas.
 Isso oferece aos desenvolvedores a liberdade de escolher as tecnologias mais adequadas 
para cada serviço específico, potencializando a inovação e a eficiência. 
 Na prática, a adoção de microsserviços com ASP.NET Core exige uma abordagem 
cuidadosa para a gestão de dependências, a configuração de serviços, a comunicação entre 
serviços e a persistência de dados. 
 Cada microsserviço deve ser capaz de operar de forma 
autônoma, o que implica a necessidade de ter sua própria 
base de dados e mecanismos de comunicação seguros 
e eficientes. 
 Isso é fundamental para garantir a independência operacional
e a escalabilidade do sistema.
Arquitetura de microsserviços
 Um dos maiores benefícios da arquitetura de microsserviços é a sua capacidade de facilitar a 
escalabilidade e a resiliência do sistema. 
 Os serviços podem ser escalados de forma independente, permitindo que os recursos sejam 
alocados de maneira mais eficaz, de acordo com a demanda por funcionalidades específicas.
 Além disso, a falha em um serviço isolado tem menos probabilidade de afetar o sistema 
como um todo, melhorando significativamente a resiliência e a disponibilidade da aplicação. 
 A transição para microsserviços traz desafios significativos: a 
complexidade de gerenciar múltiplos serviços, a necessidade 
de uma infraestrutura robusta de monitoramento e log, e a 
dificuldade de manter a consistência e a integridade dos dados 
através dos serviços. 
Arquitetura de microsserviços
 A integração contínua (CI) e a entrega contínua (CD) representam práticas fundamentais no 
desenvolvimento moderno de software, relevantes no contexto de metodologias ágeis. 
 Essas práticas são projetadas para melhorar a qualidade do software, acelerar o tempo de 
entrega e fomentar uma cultura de feedback contínuo, permitindo que as equipes de 
desenvolvimento sejam mais eficientes e produtivas. 
 Integraçãocontínua (CI) é o processo de automatizar a integração de código novo e 
modificado em um repositório compartilhado várias vezes ao dia. 
 Essa prática visa detectar e corrigir erros precocemente, melhorar a qualidade do software e 
reduzir o tempo para lançamento. 
 Uma vez que o código é integrado, ele é automaticamente 
testado. 
 Esse ciclo rápido de feedback permite que as equipes 
identifiquem e corrijam problemas rapidamente, garantindo 
que o software permaneça em um estado sempre pronto para 
ser lançado.
Integração contínua
 Estende a integração contínua ao automatizar a entrega do código aos ambientes de teste 
e/ou produção. 
 Com a entrega contínua (CD), cada alteração que passa por todos os estágios do pipeline de 
CI é automaticamente preparada para ser lançada em produção, permitindo que as equipes 
de desenvolvimento lancem novas funcionalidades, correções e atualizações rapidamente e 
de forma confiável. 
 Um pipeline refere-se a uma série de etapas automatizadas que o código precisa passar 
desde o seu desenvolvimento inicial até estar pronto para ser lançado em produção. 
 O pipeline de CI/CD pode ser visualizado como uma cadeia de 
montagem para software, na qual o código-fonte é a matéria-
prima que passa por várias "estações" ou etapas, cada uma 
destinada a validar uma diferente faceta do software, como 
compilação, testes, análise de qualidade e segurança, até que 
esteja pronto para ser entregue ao usuário final ou sistema 
de produção. 
Entrega contínua
 Integração Contínua (CI)
CI/CD - Exemplo
Fonte: autoria própria.
Etapa 1: Checkout do Código - O pipeline é iniciado sempre que uma 
alteração é feita no repositório de código (por exemplo, um push para o 
branch principal). A primeira etapa recupera o código mais recente para ser 
construído e testado.
Etapa 2: Construção - O código-fonte é compilado para verificar se não há 
erros de compilação. Isso pode incluir a restauração de pacotes NuGet 
necessários e a compilação da solução ASP.NET Core.
Etapa 3: Execução de Testes - Testes automatizados, incluindo testes de 
unidade, testes de integração e outros, são executados contra o código 
construído. Isso é feito para garantir que as novas alterações não quebrem a 
funcionalidade existente.
Etapa 4: Análise de Qualidade - Ferramentas de análise de código são 
executadas para detectar possíveis problemas de qualidade ou segurança 
no código.
 Entrega Contínua (CD)
CI/CD - Exemplo
Fonte: autoria própria.
Etapa 5: Implantação em Ambiente de Teste - Se o código passar por 
todas as etapas de CI com sucesso, ele é automaticamente implantado em 
um ambiente de teste para testes adicionais, como testes de aceitação do 
usuário ou testes de carga.
Etapa 6: Aprovação para Produção - Após a validação no ambiente de 
teste, uma etapa de aprovação manual pode ser incluída antes da 
implantação em produção. Essa etapa permite que as equipes revisem as 
alterações antes do lançamento final.
Etapa 7: Implantação em Produção - Finalmente, o código é 
automaticamente promovido para o ambiente de produção, tornando as 
alterações disponíveis para os usuários finais.
 Jenkins, TeamCity, Azure DevOps e GitHub Actions, oferecem integração nativa ou fácil com 
o ecossistema .NET, permitindo que os desenvolvedores configurem pipelines de CI/CD com 
eficiência e flexibilidade.
 Jenkins, uma ferramenta de automação open source, destaca-se pela sua adaptabilidade e 
vasto ecossistema de plugins, facilitando a integração com o ASP.NET Core através de 
scripts de build e deploy personalizáveis. 
 A comunidade Jenkins fornece diversos plugins que suportam a integração com ferramentas 
.NET, permitindo a execução de testes automatizados, a compilação de projetos e a 
implantação de aplicações. 
 TeamCity, uma solução de CI/CD comercial da JetBrains, 
oferece suporte direto para projetos .NET e ASP.NET Core, 
possibilitando a configuração de pipelines de CI/CD através de 
uma interface gráfica intuitiva. 
 Com recursos avançados de integração, TeamCity facilita a 
gestão de dependências, a execução de testes automatizados 
e a distribuição de artefatos de build.
CI/CD - Ferramentas
 Azure DevOps, uma plataforma de serviços da Microsoft, se integra naturalmente ao 
desenvolvimento com ASP.NET Core, proporcionando um conjunto de ferramentas para a 
gestão de repositórios de código, a automação de pipelines de CI/CD e o monitoramento de 
aplicações em produção. 
 Sua integração profunda com o ecossistema Microsoft torna o Azure DevOps uma escolha 
popular entre as equipes que desenvolvem com .NET. 
 Já o GitHub Actions permite que as equipes implementem CI/CD diretamente em seus 
repositórios GitHub, automatizando workflows de build, teste e deploy com base em 
eventos específicos. 
 A flexibilidade e a integração profunda com o GitHub tornam 
as Actions uma ferramenta poderosa para equipes que 
utilizam o ASP.NET Core, facilitando a colaboração e a 
automação do ciclo de vida do desenvolvimento de software.
CI/CD - Ferramentas
 A escolha de uma ferramenta depende de uma série de fatores, incluindo a complexidade do 
projeto, a infraestrutura existente, as preferências da equipe de desenvolvimento e os 
requisitos específicos do cliente. 
 No contexto de projetos complexos, que exigem configurações de CI/CD altamente 
personalizáveis e integração com uma ampla gama de ferramentas e serviços, Jenkins é 
frequentemente escolhido pelas equipes de desenvolvimento. 
 TeamCity, com sua interface de usuário intuitiva e configuração declarativa, facilita a adoção 
e o gerenciamento de pipelines de CI/CD, especialmente para equipes menos familiarizadas 
com a automação de infraestrutura. 
 Azure DevOps, por outro lado, oferece uma integração 
profunda com os produtos e serviços da Microsoft, tornando-se 
a escolha preferencial para projetos que já estão fortemente 
integrados ao Azure ou que planejam utilizar extensivamente 
os serviços de nuvem da Microsoft.
CI/CD - Ferramentas
 GitHub Actions destaca-se em projetos que procuram simplificar a automação de CI/CD 
dentro do mesmo ambiente em que o código é hospedado. 
 Com a popularidade do GitHub como plataforma de hospedagem de código, Actions 
oferece uma solução conveniente e poderosa para automação de CI/CD, sem a 
necessidade de integrar com serviços externos. 
 Em termos de adoção no mercado, observa-se uma tendência crescente em direção a 
soluções de CI/CD que oferecem integração nativa com serviços de nuvem e plataformas de 
hospedagem de código, como Azure DevOps e GitHub Actions.
CI/CD - Ferramentas
Qual dos seguintes cenários ilustra corretamente o uso de microsserviços em uma aplicação 
de e-commerce? 
a) Um único serviço gerencia todos os aspectos da aplicação.
b) Todos os serviços compartilham um único banco de dados. 
c) Cada serviço é responsável por uma função específica, como “Catálogo de Produtos” ou 
“Gestão de Pedidos”.
d) Todos os microsserviços são desenvolvidos usando a mesma tecnologia.
e) Microsserviços não utilizam APIs para comunicação.
Interatividade
Qual dos seguintes cenários ilustra corretamente o uso de microsserviços em uma aplicação 
de e-commerce? 
a) Um único serviço gerencia todos os aspectos da aplicação.
b) Todos os serviços compartilham um único banco de dados. 
c) Cada serviço é responsável por uma função específica, como “Catálogo de Produtos” ou 
“Gestão de Pedidos”.
d) Todos os microsserviços são desenvolvidos usando a mesma tecnologia.
e) Microsserviços não utilizam APIs para comunicação.
Resposta
 É um aspecto crítico no design e na implementação de arquiteturas de software modernas, 
especialmente quando se considera a necessidade de sistemas escaláveis, resilientes e 
facilmente mantíveis. 
 O ASP.NET Core oferece suporte robusto para a criação de microsserviços, permitindo que 
desenvolvedores construam aplicações complexas e distribuídascom eficiência. 
 A natureza desacoplada dos microsserviços exige 
mecanismos eficientes de comunicação para que possam 
interagir uns com os outros, trocando dados e executando 
operações de maneira síncrona ou assíncrona. 
 Duas abordagens principais são comumente utilizadas para a 
comunicação entre microsserviços no contexto do ASP.NET 
Core: comunicação síncrona via HTTP/REST e comunicação 
assíncrona usando mensageria.
Comunicação entre microsserviços
 Na comunicação síncrona, os microsserviços comunicam-se diretamente uns com os outros 
usando chamadas HTTP. 
 Essa abordagem é frequentemente implementada por meio de APIs REST, em que um 
microsserviço atua como cliente, fazendo uma solicitação HTTP a outro microsserviço que 
atua como servidor. 
 O ASP.NET Core facilita a criação de APIs RESTful com suporte integrado para modelagem 
de rotas, serialização de objetos e tratamento de erros. 
 Embora a comunicação síncrona seja simples de implementar 
e intuitiva de entender, ela pode introduzir acoplamento e 
dependências diretas entre os microsserviços, além de 
potenciais gargalos de desempenho, pois o solicitante deve 
esperar pela resposta do provedor antes de prosseguir. 
Comunicação entre microsserviços
 A comunicação assíncrona busca superar algumas dessas limitações permitindo que os 
microsserviços troquem mensagens sem esperar por uma resposta imediata. 
 Essa abordagem é geralmente realizada através de sistemas de mensageria ou brokers de 
mensagens, como RabbitMQ, Apache Kafka ou Azure Service Bus. 
 O ASP.NET Core suporta essas integrações, permitindo que os microsserviços publiquem 
mensagens em uma fila ou tópico que outros microsserviços podem assinar e processar 
quando estiverem prontos. 
 A comunicação assíncrona é particularmente útil para 
operações que não exigem uma resposta imediata, 
melhorando a escalabilidade e a resiliência da aplicação, pois 
os componentes podem falhar e se recuperar 
independentemente, sem afetar o sistema como um todo. 
Comunicação entre microsserviços
RabbitMQ:
 é um broker de mensagens open-source que suporta o protocolo AMQP (Advanced Message 
Queuing Protocol);
 é conhecido por sua flexibilidade, confiabilidade e suporte para múltiplos padrões de 
mensagens, como filas de trabalho, publicação/assinatura e roteamento baseado em tópicos;
 é uma escolha popular para aplicações que necessitam de um sistema de mensageria 
robusto e fácil de usar;
 para integrar em um projeto ASP.NET Core, você pode instalar 
o pacote RabbitMQ.Client via NuGet. 
 Esse pacote fornece as APIs necessárias para se conectar ao 
RabbitMQ, publicar e consumir mensagens.
Comunicação entre microsserviços
Apache Kafka:
 é uma plataforma de streaming de eventos distribuída que é projetada para lidar com altos 
volumes de dados em tempo real;
 é altamente escalável, permitindo o armazenamento de grandes quantidades de dados que 
podem ser processados e analisados;
 é comumente usado em cenários que requerem um throughput elevado, como log de 
eventos, monitoramento de aplicações e integração de dados em grande escala;
 para começar com Apache Kafka em um projeto ASP.NET 
Core, você pode utilizar o pacote Confluent.Kafka, disponível 
via NuGet. 
 Esse pacote é oferecido pela Confluent, uma empresa fundada 
pelos cocriadores do Kafka, e fornece uma API .NET para 
produzir e consumir mensagens de um cluster Kafka.
Comunicação entre microsserviços
Azure Service Bus: 
 é um serviço de mensageria em nuvem oferecido pela Microsoft que fornece comunicação 
confiável entre aplicações e serviços, mesmo quando eles estão offline ou temporariamente 
indisponíveis;
 suporta padrões complexos de mensageria, como filas, tópicos e assinaturas, e é integrado 
aos serviços Azure, oferecendo recursos como escalabilidade automática e redundância 
geográfica;
 para usar o Azure Service Bus em um projeto ASP.NET Core, 
você pode adicionar o pacote Microsoft.Azure.ServiceBus 
via NuGet. 
 Esse pacote permite que os desenvolvedores interajam com o 
Service Bus para enviar, receber e gerenciar mensagens.
Comunicação entre microsserviços
 Um dos principais desafios no desenvolvimento de microsserviços com ASP.NET Core é 
garantir uma comunicação eficiente e confiável entre serviços independentes. 
 Dado que cada microsserviço opera em seu próprio processo e, potencialmente, em seu 
próprio ambiente de hospedagem, questões como latência de rede, falhas temporárias e a 
necessidade de comunicação síncrona versus assíncrona devem ser cuidadosamente 
consideradas. 
 Melhores práticas sugerem a implementação de padrões como Circuit Breaker para lidar com 
falhas temporárias e o uso de APIs Gateway para centralizar e gerenciar pontos de entrada 
para os serviços.
 Outro desafio significativo é o gerenciamento de dados em 
uma arquitetura de microsserviços. 
 Cada serviço deve ser o proprietário de seu banco de dados 
para garantir a independência e a desacoplamento. 
 No entanto, isso pode levar a dificuldades na realização de 
transações que abrangem vários serviços e na consistência 
dos dados. 
Desafios e melhores práticas em microsserviços 
 Para enfrentar esses desafios, desenvolvedores frequentemente recorrem a padrões como 
Saga para gerenciar transações distribuídas e Event Sourcing para garantir a consistência 
eventual dos dados através da sincronização baseada em eventos.
 A testabilidade é outro aspecto crítico em microsserviços, exigindo estratégias abrangentes 
devido à complexidade de testar serviços em isolamento e como parte de um sistema maior.
 Utilizar contêineres para replicar ambientes de serviços e a implementação de contratos de 
serviço podem ajudar a garantir que os microsserviços interajam corretamente entre si em 
diferentes ambientes de desenvolvimento e produção. 
 A segurança é uma preocupação constante, pois a superfície 
de ataque é ampliada em uma arquitetura de microsserviços. 
 Melhores práticas envolvem a implementação de autenticação 
e autorização em nível de API, utilizando tokens JWT ou 
OAuth para controlar o acesso entre serviços. 
Desafios e melhores práticas em microsserviços 
 Permite aos desenvolvedores focar na lógica de negócios em vez de gerenciar a 
infraestrutura do servidor.
 O ASP.NET Core oferece um suporte robusto para a criação de aplicações serverless, as 
quais podem ser hospedadas em plataformas de nuvem como Azure Functions, AWS 
Lambda entre outras. 
 A arquitetura serverless permite que o código seja executado em resposta a eventos, tais 
como solicitações HTTP, modificações em bancos de dados ou mensagens de serviços de 
fila, sem a necessidade de provisionar ou gerenciar servidores. 
 A integração de ASP.NET Core em ambientes serverless 
destaca-se pela capacidade de desenvolver aplicações que 
são automaticamente escaladas, o que significa que a 
infraestrutura pode ajustar-se dinamicamente conforme a 
demanda. 
 Isso é particularmente benéfico para aplicações com padrões 
de tráfego variáveis, nas quais o uso eficiente de recursos e a 
otimização de custos são primordiais. 
Serverless com ASP.NET 
 O desenvolvimento serverless apresenta desafios, incluindo questões relacionadas à 
depuração de aplicações, gestão de estado e a necessidade de adaptar-se a modelos de 
programação baseados em eventos. 
 Esses desafios exigem uma abordagem cuidadosa no design da aplicação e uma 
compreensão profunda dos serviços de nuvem utilizados.
 A adoção de ASP.NET Core em contextos serverless oferece uma combinação poderosa 
para o desenvolvimento de aplicações modernas, fornecendo aos desenvolvedores as 
ferramentas necessárias para criar soluções escaláveis, eficientes e de fácil manutenção. 
 À medida que a tecnologia evolui, espera-se que mais 
organizações adotem essa abordagem, aproveitando as 
vantagens da computação em nuvem para impulsionar a 
inovaçãoe a eficiência operacional.
Serverless com ASP.NET 
Qual abordagem de comunicação entre microsserviços é implementada usando APIs REST em 
ASP.NET Core? 
a) Comunicação assíncrona.
b) Comunicação síncrona.
c) Comunicação via sockets.
d) Comunicação via WebSocket.
e) Comunicação por RPC.
Interatividade
Qual abordagem de comunicação entre microsserviços é implementada usando APIs REST em 
ASP.NET Core? 
a) Comunicação assíncrona.
b) Comunicação síncrona.
c) Comunicação via sockets.
d) Comunicação via WebSocket.
e) Comunicação por RPC.
Resposta
ATÉ A PRÓXIMA!

Mais conteúdos dessa disciplina