데이터 분할 전략(Azure를 사용하여 Real-World Cloud Apps 빌드)

작성자 : Rick Anderson, Tom Dykstra

수정 프로젝트 다운로드 또는 전자책 다운로드

Azure 전자책 을 사용하여 Real World Cloud Apps 빌드 는 Scott Guthrie가 개발한 프레젠테이션을 기반으로 합니다. 클라우드용 웹앱을 성공적으로 개발하는 데 도움이 될 수 있는 13개의 패턴과 사례를 설명합니다. 시리즈에 대한 자세한 내용은 첫 번째 챕터를 참조하세요.

이전에 웹 서버를 추가하고 제거하여 클라우드 애플리케이션의 웹 계층을 얼마나 쉽게 확장할 수 있는지 확인했습니다. 그러나 모두 동일한 데이터 저장소에 도달하면 애플리케이션의 병목 현상이 프런트 엔드에서 백 엔드로 이동하며 데이터 계층은 크기 조정이 가장 어렵습니다. 이 챕터에서는 데이터를 여러 관계형 데이터베이스로 분할하거나 관계형 데이터베이스 스토리지를 다른 데이터 스토리지 옵션과 결합하여 데이터 계층을 확장성 있게 만드는 방법을 살펴봅니다.

앞에서 언급한 것과 동일한 이유로 파티션 구성표를 미리 설정하는 것이 가장 좋습니다. 앱이 프로덕션 환경에 있는 후에는 데이터 스토리지 전략을 변경하는 것이 매우 어렵습니다. 다양한 접근 방식에 대해 미리 생각하는 경우 앱의 데이터 및 데이터 액세스 코드를 다시 구성하는 동안 앱이 충돌하거나 오랫동안 중단되는 "Twitter 순간"을 방지할 수 있습니다.

데이터 스토리지의 세 가지 Vs

분할 전략이 필요한지 여부와 무엇이 필요한지 확인하려면 데이터에 대한 세 가지 질문을 고려하세요.

  • 볼륨 – 궁극적으로 얼마나 많은 데이터를 저장하나요? 몇 기가바이트? 몇 백 기가바이트? 테라바이트? 페타바이트?
  • 속도 – 데이터가 증가하는 속도는 얼마인가요? 많은 데이터를 생성하지 않는 내부 앱인가요? 고객이 이미지와 비디오를 업로드할 외부 앱은 무엇입니까?
  • 다양성 – 어떤 유형의 데이터를 저장하나요? 관계형, 이미지, 키-값 쌍, 소셜 그래프?

볼륨, 속도 또는 다양성이 많다고 생각되면 앱이 성장함에 따라 효율적이고 효과적으로 스케일링하고 병목 현상이 발생하지 않도록 하려면 어떤 종류의 분할 체계를 신중하게 고려해야 합니다.

기본적으로 분할에 대한 세 가지 방법이 있습니다.

  • 수직 분할
  • 행 분할
  • 하이브리드 분할

수직 분할

세로 분할은 테이블을 열로 분할하는 것과 같습니다. 한 열 집합은 하나의 데이터 저장소로 이동되고 다른 열 집합은 다른 데이터 저장소로 들어갑니다.

예를 들어 내 앱이 이미지를 포함하여 사용자에 대한 데이터를 저장한다고 가정해 보겠습니다.

데이터 테이블

이 데이터를 테이블로 나타내고 다양한 종류의 데이터를 살펴보면 왼쪽의 세 열에 관계형 데이터베이스에서 효율적으로 저장할 수 있는 문자열 데이터가 있는 반면 오른쪽의 두 열은 기본적으로 이미지 파일에서 제공되는 바이트 배열임을 알 수 있습니다. 관계형 데이터베이스에 이미지 파일 데이터를 저장할 수 있으며, 많은 사람들이 파일 시스템에 데이터를 저장하지 않기 때문에 그렇게 합니다. 필요한 양의 데이터를 저장할 수 있는 파일 시스템이 없거나 별도의 백업 및 복원 시스템을 관리하지 않으려는 것일 수 있습니다. 이 방법은 온-프레미스 데이터베이스 및 클라우드 데이터베이스의 소량 데이터에 적합합니다. 온-프레미스 환경에서는 DBA가 모든 것을 처리하도록 하는 것이 더 쉬울 수 있습니다.

그러나 클라우드 데이터베이스에서 스토리지는 상대적으로 비용이 많이 들고 이미지의 양이 많으면 데이터베이스 크기가 효율적으로 작동할 수 있는 제한을 초과하여 커질 수 있습니다. 데이터를 세로로 분할하여 이러한 문제를 해결할 수 있습니다. 즉, 데이터 테이블의 각 열에 가장 적합한 데이터 저장소를 선택합니다. 이 예제에 가장 적합한 것은 관계형 데이터베이스에 문자열 데이터를 배치하고 Blob Storage의 이미지를 배치하는 것입니다.

세로로 분할된 데이터 테이블

파일 서버를 설정하거나 관계형 데이터베이스 외부에 저장된 데이터의 백업 및 복원을 관리할 필요가 없으므로 데이터베이스 대신 Blob Storage에 이미지를 저장하는 것이 온-프레미스 환경보다 클라우드에서 더 실용적입니다. Blob Storage 서비스에서 자동으로 처리하는 모든 작업입니다.

이는 수정 앱에서 구현한 분할 접근 방식이며 Blob Storage 챕터에서 이에 대한 코드를 살펴보겠습니다. 이 분할 체계가 없고 평균 이미지 크기가 3메가바이트라고 가정하면 Fix It 앱은 최대 데이터베이스 크기인 150기가바이트에 도달하기 전에 약 40,000개 작업만 저장할 수 있습니다. 이미지를 제거한 후 데이터베이스는 10배의 작업을 저장할 수 있습니다. 수평 분할 체계 구현에 대해 생각하기 전에 훨씬 더 오래 갈 수 있습니다. 그리고 앱이 확장됨에 따라 스토리지 요구 사항의 대부분이 매우 저렴한 Blob 스토리지로 전환되기 때문에 비용이 더 느리게 증가합니다.

행 분할(분할)

가로 분할은 행별로 테이블을 분할하는 것과 같습니다. 한 행 집합은 하나의 데이터 저장소로 들어가고 다른 행 집합은 다른 데이터 저장소로 들어갑니다.

동일한 데이터 집합을 고려할 때 다른 옵션은 다양한 범위의 고객 이름을 다른 데이터베이스에 저장하는 것입니다.

수평 분할된 데이터 테이블

핫스폿을 방지하기 위해 데이터가 균등하게 분산되도록 분할 체계에 대해 매우 주의해야 합니다. 많은 사람들이 특정 일반 문자로 시작하는 성을 가지고 있기 때문에 성의 첫 글자를 사용하는 이 간단한 예제는 해당 요구 사항을 충족하지 않습니다. 일부 데이터베이스는 매우 커지지만 대부분은 작게 유지되므로 예상보다 일찍 테이블 크기 제한에 도달했습니다.

가로 분할의 단점은 모든 데이터에서 쿼리를 수행하는 것이 어려울 수 있다는 것입니다. 이 예제에서는 앱에서 저장된 모든 데이터를 가져오기 위해 최대 26개의 다른 데이터베이스에서 쿼리를 그려야 합니다.

하이브리드 분할

세로 분할과 가로 분할을 결합할 수 있습니다. 예를 들어 예제 데이터에서는 Blob Storage에 이미지를 저장하고 문자열 데이터를 가로로 분할할 수 있습니다.

분할된 데이터 테이블 하이브리드

프로덕션 애플리케이션 분할

개념적으로 분할 체계가 어떻게 작동하는지 쉽게 알 수 있지만 분할 체계는 코드 복잡성을 증가시키고 처리해야 하는 많은 새로운 복잡성을 도입합니다. 이미지를 Blob Storage로 이동하는 경우 스토리지 서비스가 다운되면 어떻게 해야 합니까? Blob 보안을 어떻게 처리합니까? 데이터베이스 및 Blob Storage가 동기화에서 벗어나면 어떻게 되나요? 분할하는 경우 모든 데이터베이스에서 쿼리를 어떻게 처리하나요?

합병증은 프로덕션으로 가기 전에 계획하는 한 관리할 수 있습니다. 그렇게 하지 않은 많은 사람들이 나중에 있었으면 좋겠다고 말했습니다. 평균적으로 CAT(고객 자문 팀) 팀은 앱이 정말 큰 방식으로 이륙하는 고객으로부터 한 달에 한 번 정도 당황한 전화를 받고 이 계획을 세우지 않았습니다. 그리고 그들은 다음과 같은 말을 : "도움말! 나는 모든 것을 단일 데이터 저장소에 넣었고, 45 일 후에는 공간이 부족할 것입니다!" 데이터 저장소에 액세스하는 방법에 기본 제공되는 비즈니스 논리가 많고 앱을 사용하는 고객이 있는 경우 마이그레이션하는 동안 하루 동안 중단하기에 좋은 시간이 없습니다. 결국 고객이 가동 중지 시간 없이 데이터를 즉시 분할할 수 있도록 돕기 위해 노력합니다. 그것은 매우 흥미 진진하고 매우 무서운, 그리고 당신이 그것을 피할 수 있다면 당신이 참여하고 싶은 것이 아닙니다! 이를 미리 생각하고 앱에 통합하면 나중에 앱이 확장될 경우 생활이 훨씬 쉬워질 것입니다.

요약

효과적인 분할 체계를 사용하면 클라우드 앱이 병목 현상 없이 클라우드의 페타바이트 데이터로 확장할 수 있습니다. 또한 온-프레미스 데이터 센터에서 앱을 실행하는 경우처럼 대규모 머신 또는 광범위한 인프라에 대해 선불로 지불할 필요가 없습니다. 클라우드에서 필요에 따라 용량을 증분 방식으로 추가할 수 있으며, 용량을 사용할 때 사용하는 만큼만 비용을 지불합니다.

다음 챕터에서는 수정 앱이 Blob Storage에 이미지를 저장하여 수직 분할을 구현하는 방법을 살펴보겠습니다.

리소스

분할 전략에 대한 자세한 내용은 다음 리소스를 참조하세요.

설명서:

비디오:

  • FailSafe: 확장 가능하고 복원력 있는 Cloud Services 빌드합니다. 울리히 호만, 마크 머큐리, 마크 심스의 9부작 시리즈. 실제 고객과의 MICROSOFT CAT(고객 자문 팀) 경험에서 가져온 스토리와 함께 매우 액세스 가능하고 흥미로운 방식으로 높은 수준의 개념과 아키텍처 원칙을 제시합니다. 에피소드 7의 분할 토론을 참조하세요.
  • 큰 빌드: Windows Azure 고객으로부터 배운 교훈 - 1부. Mark Simms는 19:49부터 분할 체계, 분할 전략, 분할 구현 방법 및 SQL Database 페더레이션에 대해 설명합니다. Failsafe 시리즈와 비슷하지만 자세한 방법 세부 정보로 이동합니다.

샘플 코드: