1. 통신 지연 숨기기(Hiding communication latency)
먼 거리의 네트워크를 통해 서비스 요청을 보내야 할 경우 응답 대기 시간(communication latency)
을 최소화하는 것이 핵심 기술 중 하나이다.
이를 위해 요청 애플리케이션을 비동기 통신
을 사용하도록 설계하는 것이 한 가지 방법이다.
이는 애플리케이션이 원격 서비스로부터 응답을 기다리는 동안에도 계속 실행될 수 있도록 설계하는 것이다.
이를 인터럽트 기반의 단일 스레드
나 다중 스레드
를 사용하여 구현할 수 있다.
하지만 사용자가 응답을 기다리는 대화형 애플리케이션(interactive applications)
과 같은 경우에는 비동기 통신을 효과적으로 사용할 수 없다.
이러한 경우, 서버에서 클라이언트
로 계산 일부분을 이전
하여 전체 통신을 줄이는 것이 더 나은 방법이다.
예를 들어, 양식(form)
을 사용하여 클라이언트가 완성된 양식을 반환하도록 할 수도 있다.
2. 분산(Distribution)
분산(Distribution)
은 구성 요소를 쪼개서 작은 부분으로 나누고, 이를 시스템 전체에 분산시키는 것을 의미한다.
이를 설명하는 뛰어난 예시 중 하나는 도메인 네임 시스템(DNS)
이다.
DNS는 이름 공간을 계층적으로 구성된 도메인 트리로 나누며, 각 도메인은 서로 겹치지 않는 영역으로 분할된다.
또 다른 예시로는 월드 와이드 웹(WWW)
이 있다.
웹은 각 문서가 고유한 URL 형태의 이름을 가지는 거대한 문서 기반 정보 시스템으로 보인다.
그러나 실제로 웹은 많은 서버에 물리적으로 분산되어 있으며, 각 서버는 여러 웹 문서를 처리한다.
3. 복제(Replication)
복제(Replication)
는 가용성
을 높이고, 각 구성 요소 간 부하를 균형있게 분산시켜 성능
을 향상시킨다.
또한 지리적으로 넓게 분산된 시스템에서 통신 지연
을 줄이는 데에도 도움이 된다.
복제의 특수한 형태인 캐싱은 자원의 사용자가 결정하는 반면, 복제는 소유자가 결정하는 것으로, 필요할 때에만 발생한다.
복제는 일반적으로 사전
에 계획된다.
하지만 복제와 캐싱은 일관성 문제(Consistency problem)
를 야기할 수 있다.
어느 정도의 불일치가 허용될 수 있는지는 자원의 사용 방법
에 크게 의존한다.
예를 들어 브라우저에서 확인되지 않은 캐시 문서를 반환하는 것은 수분 이내에 확인할 필요가 없으므로 허용 가능하다.
그러나 전자 주식 거래나 경매와 같은 경우에는 강력한 일관성
이 필요하다.
만약 두 개의 업데이트가 동시에 발생하면, 각 복제본이 동일한 순서
로 업데이트되어야 한다.
이를 위해서는 전역 동기화 메커니즘(global synchronization mechanism)
이 필요하다.
확장성 정리
Scalability(확장성)을 위한 기술들을 조합하고 일관성 유지에 대한 다양한 형태를 사용하는 것이 실제적으로 많은 경우 충분하다는 것이 입증되어 왔다.
크기 확장성(Size scalability)은 기술적으로 가장 쉬운 문제 중 하나이다.
단순히 기계의 용량을 늘리면 된다.
그러나 관리적 확장성(Administrative scalability)은 비기술적인 문제(nontechnical problems)
를 해결해야 하기 때문에 가장 어려운 부분이다.
조직의 정치적인 문제
나 인간간의 협력
등이 이에 해당한다.
따라서 이러한 문제를 해결하기 위해서는 기술적인 해결책 외에도 조직 내부의 인적 자원과 협력을 유지하는 것이 중요하다.