Você está na página 1de 56

Transaes Distribudas

Ricardo Anido
MC704

Modelo de Transaes Distribudas


Transaes podem acessar dados em vrios ns. Cada n tem um gerente local de transaes, responsvel por Manter log para recuperao. Coordenar a execuo concorrente das transaes executando no n. Cada n tem um coordenador de transaes, responsvel por Iniciar a execuo de transaes que so originadas no n. Distribuir subtransaes para ns apropriados. Coordenar a terminao de transaes originadas no n, o que resulta na transao ser validada em todos os ns ou desfeita em todos os ns.

Arquitetura

GT3 GT2 CT2 CT3

GT1 CT1

N 3 N 2
3

N 1

Controle de Concorrncia
Protocolos baseados em locks Protocolos baseados em timestamp

Protocolos baseados em locks


Um lock (bloqueio) um mecanismo para controle de acessos concorrentes a um mesmo item de dados. Dados podem ser bloqueados em dois modos: Exclusivo (E). Dado pode ser escrito ou lido. Compartilhado (C). Dado pode ser apenas lido. Requisies de locks (lock-E ou lock-C) so feitas ao gerente de controle de concorrncia. Transao fica suspensa at que lock seja concedido.

Protocolos baseados em locks (cont.)


Matriz de compatibilidade de locks:
C E C Verdadeiro Falso E Falso Falso

Pode ser concedido um lock de um dado a uma transao se o lock solicitado compatvel com locks adquiridos por outras transaes para o mesmo dado. Se o lock no pode ser concedido, a transao que requer o lock suspensa at que todos os outros locks incompatveis sejam liberados pelas outras transaes.
6

Protocolos baseados em locks (cont.)


Exemplo de transao com locks:
T1: lock-C(A) read(A) unlock(A); lock-C(B) read(B) unlock(B) display(A+B)

Locks usados como acima no garantem seriao: se A e B forem atualizados entre as leituras de A e B, a soma mostrada estaria errada.
7

Protocolos baseados em locks (cont.)


Um protocolo para locks um conjunto de regras que todas as transaes devem seguir para requisitar e devolver locks. Os protocolos restringem o conjunto de escalonamentos possveis. Problemas que devem ser contornados: Deadlock No garantia de progresso (starvation, liveleness)

Deadlock
Considere o escalonamento parcial
T3
lockEx(B) read(B) B = B 50 write(B) lockCp(A) read(A) lockCp(B) lockEx(A)

T4

Nem T3 nem T4 podem prosseguir. Esta situao chamada de deadlock. Para tratar o deadlock necessrio desfazer T3 ou T4 (rollback), e liberando os locks adquiridos.
9

Falta de garantia de progresso


Considere: Uma transao T espera por um lockEx em um dado, enquanto uma sequncia de outras transaes requerem e adquirem um lockCp para o mesmo dado. A mesma transao T desfeita repetidamente devido a deadlock. T nunca progride. Potencial para deadlock existe na maioria dos protocolos baseados em locks; protocolos devem ser projetados de forma a garantir progresso.
10

Protocolo de lock em duas fases


Garante escalonamento serivel por conflito. Fase 1: Crescimento Transao pode requisitar novos locks. Transao no pode liberar locks. Fase 2: Encolhimento Transao pode liberar locks. Transao no pode requisitar novos locks.

11

Protocolo de lock em duas fases (cont.)

num. locks

fase 1

fase 2

tempo
12

Protocolo de lock em duas fases (cont.)


O protocolo garante seriao. Pode-se provar que transaes podem ser seriadas na ordem de seus pontos de lock (ponto onde transao adquiriu seu ltimo lock). O protocolo no garante inexistncia de deadlocks. Rollbacks em cascata so possveis. Para evitar rollback em cascata: protocolo de duas fases estrito transao deve manter locks exclusivos at validar. Protocolo de duas fases rigoroso - todos os locks devem ser mantidos. Transaes podem ser seriadas na ordem em que so validadas.
13

Protocolo de lock em duas fases (cont.)


Protocolo de duas fases estrito:

num. locks

fase 1

fase 2

libera locks compartihados

tempo
14

Protocolo de lock em duas fases (cont.)


Pode haver escalonamentos seriveis por conflito que no podem ser obtidos quando se usa lock de duas fases. No entanto, na ausncia de informao extra (por exemplo, ordem de acesso a dados), lock de duas fases necessrio, no seguinte sentido: Dada uma transao Ta que no obedece lock de duas fases, podemos encontrar uma transao Tb que usa lock de duas fases, e um escalonamento para Ta e Tb que no serivel por conflito.
15

Converso de locks
Protocolo de lock em duas fases com converso: Fase 1: pode requisitar lockCp sobre dado. pode requisitar lockEx sobre dado. pode converter lockCp em lockEx. Fase 2: pode liberar lock-Cp. pode liberar lock-Ex. pode converter lockEx em lockCp
16

Aquisio automtica de locks


Transao T invoca as operaes padro read/write, sem explicitar operaes de lock. Operao read(D) processada da seguinte forma:
if (T possue lock sobre D) read(D) else { se necessrio aguarda at que nenhuma outra transao tenha um lockEx sobre D concede lockCp sobre D a T read(D) }

17

Aquisio automtica de locks (cont.)


Operao write(D) processada da seguinte forma:
if (T possui lockEx sobre D) write(D) else { aguarda at que nenhuma outra transao tenha qualquer lock sobre D if (T possui lockCp sobre D) promove lock para lockEx sobre D else concede lockEx sobre D para T write(D) }

Todos os locks so liberados aps validao/aborto.


18

Implementao
Servidor de locks centralizado Fcil de gerenciar, mas ponto central de falha Servidor de locks distribudo Resolve o problema de falha, mas pode levar a deadlock distribudo.

19

Protocolos baseados em timestamp


Cada transao recebe uma timestamp (carimbo de tempo) quando iniciada. Uma nova transao Ti tem uma timestamp TS(Ti), tal que TS(Ti) > TS(Tj) para todas as transaes Tj j existentes. Protocolo gerencia execues concorrentes de forma que timestamps determinam a ordem de seriao. Mantm duas timestamps para cada dado D:
W-timestamp(D): maior timestamp de transaes que executaram write(D) com sucesso. R-timestamp(D): maior timestamp de transaes que executaram read(D) com sucesso.
20

Protocolos baseados em timestamp (cont.)


Protocolo garante que quaisquer operaes read/write conflitantes so executadas na ordem de timestamp. Suponha que transao T invoca read(D) Se TS(T) < W-timestamp(D), ento T necessita ler um valor de D que j foi escrito aps incio de T. A operao de read rejeitada, T desfeita. Se TS(T) W-timestamp(D), operao read executada. R-timestamp(D) recebe o valor max(Rtimestamp(D), TS(T)).
21

Protocolos baseados em timestamp (cont.)


Suponha que transao T invoca write(D) Se TS(T) < R-timestamp(D), ento valor que T est produzindo foi necessrio anteriormente (e sistema assumiu que no existiria). A operao de write rejeitada, T desfeita. Se TS(T) < W-timestamp(D), ento valor que T est produzindo obsoleto. A operao de write rejeitada, T desfeita. Caso contrrio, a operao de write executada. W-timestamp(D) recebe o valor TS(T).
22

Exerccio
T9: write(D)

Antes
TS-W=6 TS-R=7 TS-W= TS-R=

Depois ?? (complete)

23

Exerccio (cont.)
T7: write(D)

Antes
TS-W=6 TS-R=8 TS-W= TS-R=

Depois ?? (complete)

24

Exerccio (cont.)

D:
TS-W=6 TS-R=8

Qual o resultado em cada caso?

a) T7: read(D) b) T5: read(D) c) T9: read(D)

25

Exemplo de uso
Escalonamento parcial, transaes com timestamps 1, 2, 3, 4 e 5.
T1 T2
read(Y) read(Y) write(Y) write(Z) read(Z) read(Z) abort() read(X) write(Z) abort() write(X) write(Z)
26

T3

T4

T5
read(X)

Correo do protocolo baseado em timestamp


Protocolo garante seriao, j que arestas no grafo de precedncia so da forma:
transao com timestamp menor transao com timestamp maior

No h ciclos no grafo de precedncia. No h deadlock, j que transaes nunca esperam. Escalonamento pode no ser livre de cascata, e pode no ser recupervel.
27

Recuperao e ausncia de cascata


Problema com protocolo baseado em timestamps: Suponha Ti aborta, mas Tj leu dado escrito por Ti. Ento Tj deve abortar; se foi permitido que Tj tenha sido validada, escalonamento no recupervel. Mais: qualquer transao que leu dado escrito por Tj deve abortar. Isto pode levar a uma cascata de abortos.
28

Recuperao e ausncia de cascata (cont.)


Soluo: Estruturar transaes de forma que operaes write so executados ao final do processamento. Todas as operaes write formam uma ao atmica; nenhuma transao pode executar enquanto uma outra est em fase de escrita. Quando uma transao aborta, ela reiniciada com uma nova timestamp.
29

Regra escrita de Thomas


Uma modificao permite que operaes write que so obsoletas sejam ignoradas sob certas condies: Quando Ti tenta escrever dado D, se TS(Ti) < W-timestamp(D), ento Ti est escrevendo valor obsoleto. Ao invs de abortar Ti, operao write pode ser ignorada. Esta abordagem, conhecida como regra escrita de Thomas (Thomas write rule) permite maior potencial para concorrncia.
30

Mltiplas verses
Esquemas com verses mltiplas mantm verses antigas de dados para aumentar concorrncia. Podem ser baseados em Ordem de timestamp Lock de duas fases Cada atualizao efetuada com sucesso cria uma nova verso do dado. Timestamps so usadas para rotular verses

31

Mltiplas verses (cont.)


Quando read(Q) executado, o sistema seleciona uma verso apropriada de Q, com base na timestamp da transao. Desta forma, operaes de read nunca so bloqueadas, sendo executadas imediatamente.

32

Verses mltiplas com timestamp


Cada dado Q tem uma sequncia de verses <Q1, Q2, , Qn>. Cada verso Qk contm trs campos: contedo - o valor da verso Qk. R-timestamp(Qk) - timestamp da transao que criou a verso Qk. W-timestamp(Qk) - maior timestamp de uma transao que leu a verso Qk.

33

Verses mltiplas com timestamp (cont.)

Quando transao Ti cria nova verso Qk, Rtimestamp e W-timestamp so inicializadas com TS(Ti). Quando uma transao Ti l Qk e TS(Ti) > Rtimestamp(Qk), atualiza-se a R-timestamp.

34

Verses mltiplas com timestamp (cont.)


Suponha que transao Ti invoque uma operao read(Q). Seja Qk a verso de Q cuja W-timestamp seja menor ou igual a TS(Ti). Valor retornado o contedo da verso Qk.

35

Exerccio
Qual o valor lido?
T5

W-timestamp = 4

W-timestamp = 6 R-timestamp = 8 valor = 32

R-timestamp = 6 valor = 37

A) T5.read(Q) = B) T7.read(Q) =

36

Verses mltiplas com timestamp (cont.)


Suponha que transao Ti invoque uma operao write(Q). Seja Qk a verso de Q cuja W-timestamp seja menor ou igual a TS(Ti). Se TS(Ti) <= R-timestamp(Qk), ento Ti abortada. Seno, se TS(Ti) = W-timestamp(Qk), o contedo de Qk atualizado, seno uma nova verso de Q criada.

37

Exerccio
Complete com novas verses, conforme o caso
Ti

W-timestamp = 4

W-timestamp = 6 R-timestamp = 8 valor = 32

R-timestamp = 6 valor = 37

A) T5.write(Q, 29) B) T7.write(Q, 34) C) T8.write(Q, 23) D) T9.write(Q, 42)


38

Verses mltiplas com locking


Diferencia entre transaes de leitura apenas (readonly) e transaes de atualizao. Transaes de atualizao adquirem locks de leitura e escrita, e os mantm at o final da execuo (ou seja, transaes seguem lock de duas fases). Cada operao de write com sucesso resulta na criao de uma nova verso do dado. Cada verso do dado tem uma nica timestamp que o valor de um contador ts_counter, incrementado durante o processo de validao.
39

Verses mltiplas com locking (cont.)


A transaes de leitura apenas so atribudas timestamps com o valor corrente de ts_counter antes do incio de sua execuo. Quando uma transao de atualizao deseja ler um dado, deve obter um lock compartilhado. Ento, l a verso mais recente cria uma nova verso do item com timestamp = .

40

Verses mltiplas com locking (cont.)


Quando uma transao de atualizao Ti completa, processo de validao faz: Ti atribui a verses que criou a timestamp ts_counter+1. Ti incrementa ts_counter. Transaes de leitura apenas que iniciam aps Ti incrementar ts_counter acessaro valores atualizados por Ti. As que iniciam antes do incremento acessaro valores antes da atualizao de Ti. Portanto, somente escalonamentos seriveis sero produzidos.
41

Operaes de insero e remoo


Algumas transaes requerem outras operaes alm de read e write. Vamos considerar outras duas operaes: delete(Q), que remove um dado. insert(Q), que insere um dado. Tentativa de executar read(Q) depois que Q tenha sido removido, ou antes que tenha sido inserido, um erro lgico. Da mesma forma, um erro tentar remover um dado inexistente.
42

Operaes de remoo
Se ptrotocolo de lock de duas fases utilizado, necessrio bloquear o dado com lock exclusivo antes que ele possa ser removido. Se protocolo de timestamp utilizado, regra similar a write. Suponha que Ti deseje executar delete(D):

43

Operaes de remoo (cont.)


Se TS(T) < R-timestamp(D), ento valor que Ti iria remover foi lido por transao Tj com TS(Tj) > TS(Ti). A operao de delete rejeitada, Ti desfeita. Se TS(T) < W-timestamp(D), uma transao Tj com TS(Tj) > TS(Ti), gravou D. A operao de delete rejeitada, Ti desfeita. Caso contrrio, a operao de delete executada.

44

Operaes de insero
Operao insert(D) conflita com delete(D), read(D) e write(D), j que nenhum dado pode ser removido, lido ou escrito antes de existir. Uma vez que insert(D) atribui um valor para o dado D, operao deve ser tratada da mesma forma que write, tanto no protocolo de lock como no protocolo de timestamp.

45

Tratamento de deadlocks
Considere as seguintes transaes:
T1: write(X) write(Y) T2: write(Y) write(X)

Escalonamento com deadlock:


T1
lockEx(X) write(X) B = B 50 write(B) lockEx(Y) write(Y) wait lockEx(X) wait lockEx(Y)

T2

46

Tratamento de deadlocks (cont.)


Sistema est em deadlock se existe um conjunto de transaes tal que cada transao no conjunto est esperando outra transao no conjunto.
T1 T2 T4 T3

Protocolos de preveno de deadlock garantem que o sistema nunca entrar em deadlock.

47

Preveno de deadlocks
Algumas estratgias de preveno: Pr-declarao: requer que cada transao efetue lock de todos os seus dados antes do incio da execuo. Ordenao: Impor ordem parcial de todos os dados e requerer que uma transao efetue lock nos dados somente na ordem especificada.

48

Preveno de deadlocks (cont.)


Protocolos baseados em timestamp: Esquema wait-die (no preemptivo): Transao mais antiga pode esperar por mais recente. Transao mais recente nunca espera por mais antigas, so desfeitas. Problema: transao pode morrer vrias vezes at conseguir os dados desejados.

49

Preveno de deadlocks (cont.)


Protocolos baseados em timestamp: Esquema wound-wait (preemptivo) Transao mais antiga fere (fora rollback) transaes mais recentes, ao invs de esperar. Transaes mais recentes podem esperar por transaes mais antigas. Potencialmente gera menos rollback do que esquema wait-die.
50

Preveno de deadlocks (cont.)

Tanto no esquema wait-die quanto no wound-wait, uma transao desfeita reinicia com a mesma timestamp original. Dessa forma, transaes antigas tm precendncia sobre transaes recentes, o que evita starvation.

51

Preveno de deadlocks (cont.)


Protocolo baseado em timeout: Uma transao espera por um lock apenas durante um perodso especificado de tempo. Depois disso, a transao desfeita. Vantagens: deadlocks no ocorrem, simples de implementar. Problemas: pode ocorrer starvation, e difcil determinar bom valor para timeout.
52

Deteo de deadlocks
Deadlocks podem ser descritos por um grafo de espera (wait-for graph) G = (V, E) V o conjunto de vrtices (todas as transaes do sistema). E o conjunto de arestas, cada elemento um par ordenado Ti Tj.
T1 T2 T4 T3

53

Deteo de deadlocks (cont.)


Grafo de espera: Se Ti Tj, Ti espera que Tj libere lock de algum dado. Quando Ti requisita dado que Tj est utilizando, aresta Ti Tj introduzida no grafo. Esta aresta removida apenas quando Tj libera o lock do dado. O sistema apresenta deadlock se e somente se existe um ciclo no grafo de espera. Deve-se ento manter o grafo e verificar periodicamente se apresenta ciclo.

54

Deteo de deadlocks (cont.)


Grafos de espera:
T5 T1 T2 T3 T1 T2 T4 T4 Sem ciclo T5 Com ciclo T3

55

Recuperao de deadlocks
Quando dedlock detectado: Deve-se procurar uma vtima (transao que ser desfeita). Procurar selecionar a vtima que causar menor custo; para evitar starvation, incluir nmero de rollbacks no custo. Extenso do rollback: Total: aborta a transao e a reinicia. Parcial: efetuar rollback somente at o ponto onde deadlock quebrado.
56

Você também pode gostar