Safety와 Liveness

독수리박박·2023년 8월 18일
0
  • Safety: 시스템에 나쁜 일이 발생하지 않는다는 의미이며, 모든 정상적인 참여자는 같은 상태에 동의하여야 하고, 그 상태는 유효해야 한다. 노드는 잘못된 합의를 하지 않는다는 의미이다.

  • Liveness: 시스템은 항상 살아 있어야 한다는 의미이다. 결국에는 어떤 상태에 반드시 동의하고 모든 참여자는 동의한 상태에 도달해야 한다. 문제 없는 노드는 반드시 합의한다는 의미이다.

위 그림을 보면 Safety, Liveness, Fault Tolerance로 삼각형이 이루어져 있고 2가지 요소가 이어진 한 변마다 해당하는 합의 알고리즘이 적혀져 있다. 이 말은 곧 합의 알고리즘은 저 세가지 요소를 모두 충족할 수 없다는 것이다.


FLP Impossibility

Safety

만약 아무문제 없는 두 노드가 서로 다른 값으로 합의를 한다면 분기가 일어나게 된다. 같은 높이에 서로 다른 두 블록이 생성 되었다는 것이다. 따라서 이런일은 절대로 일어나서는 안된다. 이런 특성은 분산 시스템에서 합의(Consensus)의 Safety라고 말한다.

Liveness

합의는 언젠가는 이루어져야 헌더. 분산 시스템에서의 합의는 노드 간의 메시지를 주고 받으며 각 노드의 상태를 변경하면서 이루어진다. 이때 노드들은 무한 루프에 빠지지 않고 반드시 상태 변경이 종료가 되어야 한다. 이렇게 모든 노드가 문제 없이 합의를 할 수 있다면 Liveness가 보장된다고 한다.

FLP Theorem

Safety와 Liveness를 통틀어 FLP Impossibility라 말하고 이에 대한 수학적 증명을 학자들의 이름을 딴 FLP Theorem이라고 합니다.

따라서 합의 알고리즘을 선택한다는 것은 사실상 Safety와 Liveness 중 무엇을 선택하고 포기할지의 문제입니다.


Liveness over Safety

말 그대로 Liveness를 Safety보다 더 중요시 한다는 말이다.

대표적인 예로 비트코인이 있다. 비트코인은 창시자의 이름을 딴 나카모토 컨센서스(Nakamoto Consensus)를 합의 알고리즘으로 사용한다. 이 합의 알고리즘은 언제나 더 어려운 문제를 푼 체인이 있드면, 그 체인을 유효한 체인으로 판단한다.

즉, 현재 체인보다 만약 더 긴 체인을 만들 수 있는 해시 파워를 가지고 있다면 현재 합의된 블록을 다른 블록으로 대체할 수 있다. 이런 경우 완결성(Finality)이 보장되지 않았다고 말하지만 FLP Impossibility에 따르면 Liveness를 위해서 Safety를 포기했다고 말한다.

Finality

완결성은 일단 블록체인에 커밋되면 잘 구성된 모든 블록이 취소되지 않는다는 확인이다. 사용자는 거래가 완료되면 거래가 완료되기 전으로 돌아가지 않는다는 확신을 원하게 된다.


Safety over Liveness

역시 말 그대로 Liveness 보다 Safety를 더욱 중요시 한다는 말이다.

전통적으로 분산 시스템에서 연구되던 PBFT에 기반한 BFT계열 합의 알고리즘 들이 이쪽에 해당한다. 대표적으로 Cosmos에서 사용하는 Tendermint가 Safety를 중시하는 합의 알고리즘이다.

출처: https://sfbitcoindevs.wordpress.com/2015/01/21/tendermint-consensus-without-mining/

Tendermint는 하나의 라운드가 Propose, Prevote, Precommit의 3단계로 이루어 진다. 이 중, Prevote와 Precommit 스템에서 각각 2/3+1개 이상의 동의를 얻어야 합의가 이루어 진다. 만약 합의가 이루어지지 않는다면 블록은 생성되지 않고 어떤 상황에서도 두 개의 블록이 동시에 생성될 일은 없다. 따라서 Liveness는 보장되지 않는다.

FLP Impossibility가 증명했듯이 Safety가 보장되는 경우 어떤 방법을 사용해도 비동기 네트워크에서 Liveness를 보장할 수 없다. 그래서 BFT 계열에서는 다른 네트워크 모델에서 Liveness가 보장됨을 증명한다.

비동기 네트워크 모델에서는 메시지가 전송되는 것이 보장되는 시간이 없다. 그래서 Tendermint는 정해진 시간안에 메시지가 도달하는 것이 보장되지만 그 정해진 시간을 알 수 없다는 Partial Synchronous Network Model을 사용한다.

Partial Synchronous Network Model은 정해진 시간 내에 메시지가 도착하는 것이 보장된 모델이다. 다만 이 정해진 시간이 얼마인지 노드는 알 수 없다. 현실의 네트워크도 Omission Failure가 발생하지 않는 한 언젠가는 메시지가 도착하기 때문에 꽤 현실적인 모델이다.


BFT 계열 알고리즘은 추후에 더욱 자세히 설명하겠습니다!

0개의 댓글