Google Cloud Well-Architected Framework의 성능 최적화 요소 원칙은 모듈식 설계를 촉진하는 데 도움이 되는 권장사항을 제공합니다. 모듈식 구성요소와 명확한 인터페이스를 사용하면 유연한 확장, 독립적인 업데이트, 향후 구성요소 분리가 가능합니다.
원칙 개요
애플리케이션 구성요소와 시스템 구성요소 간의 종속 항목을 파악하여 확장 가능한 시스템을 설계합니다.
모듈식 설계를 사용하면 모놀리식 아키텍처가 처음 배포되었는지 마이크로서비스 아키텍처가 처음 배포되었는지에 관계없이 유연성과 복원력을 확보할 수 있습니다. 명확한 인터페이스가 있는 잘 정의된 독립 모듈로 시스템을 분해하면 특정 요구사항을 충족하도록 개별 구성요소를 확장할 수 있습니다.
타겟팅된 확장/축소는 다음과 같은 방식으로 리소스 사용률을 최적화하고 비용을 절감하는 데 도움이 됩니다.
- 각 구성요소에 필요한 리소스만 프로비저닝하고, 요구사항이 적은 구성요소에는 더 적은 리소스를 할당합니다.
- 트래픽이 많은 기간에 사용자 환경을 유지하기 위해 리소스를 추가합니다.
- 성능을 저하시키지 않고 사용률이 낮은 리소스를 삭제합니다.
모듈화는 유지보수성도 향상합니다. 작고 자체 포함된 단위는 이해하고 디버그하고 업데이트하기가 더 쉬우므로 개발 주기가 빨라지고 위험이 줄어들 수 있습니다.
모듈성은 상당한 이점을 제공하지만 잠재적인 성능 절충을 평가해야 합니다. 모듈 간 통신이 증가하면 지연 시간과 오버헤드가 발생할 수 있습니다. 모듈성과 성능 간의 균형을 유지하세요. 모듈성이 높은 디자인이 보편적으로 적합하지 않을 수 있습니다. 성능이 중요한 경우 더 긴밀하게 결합된 접근 방식이 적합할 수 있습니다. 시스템 설계는 모듈식 설계를 지속적으로 검토하고 개선하는 반복적인 프로세스입니다.
권장사항
모듈식 설계를 촉진하려면 다음 섹션의 권장사항을 고려하세요.
느슨한 결합을 위한 설계
느슨하게 결합된 아키텍처를 설계합니다. 종속 항목이 최소화된 독립 구성요소를 사용하면 확장 가능하고 복원력이 우수한 애플리케이션을 빌드할 수 있습니다. 서비스의 경계를 계획할 때는 가용성 및 확장성 요구사항을 고려해야 합니다. 예를 들어 한 구성요소의 요구사항이 다른 구성요소와 다른 경우 해당 구성요소를 독립형 서비스로 설계할 수 있습니다. 덜 중요한 하위 프로세스나 기본 서비스의 응답 시간에 영향을 미치지 않는 서비스에 대해 정상적인 실패 계획을 구현합니다.
동시 실행 및 동시 로드를 위한 설계
사용자가 시스템과 상호작용하는 동안 여러 사용자 요청을 처리하거나 백그라운드 작업을 실행하는 등 여러 작업을 동시에 지원하도록 애플리케이션을 설계하세요. 여러 서비스 인스턴스에서 동시에 처리할 수 있는 작은 단위로 큰 작업을 나눕니다. 태스크 동시 실행을 사용하면 자동 확장과 같은 기능을 사용하여 다음과 같은 제품에서 리소스 할당을 늘릴 수 있습니다.
유연한 리소스 할당을 위한 모듈성 균형
가능한 경우 각 구성요소가 특정 작업에 필요한 리소스(예: 메모리, 저장소, 처리 능력)만 사용하도록 합니다. 리소스 과할당은 불필요한 비용을 초래할 수 있고 리소스 부족 할당은 성능을 저하시킬 수 있습니다.
잘 정의된 인터페이스 사용
모듈식 구성요소가 명확하고 표준화된 인터페이스 (예: API 및 메시지 대기열)를 통해 효과적으로 통신하여 변환 레이어 또는 불필요한 트래픽으로 인한 오버헤드를 줄여야 합니다.
스테이트리스(Stateless) 모델 사용
스테이트리스(Stateless) 모델은 이전 요청과 관계없이 서비스에서 각 요청 또는 상호작용을 처리할 수 있게 해줍니다. 이 모델은 진행 중인 요청 또는 프로세스에 필요한 데이터가 손실되는 일 없이 서비스를 확장 또는 축소하거나 재시작할 수 있으므로, 확장성과 복구 성능에 도움을 줍니다.
상호 보완적인 기술 선택
모듈식 설계를 보완하는 기술을 선택합니다. 모듈성 지원을 위해 프로그래밍 언어, 프레임워크, 데이터베이스를 평가합니다.
자세한 내용은 다음 리소스를 참조하세요.