Caixa de ferramentas da Arquitetura de Software Como tornar suas aplicações mais escaláveis, confiáveis e seguras
Eduardo Felipe Zambom SantanaSobre o livro
Em um projeto de software, as pessoas desenvolvedoras se preocupam principalmente com o código, que vai executar algum requisito pedido pelos clientes da aplicação. Porém, se a aplicação começa a crescer, tendo que lidar com um grande número de usuários e com uma grande quantidade de dados para processar, não será suficiente apenas desenvolver o código e esperar que ele vá continuar funcionando sempre da mesma maneira, pois diversos problemas, como lentidão e indisponibilidade, podem começar a ocorrer.
Para lidar com o crescimento da aplicação, teremos que pensar em diversas estruturas para garantir que ela continue funcionando mesmo em condições muito mais complexas. Para isso, temos que pensar na Arquitetura de Software, que define a estrutura geral de um sistema para que ele consiga atender diversos requisitos que são comuns à grande maioria das aplicações, que são os requisitos não funcionais (ou atributos de qualidade).
Os requisitos não funcionais definem uma série de atributos que as aplicações devem atender para que ela tenha a qualidade esperada pelos seus usuários. Existe um grande número de requisitos não funcionais. Alguns dos mais conhecidos são o desempenho, a confiabilidade e a segurança. Uma aplicação que tenha um bom desempenho deve ser também escalável, isto é, continuar funcionando mesmo que o número de transações cresça. Uma aplicação também deve ser tolerante a falhas, não permitindo que uma falha cause uma indisponibilidade do serviço.
É praticamente impossível atingir todos os requisitos não funcionais de que uma aplicação necessita pensando apenas em código. Por isso, é essencial que desenvolvedores e desenvolvedoras saibam identificar implementações que podem causar problemas, seja de desempenho, de confiabilidade ou de segurança. Além disso, é essencial conhecer um grande número de ferramentas e tecnologias que podem ser usadas para evitar problemas, ou até para resolver um problema que talvez já esteja ocorrendo em uma aplicação.
Este livro tem o objetivo de apresentar e discutir a pessoas desenvolvedoras, sejam iniciantes ou já seniores, os principais requisitos não funcionais que devem ser pensados na hora de implementar uma aplicação. Entre esses requisitos estão o desempenho, a confiabilidade e a segurança. Dentro desses três requisitos, serão discutidos diversos outros que são derivados ou bastante relacionados a eles, como escalabilidade, disponibilidade, elasticidade, monitoramento, controle de acesso e tolerância a falhas. Além de discutir os requisitos não funcionais, também serão apresentadas diversas ferramentas para a implementação desses requisitos, como cache, balanceadores de carga e ferramentas de integração contínua.
Como este livro está organizado?
O livro tem dois objetivos principais: apresentar as arquiteturas de software mais utilizadas e discutir os principais requisitos não funcionais que devem ser considerados na maioria das aplicações. Para isso, este livro está organizado em cinco partes.
A Parte 1, Introdução à Arquitetura de Software, descreve algumas das arquiteturas de software mais utilizadas. Elas se dividem em dois tipos principais: os monólitos e as arquiteturas distribuídas. Dentro desses dois tipos existem diversas variações, como monólitos que são implementados usando a arquitetura em camadas, ou arquiteturas distribuídas que usam eventos ou microsserviços. Além de apresentar os tipos de arquitetura, também serão discutidas as vantagens e desvantagens de cada um dos modelos em relação aos requisitos não funcionais.
A Parte 2, Desempenho, apresentará formas para melhorar o desempenho da aplicação. Veremos diversos padrões e tecnologias que podem ajudar uma aplicação a alcançar um bom desempenho, como a utilização de caches e de algoritmos que possuem baixa complexidade de execução. Além disso, serão discutidos outros dois requisitos não funcionais que são bastante ligados ao desempenho: a escalabilidade e a elasticidade.
A Parte 3, Confiabilidade, mostrará ferramentas para deixar a aplicação mais confiável e evitar, ou pelo menos minimizar, os riscos de os usuários serem impactados com eventuais falhas do sistema. Também serão mostradas ferramentas para o monitoramento da aplicação, para que, quando uma falha acontecer, ela seja detectada o mais rápido possível.
A Parte 4, Segurança, focará na segurança das aplicações. Existem diversos padrões que devem ser seguidos, desde como os servidores devem ser expostos na internet, até como os dados dos usuários devem ser mantidos em bancos de dados para evitar riscos em uma aplicação. Serão apresentados alguns dos conceitos mais importantes para a segurança de aplicações, como o controle de acesso e o monitoramento de dependências.
Por fim, a Parte 5, Outros requisitos não funcionais, discutirá requisitos não funcionais como a usabilidade e a testabilidade, entre outros que também são bastante importantes, mas que não serão abordados com muita profundidade nas Partes 2, 3 e 4 por não serem tão ligados à arquitetura e à execução das aplicações.
Prefácio
Este livro é resultado dos quase 20 anos de trabalho com Engenharia de Software, alguns como desenvolvedor, outros como arquiteto, alguns também como professor, e todos como aluno desta área, tão importante na Ciência da Computação. Muitas das coisas que eu coloquei neste livro eu gostaria de ter aprendido há 15 anos, para utilizar em alguns projetos que participei. Com a experiência que tenho hoje, fica clara a falta de preocupação com diversas partes essenciais de uma aplicação, como com a sua confiabilidade e sua segurança.
Já trabalhei em projetos que eram excelentes produtos, que foram validados com os clientes e tinham tudo para ser um grande sucesso, mas que falharam, seja porque atingiram um número maior de clientes e não suportaram a carga, ou porque não eram confiáveis o suficiente. Alguns até funcionavam para os casos de uso básico para os quais foram projetados, mas qualquer coisa que fugia um pouco do padrão fazia a aplicação apresentar resultados inesperados.
Sem dúvida, os assuntos que este livro foca — desempenho, confiabilidade e segurança — são muito mais discutidos hoje do que eram quando eu comecei a trabalhar na área, e a quantidade de ferramentas e técnicas que existem hoje para conseguir implementar esses requisitos com sucesso é muito maior. Quem me dera que, há 10 anos, quando trabalhei em um projeto que tinha que atender uma fila de tickets de atendimento, já existisse o Apache Kafka.
Apesar da grande evolução que essa área teve nos últimos anos, a implementação desses requisitos é tão ou até mais desafiadora do que era quando eu comecei. Isso porque as aplicações hoje são maiores e mais complexas, possuem um número de usuários que pode ser muito maior e estão muito mais expostas na internet, o que faz os desafios de segurança serem muito maiores.
Espero que você aproveite a leitura e que os conhecimentos contidos neste livro sejam úteis para que a sua aplicação funcione com um bom desempenho e de forma confiável e segura.
— Eduardo Zambom
Sumário
- Parte 1: Introdução à Arquitetura de Software
- 1 Arquitetura de software
- 2 Modelos de Arquitetura de Software
- 2.1 Monólito
- 2.2 Arquiteturas distribuídas
- Parte 2: Desempenho
- 3 Desempenho
- 3.1 Escalabilidade
- 3.2 Elasticidade
- 4 Desempenho e escalabilidade no código
- 4.1 Melhorias na implementação
- 4.2 Cache
- 4.3 Índices
- 4.4 Comunicação assíncrona
- 5 Desempenho e escalabilidade na infraestrutura
- 5.1 Melhoria de hardware
- 5.2 Balanceamento de carga
- 5.3 Cache na infraestrutura
- Parte 3: Confiabilidade
- 6 Confiabilidade
- 6.1 Tolerância a falhas
- 6.2 Disponibilidade
- 6.3 Monitoramento
- 6.4 Recuperabilidade
- 7 Confiabilidade no código
- 7.1 Tratamento de exceções
- 7.2 Timeouts
- 7.3 Limitação de taxa (Rate limiting)
- 7.4 Monitoramento
- 8 Confiabilidade na infraestrutura
- 8.1 Balanceamento de carga
- 8.2 Recuperabilidade
- 8.3 Deployability
- Parte 4: Segurança
- 9 Segurança
- 9.1 Controle de acesso
- 9.2 Confidencialidade
- 9.3 Monitoramento
- 9.4 Certificações de segurança
- 10 Segurança no código
- 10.1 Confidencialidade
- 10.2 Monitoramento na segurança
- 10.3 Outros problemas de segurança
- 11 Segurança na infraestrutura
- 11.1 Confidencialidade na infraestrutura
- 11.2 Monitoramento
- 11.3 Auditoria
- 11.4 Integridade
- 11.5 Tipos de ataques
- Parte 5: Outros requisitos não funcionais
- 12 Outros requisitos
- 12.1 Usabilidade
- 12.2 Portabilidade
- 12.3 Corretude
- 12.4 Testabilidade
- 12.5 Manutenibilidade
- 12.6 Reprodutibilidade
- 12.7 Documentação
- 12.8 Custo e tempo
Dados do produto
- Número de páginas:
- 191
- ISBN:
- 978-85-5519-367-5
- Data publicação:
- 03/2024