Distributed Systems
Principles and Paradigms
Maarten van Steen
VU Amsterdam, Dept. Computer Science (Traduc¸ ˜ao e Adaptac¸ ˜ao Ricardo Anido - IC/Unicamp)
Conte ´udo
Cap´ıtulo 01: Introduc¸ ˜ao 02: Arquiteturas 03: Processos 04: Comunicac¸ ˜ao 05: Nomeac¸ ˜ao 06: Sincronizac¸ ˜ao07: Consist ˆencia & Replicac¸ ˜ao 08: Toler ˆancia a Falhas 09: Securanc¸a
10: Distribuic¸ ˜ao de Sistemas Baseados em Objetos 11: Sistemas de Arquivos Distribu´ıdos
12: Sistemas Distribu´ıdos Baseados na Web
13: Sistemas Distribu´ıdos Baseados em Coordenac¸ ˜ao
Processsos 3.1 Processos
Introduc¸ ˜ao a Threads
Ideia b ´asica
Construirprocessadores virtuaisem software, usando processadores f´ısicos:
Processador: prov ˆe um conjunto de instruc¸ ˜oes e mecanismos para executar
uma s ´erie dessas instruc¸ ˜oes
Thread: Um processador m´ınimo em software em cujocontextouma s ´erie
de instruc¸ ˜oes s ˜ao executadas. Salvar o contexto de uma thread implica parar a execuc¸ ˜ao corrente e salvar todos os dados necess ´arios para retomar a execuc¸ ˜ao posteriormente.
Processo: Um processador em software em que uma ou mais threads
podem ser executadas. Executar uma thread significa executar uma s ´erie de instruc¸ ˜oes no contexto dessa thread.
Processsos 3.1 Processos
Troca de contexto
ContextosContexto de processador: Conjunto m´ınimo de valores armazenados nos registros de um processador, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (apontador de pilha, apontador de programa, registradores gerais, etc.)
Contexto de Thread: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de processador, estado da pilha, etc.)
Contexto de Processo: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de thread, registradores de ger ˆencia de mem ´oria (MMU), etc.)
Processsos 3.1 Processos
Troca de contexto
ContextosContexto de processador: Conjunto m´ınimo de valores armazenados nos registros de um processador, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (apontador de pilha, apontador de programa, registradores gerais, etc.)
Contexto de Thread: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de processador, estado da pilha, etc.)
Contexto de Processo: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de thread, registradores de ger ˆencia de mem ´oria (MMU), etc.)
Processsos 3.1 Processos
Troca de contexto
ContextosContexto de processador: Conjunto m´ınimo de valores armazenados nos registros de um processador, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (apontador de pilha, apontador de programa, registradores gerais, etc.)
Contexto de Thread: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de processador, estado da pilha, etc.)
Contexto de Processo: Conjunto m´ınimo de valores armazenados em registradores e mem ´oria, usados para execuc¸ ˜ao de uma sequ ˆencia de instruc¸ ˜oes (contexto de thread, registradores de ger ˆencia de mem ´oria (MMU), etc.)
Processsos 3.1 Processos
Troca de contexto
Observac¸ ˜oes
1 Threads compartilham o mesmo espac¸o de enderec¸amento. Troca de contexto pode ser feita independente do systema operacional, em c ´odigo de usu ´ario.
2 Troca de processos ´e geralmente mais cara, envolve chamada de sistema.
3 Criar de destruir threads ´e muito mais barato do que criar e destruir processos.
Processsos 3.1 Processos
Threads e Sistemas Operacionais
Ponto principal
Kernel de OS deve prover threads, ou threads devem ser implementadas em bilbiotecas em n´ıvel de usu ´ario?
Soluc¸ ˜ao em espac¸o de usu ´ario
Todas as operac¸ ˜oes podem ser completamente realizadasdentro de um ´unico processo⇒ implementac¸ ˜oes podem ser muito eficientes.
Todosos servic¸os disponibilizados pelo kernel s ˜ao feitosem nome do processo em que a thread reside⇒ se o kernel decide bloquear uma thread, todo o processo ser ´a bloqueado (todas as outras threads desse processo ser ˜ao bloqueadas).
Threads s ˜ao usadas quando h ´a muitos eventos externos: threads bloqueiam com base em eventos⇒ se o kernel n ˜ao distingue threads, como pode sinalizar eventos para uma determinada thread?
Processsos 3.1 Processos
Threads e Sistemas Operacionais
Soluc¸ ˜ao no KernelIdeia ´e que kernel contenha implementac¸ ˜ao de threads; todos os servic¸os de thread feitos a partir de chamadas a sistemas
Operac¸ ˜oes que bloqueiam uma thread n ˜ao s ˜ao mais problema:kernel pode escolher outra threaddentro do mesmo processo.
Tratamento de eventos externos ´e simpleskernel(que captura todos os eventos)escolhe a thread associada ao evento.
O problema ´eperda de desempenhodevido ao fato de overhead introduzido por chamadas de systema.
Conclus ˜ao
Seria ideal ter um sistema de threads h´ıbrido, implementado em n´ıvel de usu ´ario e de kernel.
Processsos 3.1 Processos
Threads Solaris
Ideia b ´asicaIntroduziu uma abordagem em dois n´ıveis: processos lightweightque podem executar threads de usu ´ario.
Lightweight process Thread Kernel space User space LWP executing a thread Thread state Nota
Este conceito foi abandonado; hoje em dia implementac¸ ˜ao ´e no n´ıvel de usu ´ario (como em java) ou no n´ıvel de kernel.
Processsos 3.1 Processos
Threads e Sistemas Distribu´ıdos
Cliente Web MultithreadedEscondendo lat ˆencias de rede:
Navegador Web percorre p ´agina HTML, e descobre quemais arquivos devem ser buscados.
Cada arquivo ´e buscado usando uma thread separada, cada uma executando uma requisi ˜ao HTTP (bloqueante).
`
A medida que arquivos chegam, navegador mostra na tela. Multiplas chamadas request-reply para outras m ´aquinas (RPC)
Cliente executa v ´arias chamadas ao mesmo tempo, cada uma usando uma thread distinta.
Espera at ´e que todos os resultados sejam retornados.
Nota: se chamadas s ˜ao para servidores diferentes, podemos ter uma melhora de desempenho (speed-up)linear.
Processsos 3.1 Processos
Threads e Sistemas Distribu´ıdos
Melhora de desempenho
Criar thread ´emuitomais barato do que criar processo.
Servidor com uma ´unica thread inibe escalabilidade mesmo em caso simples desistema com m ´ultiplos processadores.
Em clientes: esconder lat ˆencia de redereagindo a pr ´oxima requisic¸ ˜ao enquanto anterior n ˜ao ´e respondida.
Melhor estrutura
Maioria de servidores t ˆem demanda alta de E/S. Uso de modelo simples e bem-conhecido dechamadas bloqueantessimplifica estrutura geral. Programas com m ´ultiplas thread tendem a sermenores e mais f ´aceis de entender e depurardevido aofluxo simplificado de controle.
Processsos 3.2 Virtualizac¸ ˜ao
Virtualizac¸ ˜ao
Observac¸ ˜aoVirtualizac¸ ˜aotem se tornado cada vez mais importante: Hardwaremuda mais rapidamentedo que software Facilidade deportabilidadee migrac¸ ˜ao de c ´odigo Isolamentode componentes falhos ou invadidos
Processsos 3.2 Virtualizac¸ ˜ao
Arquitetura de VMs
Observac¸ ˜aoVirtualizac¸ ˜ao pode ser realizada em n´ıveis distintos, dependendo fortemente dasinterfacesoferecidas pelos v ´arios componentes:
Processsos 3.2 Virtualizac¸ ˜ao
VMs de processo x VMs de arquitetura
Runtime system Runtime system Hardware Operating system Hardware Operating system Operating system Operating system ApplicationsVirtual machine monitor
(a) (b)
Runtime system Application
VM de Processos:Um programa compilado para um c ´odigo intermedi ´ario (port ´avel), que ´e executado em um sistema de execuc¸ ˜ao (Exemplo: Java VM).
VM de Arquitetura: Uma camada de software que imita uma arquitetura de hardware (conjunto de instruc¸ ˜oes + interfaces de dispositivos) ⇒ um sistema operacional completo e suas
aplicac¸ ˜oes podem ser providos (Exemplo: VMware, VirtualBox).
Processsos 3.2 Virtualizac¸ ˜ao
VM de arquitetura e sistemas operacionais
Na pr ´atica
H ´a v ´arios exemplos de VMs rodando em cima de sistemas operacionais.
Executamtraduc¸ ˜ao bin ´aria: durante execuc¸ ˜ao de uma aplicac¸ ˜ao ou sistema operacional, traduz intruc¸ ˜oes da m ´aquina virtual para o repert ´orio da m ´aquina real.
Cuidado comac¸ ˜oes sens´ıveis:chamadas a sistema,instruc¸ ˜oes privilegiadas.
Ac¸ ˜oes sens´ıveis s ˜ao trocadas por chamadas ao sistema da VM.
Processsos 3.3 Clientes
Clientes: Interfaces de usu ´ario
Ess ˆenciaA maior parte de software no lado do cliente ´e focado em interfaces (gr ´aficas) de usu ´ario.
X kernel Device drivers Application Xlib Xlib interface X protocol
Terminal (includes display keyboard, mouse, etc.) Application server
Application server User's terminal
Processsos 3.3 Clientes
Clientes: Interfaces de usu ´ario
Documentos compostos
Interface de usu ´ario ´e application-aware ⇒ comunicac¸ ˜ao entre aplicativos:
drag-and-drop: mover objetos na tela para invocar interac¸ ˜ao com outros aplicativos.
edic¸ ˜ao in-place:integrar v ´arios aplicativos no n´ıvel de interface de usu ´arios (por exemplo, processamento de texto + facilidades de desenho)
Processsos 3.3 Clientes
Software “Client-Side’
Geralmente implementados para transpar ˆencia de distribuic¸ ˜ao
transpar ˆencia de acesso: “stubs” client-side para RPCs
transpar ˆencia de localidade/migrac¸ ˜ao: deixar o software client-side manter (ou descobrir) localidade do servic¸o
transpar ˆencia de replicac¸ ˜ao: invocac¸ ˜oes m ´ultiplas tratadas por “stub” no cliente: Client machine
Replicated request
Server 1 Server 2 Server 3
Client side handles request replication Client appl. Server appl Server appl Server appl
transpar ˆencia de falhas: frequentemente podem ser colocadas somente no cliente (tentativa de mascarar falhas do servidor ou de comunicac¸ ˜ao).
Processsos 3.4 Servers
Servidores: Organizac¸ ˜ao Geral
Modelo B ´asicoUm servidor ´e um processo que espera por chegadas de requisic¸ ˜oes de servic¸os em enderec¸os de transporte espec´ıficos. Na pr ´atica, h ´a um mapeamento um-para-um entre uma porta e um servic¸o.
ftp-data 20 File Transfer [Default Data] ftp 21 File Transfer [Control] telnet 23 Telnet
24 any private mail system smtp 25 Simple Mail Transfer login 49 Login Host Protocol sunrpc 111 SUN RPC (portmapper) courier 530 Xerox RPC
Processsos 3.4 Servers
Servidores: Organizac¸ ˜ao Geral
Tipos de servidores
Superservidores: Servidores que escutam em v ´arias portas, i.e., prov ˆem v ´arios servic¸os independentes. Na pr ´atica, quando uma requisic¸ ˜ao de servic¸o chega, iniciam um subprocesso para tratar da requisic¸ ˜ao (UNIX inetd, internet service deamon)
Servidores Iterativos vs. servidores concorrentes: Servidores iterativos podem tratar de apenas um cliente por vez, em contraste com servidores concorrentes.
Processsos 3.4 Servers
Comunicac¸ ˜ao fora-de-banda
Ponto´
E poss´ıvelinterromperum servidor depois que ele aceitou (ou est ´a prestes a aceitar) uma requisic¸ ˜ao de servic¸o?
Soluc¸ ˜ao 1
Use uma porta separada para dados urgentes:
Servidor tem uma porta separada para mensagens urgentes para o processo/thread.
Mensagem urgente chega ⇒requisic¸ ˜ao associada ´e suspensa.
Nota: exige que o S.O. tenhasuporte escalonamento baseado em
prioridades. Soluc¸ ˜ao 2
Uso de comunicac¸ ˜ao fora-de-banda da camada de transporte: Exemplo: TCP permite mensagens urgentes na mesma conex ˜ao
Processsos 3.4 Servers
Comunicac¸ ˜ao fora-de-banda
Ponto´
E poss´ıvelinterromperum servidor depois que ele aceitou (ou est ´a prestes a aceitar) uma requisic¸ ˜ao de servic¸o?
Soluc¸ ˜ao 1
Use uma porta separada para dados urgentes:
Servidor tem uma porta separada para mensagens urgentes para o processo/thread.
Mensagem urgente chega ⇒requisic¸ ˜ao associada ´e suspensa.
Nota: exige que o S.O. tenhasuporte escalonamento baseado em prioridades.
Soluc¸ ˜ao 2
Uso de comunicac¸ ˜ao fora-de-banda da camada de transporte: Exemplo: TCP permite mensagens urgentes na mesma conex ˜ao
Processsos 3.4 Servers
Comunicac¸ ˜ao fora-de-banda
Ponto´
E poss´ıvelinterromperum servidor depois que ele aceitou (ou est ´a prestes a aceitar) uma requisic¸ ˜ao de servic¸o?
Soluc¸ ˜ao 1
Use uma porta separada para dados urgentes:
Servidor tem uma porta separada para mensagens urgentes para o processo/thread.
Mensagem urgente chega ⇒requisic¸ ˜ao associada ´e suspensa.
Nota: exige que o S.O. tenhasuporte escalonamento baseado em prioridades.
Soluc¸ ˜ao 2
Uso de comunicac¸ ˜ao fora-de-banda da camada de transporte: Exemplo: TCP permite mensagens urgentes na mesma conex ˜ao
Processsos 3.4 Servers
Servidores e Estado
Servidores sem estado (stateless)
Nunca precisam manter informac¸ ˜aoprecisasobre o cliente ap ´os tratar uma requisic¸ ˜ao:
N ˜ao lembram se um arquivo foi aberto (simplesmente fecham o arquivo ap ´os acesso)
N ˜ao prometem invalidar cache de cliente N ˜ao mant ´em quem s ˜ao os clientes Consequ ˆencias
Clientes e servidores s ˜aocompletamente independentes
Inconsist ˆencias de estadodevido a falhas (crash) no cliente ou servidor
s ˜ao reduzidas
Poss´ıvelperda de desempenhodevido, p.ex., servidor n ˜ao poder
antecipar comportamento do cliente (exemplo, prefetching de blocos de arquivos)
Processsos 3.4 Servers
Servidores e Estado
Servidores sem estado (stateless)
Nunca precisam manter informac¸ ˜aoprecisasobre o cliente ap ´os tratar uma requisic¸ ˜ao:
N ˜ao lembram se um arquivo foi aberto (simplesmente fecham o arquivo ap ´os acesso)
N ˜ao prometem invalidar cache de cliente N ˜ao mant ´em quem s ˜ao os clientes Consequ ˆencias
Clientes e servidores s ˜aocompletamente independentes
Inconsist ˆencias de estadodevido a falhas (crash) no cliente ou servidor
s ˜ao reduzidas
Poss´ıvelperda de desempenhodevido, p.ex., servidor n ˜ao poder antecipar comportamento do cliente (exemplo, prefetching de blocos de arquivos)
Processsos 3.4 Servers
Servidores e Estado
Question
Comunicac¸ ˜ao orientada a conex ˜ao “casa” com projeto stateless?
Processsos 3.4 Servers
Servidores e Estado
Servidores Stateful
Mant ´em estado de clientes:
Registra que arquivo foi aberto (pre-fetching pode ser feito) Sabe que dados o cliente tem no cache, e permite que clientes mantenham c ´opias locais de dados compartilhados
Observac¸ ˜ao
Odesempenho de servidores stateful pode ser excelente, desde que
clientes possam manter c ´opias locais. Confiabilidade n ˜ao ´e um grande
problema.
Processsos 3.4 Servers
Servidores e Estado
Servidores Stateful
Mant ´em estado de clientes:
Registra que arquivo foi aberto (pre-fetching pode ser feito) Sabe que dados o cliente tem no cache, e permite que clientes mantenham c ´opias locais de dados compartilhados
Observac¸ ˜ao
Odesempenho de servidores stateful pode ser excelente, desde que clientes possam manter c ´opias locais. Confiabilidade n ˜ao ´e um grande problema.
Processsos 3.4 Servers
Clusters de servidores: tr ˆes n´ıveis (tiers) distintos
Logical switch (possibly multiple)
Application/compute servers Distributed file/database
system
Client requests
Dispatched request
First tier Second tier Third tier
Elemento crucial
O primeiro n´ıvel ´e em geral respons ´avel por passar requisic¸ ˜oes para o servidor apropriado.
Processsos 3.4 Servers
Tratamento de requisic¸ ˜oes
Observac¸ ˜aoFazer o primeiro n´ıvel tratar todas as comunicac¸ ˜oes do/para o cluster pode levar agargalo.
Soluc¸ ˜ao
V ´arias, mas uma popular ´eTCP-handoff
Switch Client
Server
Server Request (handed off)Request
Response Logically a
single TCP connection
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Migrac¸ ˜ao de C ´odigo
Abordagem para migrac¸ ˜ao de c ´odigo Migrac¸ ˜ao e recursos locais
Migrac¸ ˜ao e sistemas heterog ˆeneos
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Migrac¸ ˜ao de C ´odigo: um pouco de contexto
Before execution After execution Client Server Client ServerProcesssos 3.5 Migrac¸ ˜ao de C ´odigo
Mobilidade Forte e Fraca
Componentes de objetos
Code segment: cont ´em o c ´odigo Data segment: cont ´em o estado
Execution state: cont ´em o contexto da thread executando o objeto
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Mobilidade Forte e Fraca
Mobilidade Fraca
Mover apenas segmentos de c ´odigo e dados (e reinicia execuc¸ ˜ao): Relativamente simples, se c ´odigo ´e port ´avel
Distinguecode shipping(push) decode fetching(pull)
Mobilidade Forte
Mover componente, incluindo estado de execuc¸ ˜ao
Migrac¸ ˜ao: mover objeto inteiro de uma m ´aquina para outra Cloning: iniciar um clone, e coloc ´a-lo no mesmo estado de execuc¸ ˜ao
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Gerenciando recursos locais
Problema
Um objeto usa recursos locais que podem ou n ˜ao estar dispon´ıveis na m ´aquina alvo.
Ligac¸ ˜ao recurso-m ´aquina (Tipos de recursos)
Fixo: recurso n ˜ao pode ser migrado, como hardware local (p. ex. de criptografia)
Colado (Fastened): recurso pode ser movido, mas custa caro Descolado (Unattached): recurso pode ser facilmente migrado junto com objeto (p. ex. cache)
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Gerenciando recursos locais
Ligac¸ ˜ao processo-recurso
Por identificador: o processo requer uma inst ˆancia espec´ıfica do recurso (p.ex. um banco de dados espec´ıfico)
Por valor: o processo requer o valor de um recurso (p.ex. um conjunto de entradas do cache)
Por tipo: o processo requer apenas que um recurso de tipo espec´ıfico seja dispon´ıvel (p.ex. uma tela colorida)
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Gerenciando recursos locais
Descolado Colado Fixo
ID MV (or GR) GR (or MV) GR
Valor CP (or MV, GR) GR (or CP) GR
Tipo RB (or MV, GR) RB (or GR, CP) RB (or GR)
GR = Estabelecer refer ˆencia global MV = Mover o recurso
CP = Copiar o valor do recurso
RB = Re-ligar a um recurso dispon´ıvel localmente
Processsos 3.5 Migrac¸ ˜ao de C ´odigo
Migrac¸ ˜ao em sistemas heterog ˆeneos
Problema principalA m ´aqunia alvo pode n ˜ao seradequada para executar o c ´odigo migrado
A definic¸ ˜ao de contexto de processo/thread/processador ´e altamente dependente do hardware local, sistema operacional e sistema de execuc¸ ˜ao
´
Unica soluc¸ ˜ao
Usar umam ´aquina abstrataque ´e implementada em plataformas diferentes:
Linguagens interpretadas, efetivamente tendo sua pr ´opria VM VM Virtuais (como discutido anteriormente)