더북(TheBook)

액티브-액티브 패턴에서는 서버 두 대가 클라이언트 측 요청을 분담하여 처리하고, 필요할 때면 두 서버는 각자 가진 데이터를 상대방에게 전송합니다. 받은 쪽에서는 데이터를 복제합니다. 즉, 두 서버의 상태가 서로 동기화됩니다. 액티브-패시브에서 한쪽 방향으로만 동기화되는 것과는 다르죠.

p398

▲ 그림 9-26 액티브-액티브 패턴, 양방향 동기화

 

하나가 죽으면 클라이언트 요청은 아직 살아 있는 나머지 서버로 몰립니다. 이 패턴은 액티브-패시브와 달리 서버의 모든 성능을 사용할 수 있습니다. 그러나 경우에 따라 데이터 스테일(data stale) 문제를 해결하려는 노력이 필요합니다. 어떤 데이터 X가 있는데, 이것이 왼쪽 서버와 오른쪽 서버에 모두 있습니다. 그런데 왼쪽에 접속한 클라이언트 요청이 데이터 X를 액세스하고, 오른쪽에 접속한 클라이언트 요청도 데이터 X를 액세스하면 어떻게 될까요?

지금 액세스된 데이터 X가 정말로 최신 정보인지 장담할 수 없습니다. 스테일 문제(stale problem)가 발생합니다. 멀티스레드 프로그래밍에서 락 없이 두 스레드가 데이터 X에 접근하는 것과 비슷하죠. 그러다 보니 개발이 까다로울 수 있습니다. 경우에 따라 액티브-액티브 설계 자체가 불가능할 때도 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.