sistemas distribuídos · •atomicidade: ou todas as operações de uma transação têm seus...
Post on 11-Aug-2020
0 Views
Preview:
TRANSCRIPT
Sistemas Distribuídos
Transações
Vinícius Fernandes Soares Mota
DECSI/ICEA UFOP 1
Transações
• Transação: Unidade lógica de trabalho • abrange um conjunto de operações de manipulação de dados que
executam uma única tarefaConecta ao Banco de Dados
Começa transação
Operações de consulta/atualização
...
Finaliza transação
Começa transação
Operações de consulta/atualização
...
Finaliza transação
Desconecta
DECSI/ICEA UFOP
2
parcialmente efetivada
Transações
• Exemplo: Um banco de dados...
• Transição de Estados de Execução
ativa efetivada
encerradafalha
begin (start) transaction
end
transaction commit
abort
(rollback)
read,
write
abort
(rollback)
DECSI/ICEA UFOP
3
Transações
• O que acontece se a energia acabar no meio de uma transação, ou se houver um problema com o disco?
• O que acontece quando duas transações executam simultaneamente manipulando o mesmo dado?
Pode ocorrer a um estado inconsistente...
DECSI/ICEA UFOP
4
Transações –Propriedades ACID
• Atomicidade
• Consistência
• Isolamento
• Durabilidade
DECSI/ICEA UFOP
5
Transações –Propriedades ACID• Atomicidade: ou todas as operações de uma transação
têm seus efeitos registrados no sistema ou então nenhuma delas é registrada (tudo-ou-nada).
• Consistência: uma transação deve provocar uma transição do sistema de um estado consistente para outro estado consistente.
• Isolamento: a execução de uma transação não deve interferir na execução de nenhuma outra transação
• Durabilidade: uma vez completada, a transação é registrada em algum meio de armazenamento permanente
DECSI/ICEA UFOP
6
Operações em uma conta bancária usados numa transação
• deposit(amount)• deposita amount na conta
• withdraw(amount)• retira amount da conta
• getBalance() -> amount• retorna o balance da conta
• setBalance(amount)• Altera balanço da conta
• Transação T:• a. withdraw(100);• b. deposit(100);• c. withdraw(200);• b. deposit(200);
DECSI/ICEA UFOP
7
Operações no coordenador da transação• openTransaction() -> trans;
• Inicia nova transação e divulga um TID (idendificador de transação) único.
• closeTransaction(trans) -> (commit, abort);• Finaliza uma transação: um commit significa que a
transação foi efetuada com sucesso; um abort indica que ela não foi completada.
• abortTransaction(trans);• aborta a transação.
DECSI/ICEA UFOP
8
Ciclos de vida de uma transação
DECSI/ICEA UFOP
Bem sucedida Abortada pelo Cliente Abortada pelo Servidor
openTransaction openTransaction openTransactionoperação operação operaçãooperação operação peração
Servidor aborta
transação
operação operação ERRO em operaçãoReportado ao cliente
closeTransaction abortTransaction
9
Controle de Concorrência
• Execução Serial (sequencial):
• Execução Intercalada:
tempot2t1 t3
AB
tempot2t1 t3
A
B
A
B
t4 t5
DECSI/ICEA UFOP
10
Controle de Concorrência
• Execução Serial (sequencial): diversas transaçõesexecutadas em sequência• deixa a base de dados em estado correto e consistente
• Execução Intercalada: comandos de diversas transaçõessão intercalados• pode levar a inconsistências
Isolamento Concorrência Chance de inconsistências
Serial
Intercalada
DECSI/ICEA UFOP
11
Execução Serial X Intercalada
• Execução serial• estado inicial correto e consistente estado final correto e
consistente
DECSI/ICEA UFOP
12
Execução Serial X Intercalada
• Execução Intercalada• Toda execução serial é consistente
• Mas uma execução intercalada só é consistente se for igual aoresultado de uma execução em sequência (em ordemconhecida)• esta execução é dita serializável
DECSI/ICEA UFOP
13
Controle de concorrência
•Problemas de Execução Intercalada1. Problema da atualização perdida2. Recuperações inconsistentes
DECSI/ICEA UFOP
14
Problema da perda de atualização (lost update problem)
DECSI/ICEA UFOP
Transaction T :
balance = b.getBalance();
b.setBalance(balance*1.1);
a.withdraw(balance/10)
Transaction U:
balance = b.getBalance();
b.setBalance(balance*1.1);
c.withdraw(balance/10)
balance = b.getBalance(); $200
balance = b.getBalance(); $200
b.setBalance(balance*1.1); $220
b.setBalance(balance*1.1); $220
a.withdraw(balance/10) $80
c.withdraw(balance/10) $280
Lin
ha d
o t
em
po
a = $100 b = $200 c = $300
15
Problema de recuperações incosistentes
DECSI/ICEA UFOP
Lin
ha d
o t
em
po
a = $200 b = $200
Transaction V :
a.withdraw(100)
b.deposit(100)
Transaction W:
aBranch.branchTotal()
a.withdraw(100); $100
total = a.getBalance() $100
total = total+b.getBalance() $300
total = total+c.getBalance()
b.deposit(100) $300
16
Equivalência Serial
Se cada uma de várias transações tem o efeito correto quando executada sozinha, podemos inferir que, se essas transações forem executadas uma por vez, em alguma ordem, o efeito combinado também será correto
DECSI/ICEA UFOP
Uso da equivalência serial como critério para uma execução
concorrente correta evita a ocorrência de atualizações perdidas e
recuperações inconsistentes.
17
Equivalência serial
• Todos os acessos a um dado devem ser serializados em relação às transações.
• Protocolos de controle de concorrência devem serializar as transações.
• Soluções para concorrência de transações:• Travamento com controle distribuído de deadlocks: dado escrito por
uma transação é atravado até o final da transação.• Controle otimista de concorrência: supõe-se que não ocorrerá
conflito. Na hora do commit, verifica-se problemas de concorrência. Uma das transações envolvidas no problema deve dar um abort.
• Rótulos de tempo: cada trasação tem um tempo associado e os dados tem o tempo do último acesso armazenado. Transações abortam quando descobrirem que executaram uma operação tarde demais (por exemplo, perderam uma atualização).
DECSI/ICEA UFOP
18
Equivalência Serial
DECSI/ICEA UFOP
Lin
ha d
o t
em
po
Transaction T:
balance = b.getBalance()
b.setBalance(balance*1.1)
a.withdraw(balance/10)
Transaction U:
balance = b.getBalance()
b.setBalance(balance*1.1)
c.withdraw(balance/10)
balance = b.getBalance() $200
b.setBalance(balance*1.1) $220balance = b.getBalance() $220
b.setBalance(balance*1.1) $242
a.withdraw(balance/10) $80
c.withdraw(balance/10) $278
Do exemplo de atualização perdida
19
Equivalência Serial
DECSI/ICEA UFOP
Lin
ha d
o t
em
po
Como solucionar o problema de recuperações
inconsistentes por equivalência serial?
Transaction V :
a.withdraw(100)
b.deposit(100)
Transaction W:
aBranch.branchTotal()
a.withdraw(100); $100
total = a.getBalance() $100
total = total+b.getBalance() $300
total = total+c.getBalance()
b.deposit(100) $300
20
Equivalência Serial
DECSI/ICEA UFOP
Lin
ha d
o t
em
po
Como solucionar o problema de recuperações
inconsistentes por equivalência serial?
Transaction V :
a.withdraw(100);
b.deposit(100)
Transaction W:
aBranch.branchTotal()
a.withdraw(100); $100
b.deposit(100) $300
total = a.getBalance() $100
total = total+b.getBalance() $400
total = total+c.getBalance()...
21
Regras para conflito das operações read e write
Operações que dependem da ordem em que foram executas
DECSI/ICEA UFOP
Operações das váriastransações
Conflito Razão
read read Não Porque um par de operações de leitura não
dependem da ordem em que foram executadas
read write Sim A ordem altera o resultado final
write write Sim A ordem altera o resultado final
22
Erro de leitura (dirty read) quando a transação T aborta
DECSI/ICEA UFOP
Transaction T:
a.getBalance()
a.setBalance(balance + 10)
Transaction U:
a.getBalance()
a.setBalance(balance + 20)
balance = a.getBalance() $100
a.setBalance(balance + 10) $110
balance = a.getBalance() $110
a.setBalance(balance + 20) $130
commit transaction
abort transaction
23
Erro de leitura (dirty read) quando a transação T aborta
DECSI/ICEA UFOP
Transaction T:
a.getBalance()
a.setBalance(balance + 10)
Transaction U:
a.getBalance()
a.setBalance(balance + 20)
balance = a.getBalance() $100
a.setBalance(balance + 10) $110
balance = a.getBalance() $110
a.setBalance(balance + 20) $130
commit transaction
abort transaction
Resultado: O Objeto considerou o valor de 110 que nunca foi persistido de verdade!!!!
24
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A+100)
abort
Read(A)Write(A 0)
commit
tem
po
Exemplo 1:
• Transação T1: deposita R$100,00na conta A.
• Transação T2: saca tudo de A.
• T1 é cancelada
DECSI/ICEA UFOP
25
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A+100)
abort
Read(A)Write(A 0)
commit
tem
po
Exemplo 1:
• Transação T1: deposita R$100,00na conta A.
• Transação T2: saca tudo de A.
• T1 é cancelada
Resultado: foi possível sacar R$ 100,00 a mais.
DECSI/ICEA UFOP
26
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A-100)
Read(B)Write(B+100)
abort
Read(A)Write(A+1%)
Read(B)Write(B+1%)
commit
tem
po
Exemplo 2:
• Transação T1: transfereR$100,00 da conta A para aconta B.
• Transação T2: incrementa A e Bem 1% (juros).
DECSI/ICEA UFOP
27
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A-100)
Read(B)Write(B+100)
abort
Read(A)Write(A+1%)
Read(B)Write(B+1%)
commit
tem
po
Exemplo 2:inicialmente A = 500 e B = 600• resultado esperado: T1 (rollbacked)seguido de T2 é A = 505 (A+1%) e B =606 (B+1%)
• no entanto, com T1 e T2 em paralelo,o que se tem é: A = 404 (A - 100 + 1%)e B = 707 (B+100 + 1%)
DECSI/ICEA UFOP
28
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A-100)
Read(B)Write(B+100)
abort
Read(A)Write(A+1%)
Read(B)Write(B+1%)
commit
tem
po
Exemplo 2:A = 500 e B = 600• resultado esperado: T1 (rollbacked)seguido de T2 é A = 505 (A+1%) e B =606 (B+1%)
• no entanto, com T1 e T2 em paralelo,o que se tem é: A = 404 (A - 100 + 1%)e B = 707 (B+100 + 1%)
Dirty read
Dirty read
DECSI/ICEA UFOP
29
Problemas de Execução Intercalada
• Ex: Leitura inválida (Dirty Read):
T1 T2
Read(A)Write(A-100)
Read(B)Write(B+100)
abort
Read(A)Write(A+1%)
Read(B)Write(B+1%)
commit
tem
po
Exemplo 2:Suponde que inicialmente A = 500 e B =600• resultado esperado: T1 (rollbacked)seguido de T2 é A = 505 (A+1%) e B =606 (B+1%)
• no entanto, com T1 e T2 em paralelo,o que se tem é: A = 404 (A - 100 + 1%)e B = 707 (B+100 + 1%)
Dirty read
Dirty read
Resultado: a transferência de R$ 100 de T1 foi sobrescrita e T2
considerou valores errados como base se cálculo de 1%. Ambos, A
e B estão errados.
DECSI/ICEA UFOP
30
Sobreleitura de valores não atualizados(uncommitted values)
DECSI/ICEA UFOP
Transaction T:
a.setBalance(105)
Transaction U:
a.setBalance(110)
$100
a.setBalance(105) $105
a.setBalance(110) $110
O que acontece se U for cancelada e T confirmada?
A=100
31
Sobreleitura de valores não atualizados(uncommitted values)
DECSI/ICEA UFOP
Transaction T:
a.setBalance(105)
Transaction U:
a.setBalance(110)
$100
a.setBalance(105) $105
a.setBalance(110) $110
O que acontece se U for cancelada e T confirmada?- O saldo fica de A fica $105
32
Sobreleitura de valores não atualizados(uncommitted values)
DECSI/ICEA UFOP
Transaction T:
a.setBalance(105)
Transaction U:
a.setBalance(110)
$100
a.setBalance(105) $105
a.setBalance(110) $110
O que acontece se U confirmada e depois T for cancelada ?
-
33
Sobreleitura de valores não atualizados(uncommitted values)
DECSI/ICEA UFOP
Transaction T:
a.setBalance(105)
Transaction U:
a.setBalance(110)
$100
a.setBalance(105) $105
a.setBalance(110) $110
O que acontece se U confirmada e depois T for cancelada ?
- T volta A para $100
34
Travas
• Método simples para forçar equivalência em série
• Servidor impede acesso a objeto travado
• Travamento de duas fases (two-phase locking).• A primeira fase de cada transação é uma fase de
crescimento, durante a qual as novas travas são adquiridas
• Na segunda fase, as travas são liberadas (uma fase de redução).
DECSI/ICEA UFOP
35
Travas
DECSI/ICEA UFOP
36
Transaction T:
balance = b.getBalance()
b.setBalance(bal*1.1)a.withdraw(bal/10)
Transaction U:
balance = b.getBalance()b.setBalance(bal*1.1)
c.withdraw(bal/10)
Operations Locks Operations Locks
openTransaction
bal = b.getBalance() lock B
b.setBalance(bal*1.1) openTransaction
a.withdraw(bal/10) lock A bal = b.getBalance() waits for T ’s
lock on B
closeTransaction unlock A, B
lock B
b.setBalance(bal*1.1)
c.withdraw(bal/10) lock C
closeTransaction unlock B, C
Compatibilidade de travas
Deve seguir as regras de conflito de operação:
1. Se uma transação T já executou uma operação de leitura sobre um objeto em particular, então uma transação concorrente U não deve escrever esse objeto até que T seja confirmada ou cancelada.
2. Se uma transação T já executou uma operação de escrita sobre um objeto em particular, então uma transação concorrente U não deve ler nem escrever esse objeto até que T seja confirmada ou cancelada.
DECSI/ICEA UFOP
37
Compatibilidade de travas
DECSI/ICEA UFOP
38
For one object Lock requestedread write
Lock already set none OK OK
read OK wait
write wait wait
Questões
DECSI/ICEA UFOP
Vinícius Fernandes Soares Mota
Transações
39
top related