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