추상화란 무엇인가?
추상화는 필요하지 않은 세부 사항을 난독화 하는 기술이다. 츠상화는 내면의 복잡성을 숨겨서 우리가 설정한 목표에 대해 더 폭넓게 이해하고 그에 집중할 수 있게 해주기 때문에 매우 중요하다
데이터베이스 추상화
트랜잭션은 동시 사용자가 데이터를 읽거나 쓰거나 변경할 때 문제가 되는 많은 결과를 숨기고 성공할 경우 커밋하고 실패할 경우 중단하는 간단한 인터페이스를 제공하는 데이터베이스 추상화이다. 어느 쪽이든 데이터는 하나의 일관된 상태에서 새로운 일관된 상태로 이동한다. 트랜잭션을 통해 최종 사용자는 동시 데이터 변경의 미묘한 코너 케이스로 인해 꼼짝 못하게 되는 것이 아니라 비즈니스 논리에 집중할 수 있다.
분산 시스템의 추상화
분산 시스템의 추상화는 엔지니어가 작업을 단순화하고 분산 시스템의 기본 복잡성을 처리하는 부담을 덜어주는 데 도움이 된다.
Amazon AWS, Google Cloud 및 Microsoft Azure와 같은 많은 대기업이 분산 서비스를 제공함에 따라 분산 시스템의 추상화가 인기를 얻었습니다. 이러한 분산 서비스 구현에 대한 세부 사항은 사용자에게 숨겨져 있으므로 개발자는 종종 매우 복잡한 분산 시스템의 깊이로 들어가지 않고 애플리케이션에 집중할 수 있다.
일관성
분산 시스템에서 일관성은 많은 것을 의미할 수 있다. 하나는 각 복제본 노드가 특정 시점에 동일한 데이터 보기를 갖는다는 것이다. 다른 하나는 각 읽기 요청이 최근 쓰기 값을 가져오는 것이다. 일관성에는 다양한 형태가 있으므로 이것이 일관성에 대한 유일한 정의는 아니며 일반적으로 일관성 모델은 동시 데이터 읽기, 쓰기 및 변형을 수행하는 분산 시스템의 정확성을 추론하기 위한 추상화를 제공한다.
일관성 스펙트럼의 두 끝은 다음과 같다.
- 가장 강력한 일관성
- 가장 약한 일관성
ACID는 데이터베이스 일관성의 핵심이다. 스키마에서 값이 고유해야 한다고 지정하는 경우 일관된 시스템은 모든 작업에서 값이 고유하도록 보장한다. 외래 키가 한 행을 삭제하면 관련 행도 삭제됨을 나타내는 경우 일관된 시스템은 기본 행이 삭제된 후에 상태가 관련 행을 포함할 수 없도록 보장한다.
CAP 일관성은 분산 시스템에서 동일한 논리 값의 모든 복제본이 항상 동일한 정확한 값을 갖도록 보장한다. 이것이 물리적인 보장이 아니라 논리적인 보장이라는 점은 주목할 가치가 있다. 클라이언트가 별도의 노드에서 다른 값에 액세스하는 것을 방지함으로써 클러스터는 논리적 그림을 제공할 수 있다.
최종 일관성(Eventual consistency)
최종 일관성은 가장 약한 일관성 모델이다. 엄격한 주문 요구 사항이 없고 최신 쓰기를 반환하기 위해 읽기가 필요하지 않은 애플리케이션은 이 모델을 선택한다.
최종 일관성은 유한한 시간이 지난 후 더 이상 쓰기가 들어오지 않을 때 모든 복제본이 최종 값으로 수렴되도록 보장한다. 새로운 쓰기가 계속 발생하면 최종적으로 일관된 시스템의 복제본은 결코 동일한 상태에 도달하지 못할 수 있다. 복제본이 수렴될 때까지 서로 다른 복제본이 서로 다른 값을 반환할 수 있다.
최종 일관성은 고가용성을 보장한다.
인과적 일관성(Causal consistency)
인과적 일관성은 작업을 종속 작업과 독립 작업으로 분류하여 작동한다. 종속 연산은 인과관계 연산이라고도 한다. 인과적 일관성은 인과적으로 관련된 작업의 순서를 유지한다.
이 모델은 인과관계가 없는 작업의 순서를 보장하지 않는다. 인과적 일관성은 전반적으로 약하지만 최종 일관성 모델보다 강력하다. 직관적이지 않은 동작을 방지하는 데 사용된다.
순차적 일관성(Sequential consistency)
순차적 일관성은 각 클라이언트 프로그램에서 지정한 순서를 유지한다. 그러나 순차적 일관성은 쓰기가 즉시 표시되거나 일부 글로벌 시계에 따라 발생한 것과 동일한 순서로 표시되도록 보장하지 않는다.
순차적 일관성은 인과적 일관성 모델보다 강력하다.
선형성(linearizability)
엄격한 일관성 또는 선형성은 가장 강력한 일관성 모델이다. 이 모델은 모든 복제본의 읽기 요청이 최신 쓰기 값을 얻도록 보장한다. 클라이언트가 쓰기 작업이 수행되었다는 승인을 받으면 다른 클라이언트가 해당 값을 읽을 수 있다.
선형화는 분산 시스템에서 달성하기 매우 어렵다. 이러한 문제가 발생하는 이유 중 일부는 다양한 네트워크 지연 및 장애 때문이다.
일반적으로 동기 복제는 강력한 일관성을 달성하기 위한 요소 중 하나이지만 그 자체만으로는 충분하지 않다. 강력한 일관성을 달성하려면 Paxos 및 Raft와 같은 합의 알고리즘이 필요할 수 있다.
실패 모델
분산 시스템의 세계에서는 실패가 명백하며 다양한 방식으로 나타날 수 있다. 실패는 순간적으로 발생하고 복구될 수도 있고, 장기간 지속될 수도 있습니다.
Fail-stop
이러한 유형의 오류에서는 분산 시스템의 노드가 영구적으로 중지된다. 그러나 다른 노드는 여전히 통신을 통해 해당 노드를 감지할 수 있다.
Crash
이러한 유형의 오류에서는 분산 시스템의 노드가 자동으로 중지되고 다른 노드는 해당 노드의 작동이 중지되었음을 감지할 수 없다.
Omission failures
누락 실패 에서는 노드가 메시지를 보내거나 받지 못한다.
누락 실패에는 두 가지 유형이 있습니다.
- 전송 누락 실패
- 노드가 들어오는 요청에 응답하지 못하는 경우
- 수신 누락 실패
- 노드가 요청 수신에 실패하여 이를 승인할 수 없는 경우
Temporal failures
일시적인 오류 에서는 노드가 올바른 결과를 생성하지만 너무 늦어서 유용하지 않는 경우이다. 이 오류는 잘못된 알고리즘, 잘못된 설계 전략 또는 프로세서 클럭 간의 동기화 손실로 인해 발생할 수 있다.
Byzantine failures
비잔틴 실패 에서 노드는 임의의 시간에 임의의 메시지를 전송하거나, 잘못된 결과를 생성하거나, 중간에 중지하는 등 임의의 동작을 나타낸다. 이는 대부분 악의적인 실체의 공격이나 소프트웨어 버그로 인해 발생한다. 비잔틴 실패는 처리하기 가장 어려운 실패 유형이다.
참고