승귤입니다

데이터 중심 어플리케이션 - 9장 일관성과 합의

일관성과 합의

  • 내 결함성을 지닌 시스템을 구축하는 가장 좋은 방법은 유용한 보장을 해주는 범용 추상화를 찾아 이를 구현하고 애플리케이션에서 이 보장에 의존하게 하는 것이다.
  • 분산 시스템에 가장 중요한 추상화는 합의 즉 모든 노드가 어떤 것에 동의하게 만드는 것이다. 네트워크 결함이나 프로세스 장애가 있더라도 신뢰성 있게 합의에 도달하는 것은 놀랄만큼 까다로운 문제다.
  • 합의의 문제를 해결하는 알고리즘

일관성 보장

  • 복제 데이터베이스는 대부분 최종적 일관성 을 제공한다.

    • 이는 매우 약한 보장이다. 언제 복제본이 수렴할지에 대해서는 아무것도 얘기하지 않는다.
  • 강한 일관성 모델을 살펴본다. 공짜가 아니다. 강한 보장을 제공하는 시스템은 성능이 나쁘거나 약한 보장을 제공하는 시스템보다 내결함성이 약할수 있다.

    • 선형성 을 살펴봄
    • 이벤트 순서화 문제를 검토
    • 분산 트랜젝션을 원자적으로 커밋하는 방법을 알아봄

선형성

  • 축구시합의 점수표시의 예가 나옴
  • 시스템에 데이터 복사본이 하나만 있고 그 데이터를 대상으로 수행하는 모든 연산은 원자적인 것처럼 보이게 만드는 것이 기본아이디어
  • 선형성은 최신성 보장(recency guarantee) 이다. 시스템에 데이터 복사본이 하나만 있고 그 데이터를 대상으로 수행하는 모든 연산은 원자적인 것처럼 보이게 만드는 것이 기본아이디어
  • (계산비용이 크긴하지만) 모든 요청과 응답 시점을 기록하고 그것들이 유효한 순차 순서로 배열되는지 확인함으로써 시스템의 동작이 선형적인지 테스트할 수도 있다.

선형성이 중요한 요구사항이 되는 몇가지 영역

  • 잠금과 리더 선출
  • 제약조건과 유일성 보장
  • 채널 간 타이밍 의존성

선형성 시스템 구현하기

  • 단일리더 복제
  • 합의 알고리즘

CAP 정리

  • 애플리케이션이 선형성을 요구하고 네트워크 문제때문에 일부 복제 서버가 다른 복제 서버와 연결이 끊기면 일부 복제 서버는 연결이 끊긴 동안은 요청을 처리할 수 없다.
  • 애플리케이션에서 선형성을 요구하지 않는다면 각 복제 서버가 다른 복제서버와 연결이 끊기더라도 독립적으로 요청을 처리하는 방식으로 쓰기를 처리할 수 있다.

선형성이 없는 프로그램은 네트워크 문제에 더 강하다.

선형성 시스템 구현하기

  • 단일리더 복제
  • 합의 알고리즘-

이전글: 레일즈의 ActiveRecord 모델팁들
다음글: MIL 10월에 공부한 것들
(2019.5.13) made by seungkyoo