분산 시스템에서 발생할 수 있는 문제들

jinwook han·2021년 11월 28일
0

데이터 시스템

목록 보기
3/7
post-thumbnail

데이터 중심 어플리케이션 설계 8장을 정리했습니다.
책을 기반으로 글을 썼지만, 임의의 추가 정보나 저의 주관적인 해석이 추가될 수 있습니다.
느낀 점은 책 저자의 견해가 아니라 저의 견해입니다.

서론

8장에서는 분산시스템의 여러 문제점들에 대해 다룬다.

내용 요약

분산시스템에서 자주 발생하는 문제 유형들로 네트워크 문제, 시각 문제, 노드 불능 판단 문제가 있다.
네트워크 통신이 더 자주 일어나기 때문에 네트워크 문제가 분산시스템에서 더 많이 발생한다.
분산시스템에서 노드 간 시간이 동기화가 안 될 수 있기 때문에, 시각 관련 문제가 생길 수 있다.
분산 환경에서 노드가 죽었다는 사실을 확정짓기 어렵기 때문에, 노드 불능 상태 판정 관련해서 문제가 있을 수 있다.

각 문제에 대해 더 구체적인 내용은 다음과 같다.

네트워크 실패

분산 시스템은 노드 개수가 여러개이기 때문에, 단일 시스템보다 노드 간 통신이 많다.
노드 간 통신 에러도 자주 발생한다.
노드 간 통신 에러는 원인을 파악하기가 힘들기에 더 까다롭다.
요청이 유실되었는지, 요청을 처리하는 서버가 다운되었는지, 응답이 유실되었는지 구분하기가 어렵다.

시각 동기화 실패

노드 내부적으로 돌아가는 NTP(Network Time Protocol) 데몬은 노드 간의 시간을 동기화하는 역할을 한다.
NTP 데몬 설정이 잘못되어 있거나, 방화벽이 NTP를 막을 경우, 노드들 간 시각 차이는 크게 벌어질 수 있다.

노드 불능 상태 판단 실패

네트워크 실패에 대한 원인이 다양하기 때문에, 한 노드가 불능 상태인지 판단하기가 쉽지 않다.
노드가 실제로 정상 상태이지만 불능 상태라고 처리할 경우 문제가 발생할 수 있다.
예로 들어, 한 특정 노드를 불능 상태로 처리할 경우, 그 특정 노드에 할당된 부하는 나머지 노드들에게 넘겨져, 나머지 노드들의 부하가 커지게 된다.
실제로 특정 노드는 정상적으로 부하를 처리할 수 있음에도 불구하고, 특정 노드의 처리능력을 활용할 수 없다.
또한 특정 노드가 죽었다고 나머지 노드들이 인지하고 있는데, 특정 노드가 살아있어 계속해서 활동을 할 경우, 특정 노드에 있는 데이터는 나머지 노드들에게 공유되지 않아 데이터 동기화의 문제가 발생할 수 있다.

느낀 점

이 장의 내용을 회사 업무와 함께 생각하기는 어려웠다.
이유:
1. 네트워크 실패 핸들링은 대부분 aws에서 한다.
물론 네트워크 실패가 자주 발생한다. 노드의 숫자가 많고 서로 통신하는 횟수가 많으니 네트워크 실패도 가끔씩 일어난다.
하지만 대부분은 복구가 되고, 요청을 재시도하여 해결한다.
만약 네트워크가 일정 시간 이상 끊어져 있는 상황이라면, 담당 aws 직원분을 부른다.

  1. 시계 같은 경우도 문제가 된 적은 없다.
    첫째로, 절대적 시각 자체가 매우 중요한 적은 없다.
    실제 인터넷 시각과 오차가 미미하다면, 인터넷 시각과 오차가 있다는 것 자체가 문제되지는 않는다.
    문제는 유저가 인지할 정도로 인터넷 시각과 큰 오차가 생기는 경우다.
    둘째로, 노드 간에 시간을 맞출 필요가 없다.

  2. 노드가 죽었을 때 판단 또한 aws에서 한다.
    노드가 죽었다는 판단을 하기 위한 quorum 같은 알고리즘을 우리팀에서 구현할 필요가 없다.

결국 분산시스템에서 발생하는 까다로운 문제들은, 인프라를 사용하는 회사보다 인프라를 관리하는 aws에서 해결하기 좋은 문제들이다.

0개의 댓글