본문 바로가기

AWS Design Pattern

(46)
Priority Queue - 작업 우선 순위 변경 ㅁ 풀어야 할 문제 많은 일괄 작업을 처리해야 하고 거기에 작업의 우선순위가 있는 경우를 생각할 수 있다. 예를 들어, 프레젠테이션 파일을 웹브라우저로 업로드하여 공개할 수 있는 서비스로, 무료 사용자와 회원 사용자의 서비스 레벨(공개까지 시간)이 다른 경우가 이 경우에 해당된다. 사용자가 프레젠테이션 파일을 업로드하면 시스템에서 공개하기 위해 변환 처리 등을 일괄 작업으로 하고, 변환 후 파일을 공개한다. 그 일괄 처리를 회원 종류별로 어떻게 우선 순위를 정할지가 문제다. ㅁ 해결/패턴 일괄 작업의 관리에는 큐를 사용할 수 있다. 큐를 우선순위 수만큼 준비하면 된다. 작업 요청을 큐로 관리하고, 큐의 작업 요청을 일괄 작업으로 처리한다. 클라우드에는 높은 신뢰성을 가진 큐 서비스가 제공되고 있고, 그것..
Queuing Chain - 큐를 통한 시스템간의 낮은 의존도 구성 ㅁ 풀어야 할 문제 여러 시스템에서 처리를 연계하여 순차적 처리(예를 들어, 이미지 처리의 경우에 이미지 업로드, 저장, 인코딩, 썸네일 작성 등의 순차 작업)를 할 때 시스템들이 밀접하게 결합되어 있다면, 성능 측면에서 병목 현상이 발생할 수 있다. 또, 장애 시 복구 작업이 복잡해 진다. 가능하면 시스템 간의 의존도를 낮게 하는 것이 성능이나 유지 및 보수 측면에서 바람직하다. ㅁ 해결/패턴 시스템 간의 의존도를 낮추는 하나의 방법은 시스템들을 큐로 연결하여 작업 전달을 큐 안에 있는 메시지를 통해 송수신하는 것이다. 이렇게 하면 비동기로 시스템 연계가 가능하다. 이 방법의 경우 메시지를 받고 처리하는 가상 서버 수를 늘려 병렬 처리를 할 수 있기 때문에 쉽게 병목 현상을 없앨 수 있다. 또, 가상 ..
Sharding Write - 쓰기 효율화 ㅁ 풀어야 할 문제 RDBMS의 읽기에 대한 고속화는 매우 중요하고 난이도가 높은 문제다. 스케일 업으로 낼 수 있는 이상의 성능을 내는 것은 당연히 여러 대의 데이터베이스 서버를 이용하면 되지만, 어떻게 해야 하는지는 언제나 고민이다. ㅁ 해결/패턴 여러 대의 데이터베이스 서버에 쓰기 성능을 높이는 방법으로 [샤딩]이 있다. 기본적으로 같은 구조의 데이터베이스를 만들어 테이블의 컬럼을 키로 사용해 분할하여 쓰기 처리를 분산한다. ㅁ 구현 AWS의 RDBMS 서비스인 [RDS]를 샤딩 백엔드 데이터베이스로 이용하면 가용성과 운영 효율을 높일 수 있다. - Spider 스토리지 엔진을 가지고 있는 MySQL 서버 등의 샤딩 소프트웨어를 EC2에 설치한다. - 여러 대의 RDS를 준비하여 샤딩 백엔드 데이터..
Inmemory DB Cache - 자주 사용되는 데이터 캐시화 ㅁ 풀어야 할 문제 데이터베이스 부하의 대부분은 읽기에 관한 것인 경우가 많다. 그 때문에 데이터베이스의 읽기 성능을 개선하면 시스템 전체의 성능 향상과 연결된다. ㅁ 해결/패턴 데이터베이스에서 읽기 성능을 높이는 방법으로 읽기에 자주 사용되는 데이터를 메모리에 캐시하는 것이 일반적이다. 한번 사용한 데이터를 캐시에 올려두고 다음에 사용할 때(디스크가 아닌)메모리에서 읽기 처리를 끝내는 방법이다. 캐시하는 데이터의 전형적인 예로, 데이터베이스 처리에 있어서 시간이 걸리는 쿼리 결과나 복잡한 계산 결과 등을 들 수 있다. ㅁ 구현 AWS의 ElastiCache는 메모리 캐시 서비스다 이 서비스는 장애 시의 자동 복구 기능 등도 가지고 있다. - 메모리 캐시를 준비한다. ElastiCache를 사용해도 되며..
Read Replica - 읽기 전용 레플리카를 통한 부하분산 ㅁ 풀어야 할 문제 데이터베이스의 액세스 빈도가 높아 DB 서버의 자원이 줄어들 때 서버의 사양을 높이는(즉, 스케일 업) 경우가 많다. 스케일 업이 힘들 때는 DB 서버를 수평 분산하는 스케일 아웃이 이루어지나, 일반적으로 어려워한다. 일반적으로 데이터베이스의 쓰기보다 읽기가 비교적 많기 때문에 읽기 처리를 분산하여 시스템 전체의 성능을 높이는 것이 요구된다. ㅁ 해결/패턴 읽기 성능을 높이기 위해서는 몇 가지 처리 방법이 있다. 이 패턴에서는 읽기를 여러 대의 Read Replica(읽기전용 레플리카)에 분산하는 것으로 전체 성능을 높인다. 읽기 전용 레플리카는 마스터에 대해 쓰기에 따라 자기 자신의 데이터에 반영한다. 읽기는 주로 읽기 전용 레플리카를 이용하는 것으로 마스터의 부하를 줄일 수 있다...
DB Replication - 온라인 DB 복제 ㅁ 풀어야 할 문제 시스템에서 중요한 데이터를 보호하는 기본적인 방법은 데이터 베이스에 저장하는 것이다. 하지만 센터의 대규모 재해 발생 시에 대한 대응 방안을 고려해야 한다. ㅁ 해결/패턴 지리적 위치 간의 레플리케이션 패턴, 이 패턴을 통해 데이터 분실을 방지하고 데이터 액세스의 가용성을 확보한다. 클라우드 이전부터 있던 패턴이지만, 클라우드를 이용하면 저 비용으로 여러 지역을 이용할 수 있어 현실적인 대안이 되고 있다. ㅁ 구현 AWS에는 Region, AZ 이라는 개념이 있다. Region이 더 큰 개념으로 서울 지역에 복수의 가용존이 있는 식이다. 이 점을 고려하면 다른 데이터 센터에 문제 없이 EC2를 배치할 수 있고, 데이터베이스의 레플리케이션을 할 수 있다. 가용존 간의 리플리케이션은 RD..
Direct Object Upload - 업로드 절차 간소화 ㅁ 풀어야 할 문제 - 사진이나 동영상 공유 사이트에서 여러 사용자로부터 크기가 큰 데이터가 업로드 됨 - 업로드 처리는 서버 쪽의 부하(특히, 네트워크 부하)가 높아져 어느 정도 규모의 사이트에서도 업로드 전용 가상 서버가 필요한 경우가 있음 ㅁ 해결/패턴 - 업로드를 인터넷 스토리지로 처리, 즉 클라이언트에서 가상 서버를 통하지 않고 인터넷 스토리지에 직접 업로드 함. - 위처럼 처리 시 업로드 처리의 부하를 고려하지 않아도 가능 ㅁ 구현 - 웹 서버(EC2)에 S3로 업로드하는 HTML의 폼을 만듦 - 업로드 폼을 이용해 사용자 쪽에서 S3로 직접 파일을 업로드 함 - S3로 파일 전송 완료 후 폼에 지정해둔 URL로 리다이렉트 되어지므로 리다이렉트 서버에서 업로드 종료 확인 처리가 이루어짐 ㅁ 장..
Storage Index - 인터넷 스토리지 검색 효율화 ㅁ 풀어야 할 문제 인터넷 스토리지는 데이터가 분산 배치되어 있어 안전성과 가용성이 높으나 인터넷을 통해 액세스하기 때문에 자체 시스템과 비교하면 일반적으로 응답 성능은 낮다. 또 고속의 검색기능은 제공하지 않는 경우가 있기 때문에 특정 사용자의 데이터 리스트를 가지고 온다거나 어떤 기간 내의 데이터를 가지고 오려고 할 때 애플리케이션 쪽에서 처리해야 할 필요가 있다. ㅁ 해결/패턴 인터넷 스토리지에 데이터를 저장할 때는 저장과 동시에 검색 성능이 높은 KVS(SimpleDB)에 메타정보를 저장하고 그 정보를 인덱스로 사용 검색 시 KVS를 이용하여 얻은 결과를 기반으로 인터넷 스토리지에 액세스 함 ㅁ 구현 - S3에 데이터를 저장한 다음에 S3의 메타 정보(Keys, paths, data sizes, ..