TIL
  • Contents
  • Book
    • 도메인 주도 설계
      • 1. 동작하는 도메인 모델 만들기
    • 오브젝트
      • 데이터 중심 설계
      • 책임 중심 설계
      • 책임 할당을 위한 GRASP 패턴
      • 메시지와 인터페이스
      • 객체 분해
    • Effective Java
      • Item 7 - 다 쓴 객체 참조를 해제하라
      • Item 7 발표 내용
      • Item 13 - clone 재정의는 주의해서 진행하라
      • Item 13 발표 내용
      • Item 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
      • Item 16 발표 내용
      • Item 26 - 로 타입은 사용하지 말라
      • Item 28 - 배열보다는 리스트를 사용하라
      • Item 28 발표 내용
      • Item 29 - 이왕이면 제네릭 타입으로 만들라
      • Item 30 - 이왕이면 제네릭 메서드로 만들라
      • Item 31 - 한정적 와일드 카드를 사용해 API 유연성을 높이라
      • Item 35 - ordinal 메서드 대신 인스턴스 필드를 사용하라
      • Item 37 - ordinal 인덱싱 대신 EnumMap을 사용하라
      • Item 37 발표 내용
      • Item 43 - 람다보다는 메서드 참조를 사용하라
      • Item 43 발표 정리
      • Item 56 - 공개된 API 요소에는 항상 문서화 주석을 작성하라
      • Item 56 발표 정리
      • Item 62 - 다른 타입이 적절하다면 문자열 사용을 피하라
      • Item 62 발표 정리
      • Item 73 - 추상화 수준에 맞는 예외를 던지라
      • Item 83 - 지연 초기화는 신중히 사용하라
      • Item 83 발표 내용
      • Item 89 - 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
      • Item 89 발표 내용
    • 개발자를 위한 SQL 튜닝
      • SQL 쿼리 실습을 위한 DB 서버 구축
      • 인덱스 튜닝
      • 인덱스 스캔 튜닝
      • 인덱스 스캔 튜닝 실습
      • 인덱스 패스트 풀 스캔
      • 테이블 풀 스캔 튜닝
      • 조인 튜닝
      • 중첩 루프 조인 튜닝
      • 중첩 루프 조인 튜닝 실습
      • 해시 조인 튜닝
      • 해시 조인 튜닝 실습
      • 세미 조인 튜닝
      • 세미 조인 튜닝 실습
      • 아우터 조인
      • 함수 튜닝
      • 부분 범위 처리 튜닝
      • 파티셔닝 튜닝
      • 파티션 인덱스 튜닝
      • 병렬 처리 튜닝
  • Java
    • Design Pattern
      • Intro
      • Types of Design Patterns
      • Creational
        • Builder Pattern
        • Singleton Pattern
        • Prototype Pattern
        • Factory Pattern
        • Abstract Factory Pattern
      • Structural
        • Adapter Pattern
        • Bridge Pattern
        • Composite Pattern
        • Decorator Pattern
        • Facade Pattern
        • Flyweight Pattern
        • Proxy Pattern
      • Behavioural
        • Chain of Responsibility Pattern
        • Command Pattern
        • Interpreter Pattern
        • Iterator Pattern
        • Mediator Pattern
        • Memento Pattern
        • Observer Pattern
        • State Pattern
        • Strategy Pattern
        • Template Method Pattern
        • Visitor Pattern
    • Java
      • Cracking the Coding Interview
      • TDD, Clean Code with Java 11기
        • 자동차 레이싱
        • 로또
        • 사다리 타기
        • 볼링 게임 점수판
    • 궁금증
      • 자바 8 버전의 인터페이스와 추상클래스
      • 자바의 제네릭은 어떻게 이전 버전과 호환되는 걸까?
      • 스프링 MVC 기본 구조
      • 마샬링과 직렬화
      • 인터뷰 질문 모음
      • Code Coverage
  • Database
    • Database
      • SQL 레벨업
      • DB 스터디
        • DBMS
          • MySQL
        • INDEX
        • Join(Nested Loop, Hash)
        • Join(Semi, Outer)
        • Partial Range Processing
        • Function
        • Partitioning
        • Parallel Processing
  • Network
  • Architecture
    • Issue
      • Git Push Error
      • SonarLint Warning - assertThatExceptionOfType()
  • Infra
  • Spring
    • Spring JPA
      • 1. 데이터 모델링 및 연관관계 설정
      • 2. 최적화 내용
      • 3. Spring-Data-Jpa
      • 4. Query DSL
    • Spring Security
      • Intro
    • Spring Batch
      • 배치용 디비 설치
      • 배치 데이터 분석하기
      • 배치 프로세스 구상하기 및 성능 차이 확인하기
  • Issue
  • Tistory
    • Tistory Blog
  • Design High Performing Architectures
  • Design Resilient Architectures
  • Design Secure Applications And Architectures
  • Design Cost-Optimized Architectures
Powered by GitBook
On this page
  • 탄력적이고 확장이 가능한 솔루션을 식별하는 방법
  • 확장 가능한 고성능 스토리지를 선택하는 방법
  • 고성능 네트워킹 솔루션을 선택하는 방법
  • 고성능 데이터베이스 솔루션을 선택하는 방법

Was this helpful?

Design High Performing Architectures

AWS Certified Solutions Architect Associate

Previous배치 프로세스 구상하기 및 성능 차이 확인하기NextDesign Resilient Architectures

Last updated 3 years ago

Was this helpful?

탄력적이고 확장이 가능한 솔루션을 식별하는 방법

Amazon SQS

  • 상황

    • 컴퓨팅 계층은 EC2 인스턴스에서 병렬로 실행되고 있고, 처리할 작업 수에 따라 확장되어야 한다.

    • 컴퓨팅 계층은 Stateless인 상태이다.

    • 응용 프로그램이 느슨하게 연결되어 있고, 작업 항목이 영구적으로 저장되어 있는지 확인해야 하는 상황에서 어떤 디자인을 사용해야 할까?

  • 답변

    • 처리해야 하는 작업을 보관하는 Amazon SQS 대기열을 생성한다.

    • 애플리케이션에 대한 EC2 Auto Scaling 그룹을 생성하여 SQS 대기열의 항목 수에 따라 노드를 추가 및 제거할 수 있도록 Auto Scaling 그룹에 대한 조정 정책을 설정하도록 한다.

  • 기술 정리 (어려움)

    • Amazon SQS

      • 작업을 저장하기 위해 내구성있고 느슨하게 결합된 솔루션이다.

      • 대기열에서 대기 중인 작업 수를 기반으로 동적으로 조정할 수 있도록 구성할 수 있다.

      • 이런 조정을 구성하기 위해서는 인스턴스당 백로그 지표를 사용하여 유지 관리할 인스턴스당 허용 가능한 백로그를 목표 값으로 사용할 수 있다.

        • 인스턴스당 백로그를 계산하기 위해서는 ApproximateNumberOfMessages 대기열 속성으로 시작하여 SQS 대기열의 길이(대기열에서 검색할 수 있는 메시지 수)를

          결정한다.

        • 해당 숫자를 집합의 실행 용량(Auto Scaling 그룹의 경우 InService 상태의 인스턴스 수)으로 나누어 인스턴스당 백로그를 얻는다.

        • 인스턴스당 허용 가능한 백로그는 목표 값을 계산하기 위해서는 먼저 애플리케이션이 대기 시간 측면에서 허용할 수 있는 것을 결정해야 한다.

        • 그런 다음 허용 가능한 지연 시간 값을 가져와 EC2 인스턴스가 메시지를 처리하는 데 걸리는 평균 시간으로 나눈다.

      • Amazon SQS 솔루션은 대기 중인 작업 수를 기반으로 Auto Scaling을 사용하여 EC2 인스턴스를 확장한다.

Amazon Aurora

  • 상황

    • 날시 업데이트를 제공하는 웹 애플리케이션은 ALB 뒤에 Multi AZ Auto Scaling Group의 EC2 인스턴스 집합에서 실행되고 있다.

    • 인스턴스는 Aurora 데이터베이스에 데이터를 저장하고 있다.

    • 요청 속도가 산발적으로 증가하여 애플리케이션을 보다 탄력적으로 만들 수 있는 솔루션을 찾고자 할 때 알맞은 솔루션은?

  • 답변

    • 아키텍처는 이미 복원력이 높지만 요청 비율이 갑자기 증가하면서 성능이 저하될 수 있다.

    • 이러한 상황을 해결하기 위해서는 Aurora 읽기 전용 복제본을 사용하여 기본 데이터베이스의 요청을 오프로드하는 읽기 트래픽을 제공할 수 있다.

    • FrontEnd 에서 ALB 앞에 CloudFront를 배치할 수 있다.

    • 위와 같은 방법으로 구성하면 컨텐츠를 캐싱하고 백엔드에서 요청을 오프로드할 수 있기 때문에 더 나은 성능을 기대할 수 있다.

  • 기술 정리

Database Migration

  • 상황

    • 웹 애플리케이션의 데이터베이스 계층은 온프레미스 Window 서버에서 실행된다.

    • 데이터베이스는 Microsoft SQL Server 데이터베이스이다.

    • 애플리케이션 소유자가 데이터베이스를 RDS 인스턴스로 마이그레이션 하려고 할 때 최소한의 관리 노력과 가동 중지 시간으로 마이그레이션 하는 방법은?

  • 답변

    • AWS Database Migration Service(DMS)를 사용하여 데이터베이스를 RDS로 직접 마이그레이션한다.

  • 기술정리

    • Microsoft SQL Server 데이터베이스 엔진을 사용하여 온프레미스 서버에서 Amazon RDS로 Microsoft SQL Server를 직접 마이그레이션할 수 있다.

    • 기본 Microsoft SQL Server 도구를 사용하거나 AWS DMS를 사용하여 이를 수행할 수 있습니다.

확장 가능한 고성능 스토리지를 선택하는 방법

Kinesis

  • 상황

    • 매장과 창고가 많은 소매 회사는 IoT 센서를 구현하여 각 위치의 장치에서 모니터링 데이터를 수집한다.

    • 데이터는 실시간으로 AWS에 전송되며, 각 장치에 대해 이벤트를 순서대로 수신하고 향후 처리를 위래 데이터를 저장하는 솔루션을 제공해야 한다.

    • 위 상황에서 어떤 솔루션을 선택하는 것이 가장 효율적일까?

  • 답변

    • 각 디바이스의 파티션 키가 있는 실시간 이벤트에 Amazon Kinesis Data Streams를 사용한다.

    • Amazon Kinesis Data Firehose를 사용하여 S3에 데이터를 저장한다.

  • 기술정리 (어려움)

    • Amazon Kinesis Data Streams는 실시간으로 데이터를 수집하고 처리한다.

    • Kinesis data stream은 샤드의 집합으로 각 샤드는 스트림에서 고유하게 식별된 데이터 레코드 시퀀스이다.

    • 각 데이터 레코드에는 Kinesis data stream에서 할당한 시퀀스 번호가 있다.

    • 파티션 키 스트림 내에 샤드로 그룹 데이터에 사용된다.

    • Kinesis data stream은 스트림에 속한 데이터 레코드를 여러 샤드로 분리한다.

    • 각 데이터 레코드와 연결된 파티션 키를 사용하여 주어진 데이터 레코드가 속한 샤드를 결정한다.

    • 각 장치에 대해 파티션 키를 사용하여 해당 장치에 대한 레코드가 샤드별로 그룹화되고 샤드 자체가 순서를 보장한다.

    • S3는 데이터 레코드를 저장하기 위한 대상이다.

고성능 네트워킹 솔루션을 선택하는 방법

고성능 데이터베이스 솔루션을 선택하는 방법

Aurora

  • 상황

    • 한 보험 회사에 영국과 호주의 사용자에게 서비스를 제공하는 웹 애플리케이션이 있다.

    • 애플리케이션은 eu-west-2에서 호스팅되는 데이터베이스 계층에 MySQL 데이터베이스를 사용하고 있다.

    • 웹 계층은 eu-west-2와 ap-southeast-2에서 실행되고 있다.

    • Route 53은 사용자를 가장 가까운 웹 계층으로 안내하는 지리 근접 라우팅으로 사용된다.

    • 오스트레일리아 사용자의 경우 쿼리에 대한 응답 시간이 느리다는 이슈가 발생했을 때 성능을 향상시키기 위한 데이터베이스 계층에서의 방법은?

  • 답변

    • 문제가 발생하는 곳이 읽기 쿼리가 호주에서 영국으로 향하는 대기시간이고, 물리적으로 거리가 멀기 때문에 호주에서 읽기 성능을 향상시키기 위한 솔루션이 필요하다.

    • ap-southeast-2에서 읽기 전용 복제본을 구성하고 MySQL 호환 모드에서 데이터베이스를 Amazon Aurora 글로벌 데이터베이스로 마이그레이션한다.

    • 이러한 작업은 오스트레일리아 지겅의 사용자에게 더 나은 성능을 제공할 수 있다.

    • 쓰기는 여전히 영국 리전에서 이루어져야 하지만 읽기 성능은 크게 향상 될 수 있다.

  • 기술 정리

    • Aurora Global Database

      • 데이터가 마스터링되는 단일 기본 AWS 리전과 최대 5개의 읽기 전용 보조 AWS 리전으로 구성되어 있다.

      • Aurora는 1초 미만의 일반적인 지연 시간으로 보조 AWS 리전에 데이터를 복제한다.

      • 기본 AWS 리전의 기본 DB 인스턴스에 직접 쓰기 작업을 실행한다.

Scaling based on Amazon SQS
Replication with Amazon Aurora
What is Amazon CloudFront?
Migrate an on-premises Microsoft SQL Server database to Amazon RDS for SQL Server
Sources for data migration
Targets for data migration
AWS Schema Conversion Tool
Amazon Kinesis Data Streams Terminology and Concepts
Using Amazon Aurora global databases