Programação Concorrente e Distribuída

Introdução à Programação Concorrente, Distribuída (e Paralela)

Aula 01 — Conceitos, sistemas distribuídos e arquitetura
Prof. Newton S. B. Miyoshi
newton.miyoshi@baraodemaua.br
Centro Universitário Barão de Mauá — Ribeirão Preto
Parte 1

Conceitos

O vocabulário essencial antes de projetar sistemas.

Pergunta!
?

Qual a diferença entre programação Distribuída, Concorrente e Paralela?

Prato de macarrão
Tigela de creme de chocolate
Um espectro de acoplamento

Distribuída · Concorrente · Paralela

DISTRIBUÍDAmúltiplos computadores em rede
CONCORRENTEtarefas progridem intercaladas
PARALELAexecução simultânea real
◀ menor acoplamentomaior acoplamento ▶

Programação Concorrente

Esquema de programação concorrente: dois processos, scheduler, fila e CPU
Concurrent programming scheme — processos compartilham uma CPU via escalonador (scheduler) e fila de processos.

Programação Paralela

Esquema de programação paralela: várias CPUs executando processos simultaneamente
Parallel programming scheme — múltiplas CPUs executam processos ao mesmo tempo.

Programação Distribuída

Esquema de programação distribuída: nós trocando mensagens por uma rede
Distributed programming scheme — nós independentes cooperam trocando mensagens pela rede.

Concorrência não é Paralelismo

Diagrama: Concurrency is NOT Parallelism
Concorrência trata de lidar com muitas tarefas; paralelismo trata de executá-las ao mesmo tempo.
Sistema distribuído na prática

Exemplo real: app de delivery (ex.: iFood)

App do Clientefaz o pedido
Catálogorestaurantes e cardápios
Pedidoscria e acompanha o pedido
Pagamentocobra o cliente
Entregarastreia o entregador
Message Broker (Kafka/RabbitMQ) + Bancos de dadosestado compartilhado entre serviços
Sistemas Distribuídos

O que é um Sistema Distribuído?

“Uma coleção de elementos de computação independentes que aparenta a seus usuários como um sistema único e coerente.”

  • Sistema construído com programação distribuída.
  • Elemento de computação (computador) = (node).

Sistema Distribuído: duas visões

Hardware

Computadores (nós) conectados por uma rede.

Software

Camada que dá a ilusão de um sistema único.

Características importantes de um SD

  • Sistema “aparentemente” único e coerente
    • Ilusão para usuários e desenvolvedores
    • Transparência da distribuição
      • Não se sabe qual nó realiza o processamento

A escala dos sistemas reais

Visualização da malha de microsserviços de Amazon e Netflix
Malha de serviços da Amazon e da Netflix — milhares de nós formando “um sistema só”.
A cola dos sistemas distribuídos

O que é um Middleware?

  • Camada do meio entre aplicações — abstração que facilita implementar SDs.
  • Atua como “broker” / corretor.
  • Define interfaces específicas.

Middleware: a mesma interface em todo lugar

Diagrama: camada de sistema distribuído (middleware) unificando SOs e aplicações
A camada de middleware oferece a mesma interface sobre sistemas operacionais e computadores diferentes.

Serviços providos por um Middleware

Comunicação

  • Remote Procedure Call (RPC)

Transação

  • Garante atomicidade
  • Todas as chamadas acontecem — ou nenhuma

Composição de serviços

  • Ex.: Google Maps

Confiabilidade

  • Qualidade dos dados
  • Entrega de mensagens
Atividade em grupo

Pesquisem exemplos reais

Em grupo, pesquisem e anotem pelo menos um exemplo real para cada categoria — sistemas, aplicativos, empresas ou tecnologias que vocês conheçam ou encontrem pesquisando.

Sistema Distribuídoqual sistema roda em vários computadores/nós, cooperando pela rede?
Programação Concorrentequal sistema lida com muitas tarefas intercaladas, disputando os mesmos recursos?
Programação Paralelaqual sistema executa tarefas de verdade ao mesmo tempo, em múltiplos processadores?

Preparem-se para compartilhar os exemplos e justificar a escolha com a turma.

Compartilhando

Possíveis respostas

Distribuído

  • WhatsApp, e-mail (SMTP)
  • Netflix, Amazon, iFood
  • DNS, sistema bancário

Concorrente

  • Sistema operacional (multitarefa)
  • Servidor web atendendo várias requisições
  • Navegador com várias abas/downloads

Paralelo

  • Renderização gráfica em GPU
  • Edição/compressão de vídeo (multi-core)
  • Treinamento de modelos de IA

Não há resposta única — o importante é justificar por que o exemplo se encaixa na categoria. Muitos sistemas reais combinam as três!

Parte 2

Arquitetura de Sistemas

System Design — middleware e componentes.

Projetar software é como projetar construções

Diferentes “plantas” descrevem o mesmo sistema sob perspectivas distintas.
Parte 3

Exemplos de arquiteturas reais

Sistemas distribuídos em diferentes domínios.

Saúde · Pacientes
Arquitetura de sistema de gestão clínica com CMS Knowledgebase
Portais de referência, registro e clínico integrados a uma base de conhecimento (CMS).
Diagrama de arquitetura de um sistema completo
Educação · Aulas
Arquitetura de plataforma de exames online em camadas
Plataforma de avaliação online em camadas (aplicação, processamento — Spark/Hadoop, infraestrutura).
Saúde · Hospitais
Plataforma REACTION de sistemas de informação em saúde
Sistemas de informação em saúde conectando pacientes, cuidadores e serviços.
Negócios · Vendas
Arquitetura corporativa em camadas de negócio e tecnologia
Arquitetura corporativa: camada de apresentação, processos de negócio e habilitadores de tecnologia.
Quadro colaborativo
Captura de um quadro do Miro com desenho de arquitetura
miro.com/app/board/uXjVOzLXl5c=
Nuvem · AWS
Diagrama de arquitetura na AWS com zonas de disponibilidade
Implantação em nuvem com múltiplas zonas de disponibilidade.
Processos de negócio
Fluxo de processo em notação BPMN
Fluxo de processo (BPMN) — a lógica de negócio que o sistema precisa suportar.
IoT · Portal de água
Arquitetura de um Water Portal integrando sensores e serviços
Integração de sensores, serviços externos e portal de dados.
Atividade em grupo

Cenário A — “Café com pão”

Nossa startup “Café com pão” cresceu! Precisamos projetar o sistema para dar suporte à rede de padarias e a toda a logística de entrega. Sua equipe é responsável por projetar esse ambiente.

Requisitos
Clientes se cadastram, assinam cestas e fazem pedidos avulsos por app móvel e web. Entregadores recebem pedidos por app móvel. Padarias credenciadas usam uma aplicação web para receber pedidos, preparar cestas e entregar. Clientes acompanham o pedido em tempo real e pagam pelo próprio app.

Desenhe uma ideia da arquitetura inicial desta solução!

Atividade em grupo

Cenário B — “BikeCare”

A “BikeCare” está revolucionando o mercado de manutenção de bicicletas. Projete o sistema que dá suporte à rede de oficinas credenciadas e à logística de coleta e entrega de bikes.

  • Clientes solicitam manutenção/personalização por app ou web; escolhem levar à oficina ou agendar coleta em casa.
  • Oficinas recebem pedidos e atualizam o status em tempo real (diagnóstico, peças, em andamento, concluído).
  • Entregadores recebem rotas de coleta/entrega e registram fotos antes/depois.
  • Pagamento pelo app, com notificações push e acompanhamento em tempo real.
  • Gerenciar estoque de peças integrado a fornecedores para reposição automática.

Ferramentas para desenhar arquiteturas

draw.io Excalidraw Lucidchart Google Slides Miro FigJam
Síntese

Exemplo de arquitetura de um sistema real

Diagrama de arquitetura: usuários passam por DNS, Load Balancer, Web Servers e Application Servers, que acessam Database e Cache; Load Balancer também aponta para Object Storage, e Application Servers para uma Message Queue que alimenta Worker Services, os quais também escrevem no Cache
Load balancer distribui a carga; workers processam tarefas assíncronas e também alimentam o cache — juntando vários conceitos desta aula numa arquitetura só.

Referências bibliográficas

  • TANENBAUM, A. S.; VAN STEEN, M. Distributed Systems. 3. ed. 2018. ISBN 978-90-815406-2-9. distributed-systems.net
  • GRAMA, A.; GUPTA, A.; KARYPIS, G.; KUMAR, V. Introduction to Parallel Computing. 2. ed. karypis/parbook
  • PALACH, J. Parallel Programming with Python. Packt Publishing, 2014.