본문 바로가기
Spring/Spring Cloud

샤딩

코동이 2021. 11. 7.

샤딩(sharding)이란 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것을 말한다.

 

 

imageKey를 가지고 여러대의 5대 서버에서 연산 후에, 매칭되는 곳에 저장한다.

yyyymmdd 날짜별로 월별, 연도별로 구성해서 데이터를 기준으로 나누어서 넣는다.

 

데이터에서 기준을 잡고 분류하는 방식과 정책을 샤딩이라고 한다.

클러스터링은 모든 데이터이 정합성이 맞아야 하기 때문에 많은 비용이 발생할 수 있다.

샤딩은 모든 데이터를 들고있지 않고 범위를 정해서 규칙에 따라 가지고 있다.

 

꼭 샤딩이 유리한 것은 아니고 서비스 유형에 따라서 샤딩이나 클러스터링을 사용한다.

 

 

*샤딩 종류

모듈러 샤딩(Modular Sharding)

레인지 샤딩(Range Sharding)

 

* 공통 요구사항

  • 라우팅을 위해 구분할 수 있는 유일한 키값이 있어야 한다.
  • 올바른 DB를 찾을 수 있도록 라우팅이 돼야 한다.
  • 설정으로 쉽게 증설이 가능해야 한다.

 

* 모듈러 샤딩

- 모듈러샤딩은 PK를 모듈러 연산한 결과로 DB를 특정하는 방

 

  • 장점 : 레인지샤딩에 비해 데이터가 균일하게 분산됩니다.
  • 단점 : DB를 추가 증설하는 과정에서 이미 적재된 데이터의 재정렬이 필요합니다.

 

 데이터량이 일정한 수준에서 유지될 것으로 예상되는 데이터 성격에 적용한다. 데이터가 꾸준히 늘어날 수 있는 경우라도 적재속도가 그리 빠르지 않다면 모듈러방식을 통해 분산처리하는 것도 고려해볼 수 있다.
 결론은, 데이터가 균일하게 분산되어 트래픽을 안정적으로 소화하면서도 DB리소스를 최대한 활용할 수 있다.

 

* 레인지 샤딩 

- 레인지샤딩은 PK의 범위를 기준으로 DB를 특정하는 방식

 

  • 장점 : 모듈러샤딩에 비해 기본적으로 증설에 재정렬 비용이 들지 않습니다.
  • 단점 : 일부 DB에 데이터가 몰릴 수 있습니다.

 

레인지샤딩의 가장 큰 장점은 증설작업에 드는 비용이 크지 않다. 데이터가 급격히 증가할 여지가 있다면 레인지방식도 좋은 선택이다.


하지만, 주로 활성유저가 몰린 DB로 트래픽이나 데이터량이 몰릴 수 있기 때문에 기껏 분산처리를 했는데 이런 상황이 발생하면 또다시 부하분산을 위해 해당 DB를 쪼개 재정렬하는 작업이 필요하다. 반대로 트래픽이 저조한 DB는 통합작업을 통해 유지비용을 아끼도록 관리해야 한다.

 

 

 

* 참고

우아한 형제 DB분산처리를 위한 sharding

https://techblog.woowahan.com/2687/

 

 

반응형

'Spring > Spring Cloud' 카테고리의 다른 글

메세지 큐  (0) 2021.11.07
DNS  (0) 2021.11.07
웹서비스 확장전략  (0) 2021.11.07