Você está na página 1de 13

Sistemas Distribuídos

Aula 1 – Conceito de Sistemas Distribuídos


O que é um Sistema Distribuído?
Um sistema distribuído é uma coleção de programas de computador que utilizam
recursos computacionais em vários pontos centrais de computação diferentes para atingir
um objetivo comum e compartilhado. Os sistemas distribuídos visam remover gargalos
ou pontos centrais de falha de um sistema.

Quais são suas características?


• Compartilhamento de Recursos – um sistema distribuído pode compartilhar
hardware, software ou dados;
• Processamento simultâneo – várias máquinas podem processar a mesma função
ao mesmo tempo;
• Escalonamento – a capacidade de computação e processamento pode evoluir
conforme necessário quando estendida para máquinas adicionais;
• Detecção de erros – as falhas podem ser detectadas com mais facilidade;
• Transparência – um ponto central pode acessar e se comunicar com outros
pontos centrais no sistema;

Qual a diferença entre um sistema centralizado e um distribuído?

Um sistema de computação centralizado é onde toda


a computação é executada por um único computador
em um único local. A principal diferença entre
sistemas centralizados e distribuídos é o padrão de
comunicação entre os pontos centrais do sistema.

Vantagens sistemas distribuídos

A primeira vantagem que podemos observas diz respeito à economia. Um


sistema de informação centralizado de grande porte necessita de um mainframe para que
ele possa funcionar com qualidade. A segunda vantagem diz respeito à velocidade, por
maior que seja a velocidade de processamento de um mainframe, ele nunca conseguirá
alcançar o poder de processamento de N microcomputadores interligados, como se fosse
um único sistema. A terceira vantagem está relacionada à confiança oferecida pelo
sistema. Se um dos microcomputadores que fazem parte de um sistema distribuído deixar
de funcionar, o sistema como um todo continuará em operação, deixando de funcionar
apenas alguns módulos que eram de responsabilidade do computador defeituoso.

Desvantagens sistemas distribuídos

• Segurança: a facilidade oferecida pelos sistemas distribuídos no acesso aos dados,


pode criar uma dificuldade na garantia de segurança dos dados existentes e a
privacidade dos dados secretos. Podemos dizer que a segurança é um ponto de
desvantagem crítico em um sistema de informação distribuído.
• Desenvolvimento: O desenvolvimento de um sistema distribuído é algo bem
complexo. A disponibilidade de softwares com tais características é bem escassa.
• Custo: Existe um alto custo para a implementação de aplicações colaborativas,
devido ao fato de os recursos estarem fisicamente separados.

Aula 2 – Tipos de Sistemas Distribuídos


Os diferentes tipos de sistemas distribuídos são Sistemas de Computação
Distribuídos, Sistemas de Informação Distribuídos e Sistemas Embutidos
Distribuídos.

Sistemas de Computação Distribuídos


São aqueles utilizados para tarefas de computação de alto desempenho, são
classificados de modo diferente quanto à infraestrutura computacional utilizada:
• Sistemas de Computação de Cluster: É chamado de Cluster quando o hardware
subjacente consiste em um conjunto de estações de trabalhos ou computadores
pessoais semelhantes, executando o mesmo sistema operacional e conectados por
uma rede local de alto desempenho. Surgiu quando ficou atraente à relação
preço/desempenho. Ele permite a construção de supercomputadores usando
tecnologia de prateleira. Geralmente, a computação de cluster é usada para
programação paralela, onde um único programa, com computação intensa, é
executado em paralelo em várias máquinas;
Exemplo 1: Tipo Beowulf, onde cada computador é chamado de nó e entre eles
um é o nó mestre. Os nós do cluster são acessados e controlados através do nó
mestre. O nó mestre executa o middleware;
Exemplo 2: Sistema Mosix, adota uma abordagem simétrica, ou seja, tenta
parecer para o usuário como um sistema único. Isto é alcançado através de uma
permissão de uma forma dinâmica e preventiva de migração de processos entre os
nós do cluster.
• Sistemas de Computação em Grade: Em comparação com o cluster, tem alto grau
de heterogeneidade, nenhuma premissa é adotada em relação ao hardware,
sistemas operacionais, redes, domínios administrativos, políticas de segurança e
assim por diante. Uma questão importante de Sistemas em Grande é que recursos
de diferentes organizações são reunidos para permitir uma colaboração de um
grupo de pessoas ou instituições. Tal colaboração é realizada sob uma
organização virtual.

Sistemas de Informação Distribuídos


Um sistema de informação distribuído consiste em um middleware, implementado
sobre uma infraestrutura computacional, capaz de integrar facilmente aplicações em rede
a um sistema de informação de âmbito empresarial. Comumente, aplicações de rede
consistia em um servidor que executava a aplicação, com um banco de dados, e a
disponibilizava para programas remotos, denominados clientes. Integração em um nível
mais baixo permitia que clientes empacotassem várias requisições, para diferentes
servidores, em uma única requisição maior e as enviassem como uma transação
distribuída. Assim ou todas as requisições de uma transação distribuída seriam
executadas ou nenhuma delas.
À medida que as aplicações se sofisticavam, a separação entre componente de
banco de dados e componentes de processamento e o que evidenciou a necessidade de
uma aplicação comunicar-se com outras diretamente. Isso deu origem à interpretação de
aplicações empresariais (EAI – Enterprise Application Integration). Logo, são dois tipos
de Sistemas de Informação Distribuídos:
• Sistemas de Processamento de Transações: Vamos tratar de aplicações de banco
de dados, onde suas operações costumam ser realizadas através de transações. A
característica de executar tudo ou nada das transações é uma das quatro
propriedades que a caracterizam. Transações são:
a) Atômicas: para o mundo exterior parece indivisível.
b) Consistentes: a transação não viola invariantes de sistema.
c) Isoladas: transações concorrentes não interferem uma na outra.
d) Duráveis: uma vez confirmada a transação, as alterações são permanentes.
• Integração de Aplicações Empresariais: A principal ideia para a integração de
aplicações era a necessidade de que as aplicações existentes pudessem trocar
informações diretamente. Para facilitar essa comunicação foi criado o
middleware de comunicação, que atende aplicações clientes requisitando
componente servidor e atende componente servidor requisitando outro
componente servidor:
a) Através de Chamadas a Procedimentos Remotos (RPC – Remote Procedure
Calls), um componente de aplicação pode enviar uma requisição a outro
componente de aplicação.
b) As Invocações de Método Remoto (RMI – Remote Method Invocations) é o
mesmo que RPC só que no Paradigma de Orientação a Objetos.
A desvantagem de RPC e RMI é que tanto o chamador como o chamado precisam
estar ligados e precisam saber exatamente como um deve se referir ao outro. Para
sanar este problema surgiu o middleware orientado a mensagens (MOM –
Message-Oriented Middleware), onde as mensagens são enviadas a pontos
lógicos de contato.
Atualmente sistemas denominados publicar/subscrever estão em uso, onde as
aplicações podem indicar seu interesse por um tipo específico de mensagem e o
middleware de comunicação trata para que as mensagens sejam entregues a essas
aplicações.

Aula 3 – Arquitetura de Sistemas Distribuídos


O que é?
Em sistemas distribuídos, nos preocupamos com a organização lógica dos
componentes de software e como eles interagem, o que didaticamente podemos chamar
de arquitetura de software; mas também nos preocupamos com a distribuição física desse
sistema, o que chamamos de arquitetura de sistema.
Uma configuração específica para organização lógica de um sistema distribuído
dá origem a um estilo arquitetural. Eles não são exclusivos, isto é, é comum que uma
aplicação utilize mais de um estilo arquitetural:
• Arquitetura em Camadas;
• Arquitetura Baseada em Objeto;
• Arquitetura Centrada em Dados;
• Arquitetura Baseada em Eventos;

Arquitetura em Camadas
Os componentes do software são
divididos em camadas hierárquicas, de tal
modo que cada camada tenha um
propósito bem definido e que o
acoplamento entre elas seja baixo. Isso
significa que a camada superior conhece
apenas a camada imediatamente inferior,
que fornece serviços através de uma
interface.
Um tipo específico de arquitetura em
camadas muito comum é chamado de
arquitetura de 3 camadas, que divide a
aplicação nas camadas de:

(1) Apresentação: Responsável pela interface com o usuário;


(2) Negócio: Responsável pelas regras de negócio da aplicação;
(3) Dados: Responsável pela gestão dos dados;
Arquitetura Baseada em Objeto
Também chamada de Arquitetura
Orientada a Serviços, esse estilo
arquitetural não tem regras muito
rígidas. Os componentes do sistema
são vistos como objetos que podem se
comunicar através de chamadas de
procedimento remoto.

Arquitetura Centrada em Dados


A ideia dessa arquitetura é que existe
um espaço de dados compartilhado,
onde os componentes desse sistema se
comunicam. A Web é vista como
sendo centrada em dados, uma vez
que é composta por arquivos (dados)
de hipermídia, que podem ser manipulados a partir do protocolo HTTP e seus verbos
(GET, POST, PUT, DELETE, etc). O serviço S3, da Amazon, é um bom exemplo de
tecnologia construída para dar suporte a essa arquitetura.

Arquitetura Baseada em Eventos


Um evento é qualquer alteração de estado
importante para o domínio do sistema. Quando um
sistema detecta um evento, ele pode representá-lo
em forma de mensagem e publicá-lo em um canal
para que outros sistemas possam reagir a ele. O
sistema que publica a mensagem é chamado de
produtor e não necessita conhecer aqueles sistemas
que podem reagir aos eventos. A grande vantagem
desse estilo arquitetural é o baixo acoplamento gerado entre os componentes do sistema
distribuído.

Arquiteturas de Sistema
A Arquitetura de sistema está relacionada com o local onde colocamos cada um
dos componentes do sistema distribuído:
• Arquitetura Centralizada;
• Arquitetura Descentralizada;
• Arquitetura Híbrida;
Arquitetura Centralizada
Essa arquitetura separa os componentes em cliente (aquele que faz uma
solicitação) e servidor (aquele que processa uma solicitação). É muito comum que
aplicações que utilizem o estilo arquitetural de três camadas distribuam esses
componentes verticalmente, isto é, separem a apresentação em uma aplicação (cliente)
que executa em uma máquina, e que se comunica com outra aplicação na qual reside a
lógica do negócio (servidor) em outra máquina, que por sua vez atua como cliente do
servidor de banco de dados ao recuperar ou gravar dados. Também há sistemas que
mantém a apresentação e a lógica de negócio em uma mesma aplicação. Outros mantém
parte da lógica de negócios na apresentação, e outra parte de uma aplicação separada.
Existem diversas formas de organização no modelo cliente-servidor, e é importante
estudar as vantagens e desvantagens de cada uma delas antes de se decidir por uma.

Arquitetura Descentralizada
Essa arquitetura realiza uma distribuição horizontal, isto é, divide um cliente ou
servidor fisicamente em partes logicamente equivalentes. Utilizando o exemplo de
sistemas de três camadas, uma mesma camada por ser distribuída em várias máquinas.
Isso resulta em um melhor equilíbrio de carga. Um exemplo de arquitetura
descentralizada são as redes peer-to-peer.

Arquitetura Híbrida
Esta arquitetura combina características das arquiteturas centralizadas e
descentralizadas. Sistemas que utilizam arquitetura híbrida geralmente utilizam o modelo
cliente-servidor para os nós se conectarem ao sistema, e depois utilizam o esquema
descentralizado.

Aula 4 – Redes e Protocolos de Comunicação entre Processos Distribuídos


O que é e para o que serve?
A comunicação entre processos distribuídos é feita pela troca de mensagens, a
forma mais simples de comunicação entre processos de um sistema distribuído. As
mensagens são armazenadas em pacotes chamados datagramas. As mensagens são
trocadas entre os processos localizados em máquinas distintas. Os protocolos garantem
que processos consigam estabelecer a comunicação mesmo em plataformas diferentes ou
tecnologias diferentes.
Uso de Middleware
O mecanismo de comunicação entre
processos usa middleware para
simplificar a comunicação. O
middleware é um programa mediador
que faz a mediação entre programas e
aplicações de diferentes protocolos de
comunicação, realizando o transporte de
dados e informações desses programas.

As Características da Comunicação entre Processos


A troca de mensagens entre dois processos
é feita através de duas operações de comunicação:
send e receive. Assim para que um processo
comunique com o outro, o processo origem envia
(send) uma mensagem para um destino, onde um
outro processo recebe a mensagem (receive). Esta
atividade envolve a comunicação entre o processo
origem e o processo destino e implica na
sincronização dos dois processos.

Comunicação Síncrona e Assíncrona entre Processos


A comunicação síncrona é aquela que ocorre de forma simultânea e rápida. A
comunicação assíncrona é mais lenta. É o caso dos e-mails. Na comunicação síncrona o
processo origem ao enviar a mensagem fica bloqueado até que a recepção correspondente
seja realizada.
Na comunicação assíncrona o processo origem ao enviar a mensagem fica
liberado para prosseguir seu processamento, enquanto a mensagem é enviada ao destino.

Tipos de Comunicação
• Comunicação Direta: Protocolo HTTP e Protocolos de comunicação de
streaming;
• Comunicação Indireta: O remetente e o destinatário não precisam se conhecer
inicialmente. Como funciona os canais do Youtube;

Protocolos Controle Stateless e Stateful


• Stateless: Não há memória (estado) que é mantido pelo programa. No conceito
stateless nenhum registro ou estado de todas as interações anteriores na aplicação
são salvos e cada interação é tratada com base nas informações disponíveis para
a interação. Exemplo: Protocolos de Internet (IP), Protocolo de Transferência de
Hyper Texto (HTTP)
• Stateful: O programa tem uma memória (estado). Já o Stateful mantém o controle
de estado de interação da aplicação e permite que os dados possam ser mantidos
entre diferentes requisições. Exemplo: Java – HttpSession, C# Asp.net – Session,
Javascript – SessionStorage.
Stateless:
• Vantagens: Redução do uso
de memória no servidor e reduz
problemas de sessão expirada.
• Desvantagens: Mais difícil de
manter a interação do usuário; Pode
ser necessário incluir informação
adicional em cada requisição, e esta
informação adicional será necessária
para ser interpretada pelo servidor.

Stateful:
• Vantagens: Manter o controle de um usuário durante toda a execução da
aplicação; Mais intuitivo, dados de entidade podem ser mantidos no servidor entre
requisições; Pode melhorar o desempenho quando a recuperação de dados é
necessária apenas uma vez.
• Desvantagens: Requer memória a ser alocada para armazenar os dados; Podem
levar a uma diminuição do desempenho se o armazenamento da sessão não é
mantido de forma eficiente.

Aula 5 – Processos e Thread


Threads
Threads compartilham o processador da mesma forma que processos. Também
passam por mudanças de estados (execução, espera e pronto). Por exemplo, quando uma
thread espera uma operação de leitura de arquivo uma outra thread pode ser executada.
Para permitir a troca de contexto de thread cada thread possui seu contexto hardware com
o conteúdo dos registradores gerais, PC e SP.
Dentro de um processo as threads compartilham o espaço de endereçamento e o
contexto de software porém cada thread possui seu contexto de hardware individual.
Threads são implementadas internamente na memória principal através de uma
estrutura de dados chamada bloco de controle de thread (Thread Control Block – TCB).
O TCB armazena mais algumas informações relacionadas ao thread como prioridade,
estado de execução e bits de estado.
Como Combinam?
• Processos: São independentes; Espaços de
endereçamento separados; interagem com outros
processos.
• Thread: Fluxo de execução dos processos;
compartilha o mesmo endereçamento e alguns dados da
tabela de processo.

Gerenciamento de Processos

• Sobrecarga associada à mudança de estado realizada pelo SO


• Salva contexto do processo
• Atualiza bloco de controle do processo
• Gravação do novo estado (pronto/bloqueado)
• Gravação do motivo da mudança de estado
• Move o processo para a fila apropriada
• Escolhe novo processo para execução
• Atualiza controle do processo do novo processo e dados relativos
• Restaura contexto do novo processo

Monothread ou Multithread
Em um ambiente Monothread, uma aplicação é composta por códigos que são
executados sequencialmente, de acordo com repetições, desvios, funções e
procedimentos, onde a utilização de concorrência é efetuada através da implementação
de processos independentes e subprocessos, caso exista essa necessidade, causando um
maior consumo de recursos do sistema, uma vez que cada processo detém seu próprio
espaço de endereçamento e a comunicação entre os diversos processos envolvidos
normalmente é mais lenta que no outro modo.
Em um ambiente Multithread, o conceito de thread é amplamente explorado e
aplicado, onde técnicas permitem que as mesmas sejam executadas de maneira
simultânea. Através da utilização deste recursos, os softwares podem efetuar diversas
tarefas de maneira paralela, possibilitando assim que as threads exerçam suas funções de
maneira independente umas das outras.

Arquitetura e Implementação e Threads


Threads em Modo usuário
Threads podem ser criadas através de uma biblioteca de funções fora do núcleo
do sistema operacional (modo usuário). Neste caso as threads são implementadas pela
aplicação do usuário e não pelo sistema operacional. É a aplicação que deve gerenciar as
threads (sincronização e comunicação).

Thread em Modo Kernel


Threads podem ser criadas pelo próprio núcleo do sistema operacional (modo
kernel) através de chamadas às rotinas do sistema que oferecem todas as funções para
gerencia de threads (sincronização e comunicação). Neste caso é o sistema operacional
quem cuida das threads e decide qual thread vai ser executada pelo processador em um
determinado momento (escalonamento de threads).

Thread em Modo Híbrido


Threads podem ser criadas por uma combinação de ambos (modo híbrido ). Nesta
implementação um processo pode ter várias threads em modo kernel e cada thread em
modo kernel pode ter várias threads em modo usuário. O núcleo do sistema operacional
reconhece as threads em modo kernel e pode escalona-las individualmente.
O problema desta implementação é que não é possível a comunicação entre
threads em modo usuário e threads em modo kernel.

Scheduler Activations
Threads em modo Scheduler Activations usam o melhor do modo kernel e do
modo usuário. Usam as facilidades do modo kernel com o desempenho e a flexibilidade
do modo usuário. Nesta implementação o núcleo do sistema troca informações com a
biblioteca de threads utilizando uma estrutura chamada scheduler activations. Essa
implementação evita a troca de modo de acesso (usuário-kernel-usuário) pois o kernel e
a biblioteca de threads se comunicam e trabalham de forma cooperativa.

Aula 6 - Implementação dos Sistemas Distribuídos – Escalabilidade


Implementação ou Implantação
Implantar significa iniciar alguma coisa, implementar significa colocar essa coisa
em prática.
A implementação pode envolver a escolha de tecnologias específicas, como
linguagens de programação, banco de dados distribuídos e sistemas de mensagens,
além da configuração de servidores e redes de comunicação. A implementação também
deve incluir testes rigorosos para garantir a segurança, escalabilidade, confiabilidade e
desempenho adequado do sistema distribuído. Em resumo, a implementação de sistemas
distribuídos é um processo complexo que exige habilidades avançadas em programação,
arquitetura de sistemas e gerenciamento de projetos.

Implementação de Escalabilidade
A implementação de escalabilidade em sistemas distribuídos é um processo
complexo que envolve diversas estratégias e técnicas para permitir que o sistema cresça
em tamanho e capacidade conforme a demanda aumenta.
Algumas das técnicas mais comuns para implementação de escalabilidade em
sistemas distribuídos incluem:
• Adição de mais nós: isso envolve adicionar mais servidores ou máquinas virtuais
ao sistema distribuído para aumentar a capacidade de processamento e
armazenamento disponível.
• Divisão de carga: Isso envolve distribuir a carga de processamento entre
diferentes nós do sistema, de modo que nenhum nó se torne um gargalo de
desempenho.
• Balanceamento de carga: Isso envolve distribuir a carga de processamento entre
diferentes nós do sistema de forma dinâmica, de modo que cada nó esteja
trabalhando em uma quantidade equilibrada de processamento.
• Caching: Isso envolve o uso de memória cache distribuída para armazenar dados
frequentemente acessados, de modo que o acesso a esses dados possa ser feito de
forma mais rápida e eficiente.
• Particionamento de dados: Isso envolve dividir os dados do sistema em
partições menores e distribuí-las em diferentes nós do sistema para aumentar a
capacidade de armazenamento e processamento.
Exemplos de Escalabilidade com Bom Custo e Benefícios: Microsserviços e
Computação em Nuvem.

Microsserviços
Os microsserviços são uma abordagem arquitetônica em que um aplicativo é
construído a partir de serviços independentes que se comunicam entre si por meio de APIs
bem definidas. Em sistemas distribuídos, os microsserviços podem ser usados para
dividir o aplicativo em serviços menores, mais independentes e escaláveis.
Ao usar microsserviços em sistemas distribuídos, cada serviço pode ser executado
em um nó separado, permitindo que diferentes partes do aplicativo sejam escaladas
independentemente umas das outras. Isso significa que é possível escalar apenas as partes
do aplicativo que exigem maior capacidade de processamento ou armazenamento, sem
afetar outras partes do aplicativo.
Exemplos de Microsserviços:
• Serviço de Autenticação: responsável pela autenticação e autorização de
usuários em um sistema distribuído. É um microsserviço crucial para garantir a
segurança do sistema.
• Serviço de Gerenciamento de Usuários: responsável pelo gerenciamento de
usuários, incluindo criação, atualização e exclusão de contas de usuário.
• Serviço de Gerenciamento de Conteúdo: responsável pelo gerenciamento de
conteúdo, como criação, atualização e exclusão de artigos ou notícias em um site.
• Serviço de Mensageria: responsável pela entrega de mensagens entre diferentes
componentes do sistema distribuído.
• Serviço de Pagamentos: responsável pelo processamento de pagamentos, como
o processamento de transações de cartão de crédito ou débito.
• Serviço de Logística: responsável pelo gerenciamento de transporte e entrega de
produtos, como rastreamento de pacotes e notificações de entrega.
• Serviço de Busca: responsável pela indexação e pesquisa de conteúdo em um
sistema distribuído.

Computação em Nuvem
Computação em nuvem é um modelo de entrega de recursos de computação, como
servidor, armazenamento, redes e aplicativos, por meio da internet. Em sistemas
distribuídos, a computação em nuvem pode ser usada para fornecer recursos de
computação sob demanda para um sistema distribuído.
Em vez de ter um data center dedicado com todos os recursos de computação
necessários, um sistema distribuído pode usar a infraestrutura em nuvem para escalar
rapidamente a capacidade de processamento e armazenamento, conforme necessário. Isso
pode ajudar a evitar gargalos de desempenho e melhorar a disponibilidade do sistema.
Além disso, a computação em nuvem também pode ser usada para reduzir os
custos de hardware e software, já que os recursos podem ser adquiridos sob demanda, em
vez de serem mantidos em infraestrutura própria. Isso pode ser particularmente benéfico
para empresas que precisam de capacidade de processamento ou armazenamento variável
ao longo do tempo.

Tipos de Escalabilidade
Existem três tipos de escalabilidade em sistemas distribuídos:
1. Escalabilidade vertical: envolve aumentar a capacidade de processamento,
armazenamento ou memória de um único nó em um sistema distribuído. Isso é
geralmente feito adicionando mais recursos de hardware ao nó existente, como
CPU, RAM ou unidades de disco rígido. A escalabilidade vertical é limitada pela
capacidade física do hardware existente e pode ser bastante cara.
2. Escalabilidade horizontal: envolve adicionar mais nós ao sistema distribuído para
aumentar a capacidade de processamento, armazenamento ou memória. Isso é
geralmente feito adicionando mais servidores ao cluster. A escalabilidade
horizontal é mais fácil de implementar do que a escalabilidade vertical e é
geralmente mais econômica.
3. Escalabilidade funcional: envolve a adição de novas funcionalidades ao sistema
distribuído para lidar com novas cargas de trabalho ou requisitos de negócios. Isso
pode envolver a introdução de novos serviços ou microsserviços para lidar com
novas demandas ou a atualização de serviços existentes para suportar novos
recursos. A escalabilidade funcional é importante para garantir que o sistema
distribuído possa se adaptar a mudança nas necessidades dos usuários ou da
empresa.

Riscos de Escalabilidade
Embora a escalabilidade em sistemas distribuídos possam trazer muito benefícios,
existem também alguns riscos associados a esse processo. Alguns desses riscos incluem:

1. Aumento da complexidade: à medida que mais nós são adicionados ao sistema, a


complexidade da arquitetura e do gerenciamento do sistema aumenta
significativamente, o que pode levar a erros e problemas de gerenciamento.
2. Problemas de sincronização: quanto mais nós existirem no sistema, maior será a
probabilidade de ocorrerem problemas de sincronização, como conflitos de acesso
a recursos compartilhados, o que pode levar a problemas de consistência de dados.
3. Problemas de desempenho: o aumento da escala do sistema pode levar a
problemas de desempenho, como latência ou gargalos de rede, que podem afetar
a qualidade do serviço para os usuários.
4. Aumento de custos: à medida que mais recursos são adicionados ao sistema, os
custos de hardware, energia e manutenção aumentam significativamente, o que
pode tornar a escalabilidade financeiramente inviável.
5. Vulnerabilidade de segurança: quanto mais complexo o sistema, maior será o
número de pontos de entrada potenciais para ataques cibernéticos, o que pode
aumentar o risco de violações de segurança.

Você também pode gostar