Skip to content

Commit

Permalink
sd
Browse files Browse the repository at this point in the history
  • Loading branch information
joaolscosta committed Mar 14, 2024
1 parent 7bacf64 commit f8a5a71
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 50 deletions.
51 changes: 1 addition & 50 deletions obsidian/.obsidian/workspace.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,54 +7,6 @@
"id": "fc1f865d8344f0ff",
"type": "tabs",
"children": [
{
"id": "8ed7802d95058e08",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "2Sem/SistDist/Teo/3ªAula.md",
"mode": "source",
"source": false
}
}
},
{
"id": "d1069e91a478be35",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "2Sem/SistDist/Teo/4ªAula.md",
"mode": "preview",
"source": false
}
}
},
{
"id": "21715a83464b2257",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "2Sem/SistDist/Teo/5ªAula.md",
"mode": "source",
"source": false
}
}
},
{
"id": "966a4a53e19cc8ab",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "2Sem/SistDist/Teo/6ªAula.md",
"mode": "source",
"source": false
}
}
},
{
"id": "b9cd6ad60720f497",
"type": "leaf",
Expand All @@ -67,8 +19,7 @@
}
}
}
],
"currentTab": 4
]
}
],
"direction": "vertical"
Expand Down
95 changes: 95 additions & 0 deletions obsidian/2Sem/SistDist/Teo/7ªAula.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,110 @@ Operações Deterministas.

### Canais Perfeitos

Garantem a entrega de mensagens ordenadas.

Retransmitem uma mensagem até que seja confirmada pelo destinatário.
Usam-se _ids_ e não se entregam mensagens com _id_ inferior a uma que já tenha sido entregue.

#### Difusão Fiável

Ou todos os destinatários recebem ou nenhum recebe.

Existe a __regular__ e a __uniforme__.

###### Regular

- Mensagem _m_ enviada para processos { _p1, p2, ..., pn_ } de um destes processos.
- Validade: se processo _pi_ envia _m_ então entregará mais tarde.
- Não-duplicação: nenhuma mensagem _m_ é entregue mais do que uma vez.
- _Não-criação_: se uma mensagem é entregue então foi enviada por um processo correto.
- Acordo: Se um processo correto entrega a mensagem então todos os processos corretos também a entregarão.

1. Emissor envia mensagem usando canais perfeitos para todos os membros do grupo.
2. Quando um outro recebe entrega-a à aplicação e reenvia para todos os membros do grupo.


#### Difusão Fiável Uniforme

Só muda:

- Acordo: Se um processo entrega mensagem então todos os processos corretos enviam.

1. Emissor envia mensagem usando os canais perfeitos para todos os membros do grupo.
2. Quando um outro recebe reenvia para todos os outros.
3. Quando um receber a mensagem _m_ de _f_ membros entrega a mensagem à aplicação.

- _f < N/2_

#### Difusão Atómica

- Se uma réplica recebe o pedido todas as réplicas recebem o pedido.
- Todas as réplicas recebem os pedidos pela mesma ordem.

# Algoritmos em caso de Falhas

### Ordem total baseada em sequenciador

- Mensagens enviadas para todas as réplicas usando um algoritmo de difusão fiável.
- Uma das réplicas é eleita líder, decide a ordem e envia esta info para as réplicas restantes.
- Quando existe uma falha por exemplo do líder pode acontecer um __estado incoerente__ (mensagens não ordenadas pelo líder, etc).

# Sincronia na Vista


> [!NOTE] Informalmente
> Permite mudar a filiação de um grupo de processos de uma orma que facilita a tolerância a faltas.
- Podem ser adicionados novos membtos a um grupo de processos.
- Um pode sair voluntariamente ou ser expulso caso falhe.

Exemplo:
• V1 = {p1, p2, p3}
• V2 = {p1, p2, p3, p4}
• V3 = {p1, p2, p3, p4, p5}
• V4 = {p2, p3, p4, p5}

Um processo é __correto__ se faz parte da lista _vi_ e da lista _vi+1_.

Se uma mensagem m é entregue à aplicação depois da vista Vi ser
entregue e antes da vista Vi+1 ser entregue, a mensagem m diz-se
que foi entregue na vista Vi.


#### Difusão Fiável Síncrona na vista

- Se um processo correto _p_ na vista _Vi_ envia uma mensagem _m_ na vista _Vi_,
então _m_ é entregue a _p_ na vista _Vi_
- Se um processo entrega uma mensagem m na vista Vi, todos os processos
correctos da vista Vi entregam m na vista Vi



> [!DEFINITION] Corolário
> Dois processos que entregam a vista Vi e a vista Vi+1 entregam exactamente o
mesmo conjunto de mensagens na vista Vi.



- Para mudar a vista é necessário obrigar as aplicações interromper temporariamente a transmissão de mensagens de forma a que o conjunto de mensagens a entregar na vista seja finito
- Para além disso, é necessário executar um algoritmo de coordenação para garantir que todos os processos correctos chegam a acordo sobre:
- Qual a composição da próxima vista
- Qual o conjunto de mensagens a entregar antes de mudar a vista


# Primário-secundário (agora concretizado)

Réplicas usam sincronia na vista para lidar com falha do primário:
• Quando o primário p, algum tempo depois será entregue nova vista sem p
• Quando nova vista é entregue e o anterior primário não consta nela, os restantes processos elegem o novo primário
• Pode ser o primeiro membro da nova vista
• Ou podemos usar outro algoritmo de eleição de líder
• O novo primário anuncia o seu endereço num serviço de nomes (para que os clientes o descubram)
Primário usa difusão fiável uniforme síncrona na vista para propagar novos estados aos secundários
• Só reponde ao cliente quando a uniformidade está garantida

# Replicação de máquina de estados (agora concretizado)

- Processos usam sincronia na vista
- Clientes usam difusão atómica síncrona na vista para enviar pedidos
para todas as réplicas

0 comments on commit f8a5a71

Please sign in to comment.