DevOps/Cloud

[Cloud] 클라우드 규모에 맞는 디자인과 아키텍처 : 5장

샤아이인 2022. 1. 23.

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.

5.1 클라우드와 가장 잘 어울리는 고확장 어프리케이션 패턴

1) 이전

이전이란 사용 중인 설치형 어플리케이션을 클라우드에 그대로 옮겨 놓는 것을 말한다.

사용중인 로컬 데이터센터에서 이미 완전한 가상화를 통해 사용성을 극대화 해 놓은 상황이 아니라면, 자체적으로 이러한 어플리케이션들을 운영하는 것 보다는 클라우드 자원을 활용하는 것이 더 저렴하다.

 

2) 인터넷 규모

인터넷 규모 디자인 패턴은 서비스 첫날부터 실제 엄청난 비용을 들이지 않아도, 유튜브, 페이스북 과 같이 굉장히 많은 사용자들을 감당할 수도 있는 클라우드용 어플리케이션을 만드는 것 을 의미한다.

 

3) 폭발적인 연산

폭발적인 연산 패턴에 적합한 어플리케이션 들은 자원을 늘리거나, 과도하게 준비하지 않아도 추가적인 연산이 필요할 때 바로 처리할 수 있는 능력을 갖고있다.

 

4) 탄력적인 저장소

이 패턴에서는 어플리케이션의 저장소가 기하급수적으로 커질 수 있는 능력을 갖고 있다.

 

5.2 인터넷 규모를 위한 설계와 아키텍쳐 : 샤딩

1) 규모확장을 어렵게 만드는 기존 어플리케이션 문제들

많은 업계 최고의 어플리케이션들은 성장하고 더많은 인기를 얻게 되면서, 자신들의 성공적인 서비스들을 재설계해야했다.

이들이 인터넷 규모로 확장되는 데 있어 걸림돌이 되는 두 가지 문제점이 있었다.

- 너무 큰 작업 데이터

- 너무 많은 쓰기 연산

 

해결책은 무엇 이였을까?

 

바로 샤딩이다. 즉 데이터를 분할하는 것 이다. 쉽게 들릴지도 모르지만, 실제로 구현하는 것은 굉장히 어렵다.

예를 들어 고객 정보를 저장할때 각 고객정보는 이름 중에서 성을 저장하는 필드를 갖고 있다고 가정해보자. 26개의 똑같은 데이터베이스를 만들어서 각 데이터베이스에 하나의 알파벳 문자를 할당하는 것 이다.

그리고 John Smith에 대한 정보를 읽어 올때는 S 데이터베이스에 바로 접속하여 데이터를 읽어오는 것 이다.

이렇게 데이터베이스를 분할하는 과정을 샤딩 이라고 부른다.

 

이로인하여 어플리케이션 각 부분들간에 의존도를 없에서 완벽하게 독립적이고 병렬로 돌아갈 수 있도록 함으로써 훨씬 더 높은 처리 속도를 낼 수 있도록 하는 비공유 라고 부르는 확장성 개념과 관련이 있다.

샤딩의 장점 1) 고가용성 2) 빠른 쿼리 3) 더 넓은 쓰기 대역폭

 

2) 전통적인 데이터베이스 아키텍쳐들과 대조되는 샤딩

 

- 데이터들의 비정규화

샤딩에서는 데이터가 비정규화 되어있다. 같이 사용하는 데이터는 함께 저장된다.

모든 사용자들의 레코드의 경우, 관계 상태 테이블을 가리키는 단순 인덱스(외래키 같은) 가 아닌 관계에 대한 상태 자체를 같이 가지고 있게 된다.

 

- 데이터는 많은 물리 인스턴스 위에서 병렬처리 된다.

샤딩을 이용하면 데이터는 병렬화되고, 수평적 확장을 통해 규모도 늘릴 수 있게 된다. 병렬로 작업할 수 있기 때문에 더많은 일을 수행할 수 있다.

 

- 데이터는 작게 유지된다.

 

- 데이터 가용성은 더 높아진다.

샤드 들은 서로 독립적 이기 때문에 하나에서 발생한 장애는 다른 부분에 영향을 주지 않는다. 그리고 각 샤드는 50% 정도의 자원만을 사용하도록 만들어 졌다. 하나의 샤드의 자원을 다른 샤드가 일시적으로 감당할 수 있기 때문에 운용 중에도 샤드를 업그레이드하기 훨씬 쉬워진다.

 

- 데이터는 복제되지 않는다.

데이터를 하나의 마스터 서버에서 슬레이브 서버들로 복제하는 것은 규모를 확장하는 전통적인 접근 방식이다. 읽기 연산은 슬레이브들에서 분산되어 처리될 수 있지만, 모든 쓰기는 마스터에 집중된다.

 

5.3 주문형 규모 확장 설계 : 클라우드버스팅

 

클라우드버스팅 이란 무엇일까?

 

단일 어플리케이션 내용중 일부는 자체 데이터센터에서 돌아가고, 다른 일부는 공개형 또는 폐쇄형 클라우드에서 돌아가는 어플리케이션들 이다.

 

국가 표준 기술 협회 에서는 다음과 같이 정의하고 있다.

고유한 개체들을 유지하지만 데이터와 어플리케이션의 이동성을 가능하게 하는 표준화된 또는 상용 기술에 의해 결합된 두개 이상의 클라우드들로 구성된 클라우드 인프라

 

1) 동적으로 적응 하는 내부 어플리케이션

2) 요청이 증폭할 때, 클라우드로 순간적으로 확장되어 처리

 

일반적으로 내부 어플리케이션에서는 회사의 중요한 정보나 기밀들을 처리하고, 이외으 주변 잡다한 부분을 클라우드에 넘겨 처리한다.

 

5.4 기하급수적으로 확장되는 저장소를 위한 설계

클라우드 스토리지 는 네트워크를 기반으로 웹 서비스 API를 통해 접근되는 저장소 이다.

클라우드 스토리지 접근 API는 속성상 RESTful이다.

 

대표적으로 아마존의 S3가 있다.

댓글