Escolar Documentos
Profissional Documentos
Cultura Documentos
Controle de
concorrência
Transação
– As transações são originárias dos sistemas de gerenciamento de
banco de dados.
• Neste contexto, uma transação é a execução de um “programa” que
acessa um banco de dados.
o É um conjunto de uma ou mais operações que compõem uma
única tarefa ou unidade lógica de trabalho a ser executada.
– No contexto de um servidor de arquivo transacional (sistemas
distribuídos), uma transação é a execução de uma sequência de
requisições de cliente para operações de arquivo.
– Do ponto de vista do cliente, uma transação é uma sequência de
operações que formam um único passo, transformando os dados do
servidor de um estado consistente para outro.
Transação
– As transações podem ser fornecidas como parte do middleware.
o O CORBA (Common Object Request Broker Architecture)
fornece a especificação de um OTS (Object Transaction
Service) com interfaces IDL (Interface Definition Language) que
permitem às transações dos clientes incluírem diversos objetos
em vários servidores.
o São fornecidas operações para o cliente especificar o início e o
fim de uma transação.
o O cliente ORB (Object Request Broker) mantém um contexto
para cada transação, o qual propaga com cada operação nessa
transação.
o No CORBA, os objetos transacionais são invocados dentro do
escopo de uma transação e geralmente têm algum meio de
armazenamento persistente associado.
Transação
destrava A, B
Travas - two-phase locking
– A equivalência serial exige que todos os acessos de uma transação a um
objeto em particular sejam dispostos em série com relação aos acessos
feitos por outras transações.
o Todos os pares de operações conflitantes de duas transações
devem ser executados na mesma ordem.
o Para garantir isso, uma transação não pode solicitar novas
travas após ter liberado uma.
o É utilizado o 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).
Travas - Strict two-phase locking
– Como as transações podem ser canceladas, são necessárias execuções
restritas para evitar
o Leituras sujas e
o Escritas prematuras.
– Sob um regime de execução restrita, uma transação que precise ler ou
escrever um objeto deve ser retardada até que outras transações que
escreveram o mesmo objeto tenham sido confirmadas ou canceladas.
– Para impor essa regra, todas as travas aplicadas durante o andamento de
uma transação são mantidas, até que a transação seja confirmada ou
cancelada (Strict two-phase locking).
– A presença do travamento impede que outras transações leiam ou escrevam
os objetos.
– Quando uma transação é confirmada, para garantir a capacidade de
recuperação, os travamentos devem ser mantidos até que todos os
objetos que ela atualizou tenham sido persistidos.
Travas - Granulidade
– É um requisito importante no controle de concorrência
o Pois a abrangência do acesso concorrente aos objetos em um servidor
será seriamente limitada, caso o controle de concorrência (por exemplo,
travas) só possa ser aplicado a todos os objetos simultaneamente.
o Considerando as transações bancárias
o Se uma só trava fosse aplicada a todas as contas de uma agência,
somente um funcionário do banco poderia realizar uma transação online
em dado momento – dificilmente essa seria uma restrição aceitável!
A parte dos objetos à qual o acesso deve ser organizado em série
deve ser a menor possível.
Apenas a parte envolvida em cada operação solicitada pelas transações.
deposit e withdraw afetam o saldo de uma conta.
branchTotal afeta todos eles.
Travas - Protocolos
– Para que os protocolos funcionem corretamente, é fundamental que cada
operação de leitura e de escrita seja atômica em seus efeitos nos objetos.
– Os protocolos de controle de concorrência são projetados para suportar
conflitos entre operações de diferentes transações sobre o mesmo objeto.
o Pois a abrangência do acesso concorrente aos objetos em um
servidor será seriamente limitada, caso o controle de concorrência
(por exemplo, travas) só possa ser aplicado a todos os objetos
simultaneamente.
– Considerando as transações bancárias
o Se uma só trava fosse aplicada a todas as contas de uma agência,
somente um funcionário do banco poderia realizar uma transação online
em dado momento – dificilmente essa seria uma restrição aceitável!
Travas
– Regras de conflito das operações de leitura e de escrita
o 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.
o 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.
Travas
– É preferível adotar uma das estratégias de travamento abaixo, nunca ambas:
o Controle o acesso a cada objeto
Possibilita a existência de várias transações concorrentes lendo um
objeto
o Uma única transação escrevendo um objeto.
– Isso é normalmente referido como esquema de muitos leitores/um escritor
Travas
– Como funciona
o São usados dois tipos de travas: travas de leitura e travas de escrita.
Antes da operação de leitura
A transação solicita uma trava de leitura no objeto.
Antes que a operação de escrita
A transação solicita uma trava de escrita no objeto.
Quando for impossível alocar uma trava imediatamente, a transação
(e o cliente) deverão esperar até que isso seja possível
A requisição de um cliente nunca é rejeitada.
Travas
– Promoção da trava
o Refere à conversão de uma trava em uma outra mais forte – isto é, em
uma trava mais exclusiva.
Travas
– Promoção da trava
o O resultado é mais permissivo e pode possibilitar execuções de outras
transações que sejam inconsistentes com a equivalência serial.
Travas
– Promoção da trava
o Uma transação de leitura que queira se promover para trava de escrita
deve esperar as demais travas sejam liberadas.
Travas
– Regras para o uso de travas em uma implementação do travamento de duas
fases restrito (Strict two-phase locking)
Travas
– Implementação
o Implementada pelo
gerenciador de travas
o O gerenciador mantem o
conjunto de travas (tabela
hashing)
o Travas são instancias da
classe Lock e atribuidas a
um objeto em particular
Travas
– Implementação
o LockManager recebe
requisições de configurar
travas e libera-las
Travas
– Travamento de requisições aninhadas
o Um conjunto de transações aninhadas deve ser impedido de observar
efeitos parciais de quaisquer outras transações aninhadas.
o Uma transação de um conjunto é impedida de observar os efeitos
parciais de outras transações do conjunto.
Travas
– Regras de travas de transações aninhadas:
o As travas adquiridas por uma subtransação é herdada pela transação
ascendente quando quando concluída;
o As transações ascendentes não podem ser executadas
concorrentemente com suas transações descendentes;
o As subtransações no mesmo nível podem ser executadas
concorrentemente
Travas
– Aquisição e liberação de travas (transações aninhadas)
o Para que uma subtransação adquira uma trava de leitura sobre um
objeto, nenhuma outra transação ativa pode ter uma trava de escrita
sobre esse objeto, e as únicas detentoras de uma trava de escrita são
suas ancestrais.
o Para que uma subtransação adquira uma trava de escrita sobre um
objeto, nenhuma outra transação ativa pode ter uma trava de leitura ou
escrita sobre esse objeto, e as únicas detentoras de travas de leitura e
escrita sobre esse objeto são suas ancestrais.
o Quando uma subtransação é confirmada, suas travas são herdadas por
sua ascendente, permitindo que esta mantenha as travas no mesmo
modo que a descendente.
o Quando uma subtransação é cancelada, suas travas são descartadas.
Se a ascendente já possui as travas, ela pode continuar a mantê-las.
Travas
– Impasses (deadlocks)
o O impasse é um estado no qual cada membro de um grupo de
transações está esperando que algum outro membro libere uma trava.
Travas
– Impasses (deadlocks)
o Grafo ‘Espera por’
Utilizado para representar os relacionamentos de espera entre
transações correntes
Travas
– Impasses (deadlocks)
o Prevenção de impasse:
Travar todos os objetos no inicio da transação;
Solicitação de travas em ordem predefinida
o Travas Upgrade;
O Concurrency Control Service do CORBA apresenta um terceiro
tipo de trava, chamada de upgrade, cuja utilização se destina a evitar
impasses.
Deve ser solicitado pelo cliente
o Detecção de impasse:
Detecta ciclo no grafo ‘espera por’ (pode estar no gerenciador de
travas);
Remove uma transação (por idade, numero de ciclos envolvidos, etc)
Travas
– Impasses (deadlocks)
o Tempo Limite (Timeouts)
Transações são invulneráveis por um período
Passado o período, a trava se torna vulnerável;
Apresenta problemas:
Pode não haver um impasse;
Sistemas sobrecarregados poderão apresentar elevados números de
travas vulneráveis;
É necessário decidir o tempo limite para uma transação
Pode ser usado com detecção de impasse, se tornando muito útil;
Travas
– Impasses (deadlocks)
o Solução de impasse com timeout
Cada trava recebe um período de tempo limitado, durante o qual ela
é invulnerável. Após esse tempo, a trava se torna vulnerável.
Desde que nenhuma outra transação esteja competindo pelo objeto
travado, um objeto com uma trava vulnerável permanece travado.
Entretanto, se qualquer outra transação estiver esperando para
acessar o objeto protegido por uma trava vulnerável, a trava será
quebrada (isto é, o objeto será destravado) e a transação em espera
será retomada.
A transação cuja trava foi quebrada normalmente é cancelada.
Travas
– Impasses (deadlocks)
o Solução de impasse com timeout
Travas
– Impasses (deadlocks)
o Solução de impasse com timeout
Existem muitos problemas no uso de tempos limites como solução
para impasses:
O pior deles é que, às vezes, as transações são canceladas porque
suas travas se tornam vulneráveis quando outras transações estão
esperando por elas, mas, na verdade, não há nenhum impasse.
Travas
– Aumento da concorrência em esquemas de travamento
o Travamento de duas versões;
o Travas hierárquicas;
Travas
– Aumento de concorrência:
o Travamento de duas versões;
Sistema otimista;
Grava uma versão tentativa do objeto;
Travas de leitura esperam caso outra trava esteja confirmando o
objeto;
Pode causar impasses;
Transações podem ter que esperar o serem canceladas;
Permite mais concorrência;
Utiliza três tipos de trava: Leitura, escrita e confirmação
Travas
– Aumento de concorrência:
o Travamento de duas versões;
Travas
– Aumento de concorrência:
o Travas hierárquicas:
Coexistência de diferente níveis de granularidade;
Configurar uma trava ascendente tem o mesmo efeito que configurar
todas as travas descendentes;
Travas
– Aumento de concorrência:
o Travas hierárquicas:
Possui as seguintes travas:
Leitura
Escrita
Intenção de Leitura
Intenção de Escrita
Controle de concorrência otimista
– Motivação
o Travas podem ter um custo muito alto;
o O uso de travas pode resultar em impasses.
o As soluções para impasses não são totalmente aceitáveis para sistemas
interativos.
o Travas precisam aguardar até o final da transação para evitar cancelamento
em cascata.
Controle de concorrência otimista
– Funcionamento:
o As transações podem fluir normalmente como se não houvesse possibilidade
de conflito;
o Ao chamar a função closeTransaction é feita uma validação;
Controle de concorrência otimista
– Fases:
o Fase do trabalho
É criada uma versão tentativa;
Leituras são realizadas imediatamente (Pegando versão mais
recente ou versão tentativa);
Escritas são realizadas na versão tentativa;
Possui lista de objetos lidos e escritos;
Controle de concorrência otimista
– Fases:
o Fase de validação
Executada na chamada da função closeTransaction;
Verifica se há conflitos com operações de outras transações
o Fase de atualização
Caso as alterações sejam validadas elas se tornam permanentes;
Transações apenas de leitura são confirmadas imediatamente após a
validação;
Transações de escrita estarão serão confirmadas após o registro em
armazenamento permanente.
Controle de concorrência otimista
– Validação de transação
o Garante que a transação é serialmente equivalente com as transações
sobrepostas;
o No inicio da fase da validação as transições ‘recebem’ um numero inteiro;
o Números sequenciais ascendentes (posição no tempo);
o Se a validação for validada com sucesso o numero permanece igual;
o Se a validação falhar ou se a transação for apenas de leitura o numero é
passado para uma transação posterior;
o Transações sempre terminam a fase de trabalho após transações com
números inferiores
Controle de concorrência otimista
– Validação de transação
o O teste de validação na transação Tv é baseado no conflito entre operações
em pares de transação Ti e Tv.
o Para que uma transação Tv seja disposta em série com relação a uma
transação sobreposta Ti, suas operações devem obedecer às seguintes
regras:
Controle de concorrência otimista
– Validação de transação
o Uma regra que garanta que apenas uma transação estará na fase de
validação e atualização garante a regra 3;
o Validação devem garantir que as regras 1 e 2 sejam obedecidas;
o Podem ser de dois tipos: backward e forward
Controle de concorrência otimista
– Validação de transação
o Validação para trás (backward):
As operações de leitura das transações sobrepostas foram feitas
antes da validação corrente; (regra 1)
Verifica se os objetos lidos entram em conflito com objetos escritos
de transações sobrepostas (regra 2);
Caso positivo, a validação falha;
Apenas a transação sendo validada pode ser cancelada;
Operações de leitura não precisam ser validadas;
Controle de concorrência otimista
– Validação de transação
o Validação para frente (forward):
O conjunto de escrita da transação validada é comparado com todos
os objetos lidos da transações ativas sobrepostas (fase de trabalho)
(regra 1);
A regra 2 é satisfeita automaticamente, uma vez que as transações
ativas só escrevem após a transação validada tiver terminado;
O conjunto de leitura das transações ativas pode mudar;
Como as transações comparadas estão ativas, há a possibilidade de
cancelar a transação corrente ou tratar as demais;
Opções: Adiar a validação até um momento posterior, Cancelar
todas as transações ativas, Cancelar a transação que está sendo
validada
Controle de concorrência otimista
– Inanição
o Processo de impedir que uma transação seja capaz de ser confirmada.
o Quando uma transação é cancelada,
Normalmente, será reiniciada pelo programa cliente,
Mas não há garantia que será validada
Pois, sempre que é reiniciada, ela pode entrar em conflito com
outras transações no uso de objetos.
Ordenação por carimbo de tempo
– xxxxxx
o xxxxxx
xxxxx
xxxxx
xxxxx
Comparação dos métodos
– xxxxxx
o xxxxxx
xxxxx
xxxxx
xxxxx
Exercícios