ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [테코톡] DB Replication 3, Clustering, Sharding
    DB/DB 2023. 3. 10. 04:06

    ---

    https://youtu.be/NPVJQz_YF2A - 엔지, 자막

    https://youtu.be/95bnLnIxyWI - 영이, 자막

    https://youtu.be/y42TXZKFfqQ - 히브리 클러스터링 샤딩 레플리케이션

     

    ---

    https://youtu.be/y42TXZKFfqQ - 히브리 클러스터링 샤딩 레플리케이션

     

    단어들이 여러분야에서 사용되고 있지만, 여기선 DB관련해서만

     

    ---

    공통점은 저건데

    목적이 다르고, 요소들이 다르다

     

    ---

    데이터베이스는

    요청을 처리하는 Server와

    데이터가 저장되는 storage가 있다

    이걸 베이스로 생각할 것이다  ▽아 이렇게 생각해야 되는구나

     

    ---

    먼저 Clustering

    이게 나오게 된 배경이 DB서버가 죽으면 어떡하지?인데, 가장 먼저 생각할 수 있는게 여러개로 만들자야

     

    ---

    먼저 Active-Active Clustering

    서버를 여러개로 구성

    Active : 실제로 동작하는 상태

    하나가 죽더라도 다른 하나가 역할을 할 수 있다.

    서버의 중단없이 서비스가 계속 될 수 있고, 서버 두대가 운영되기 때문에 CPU, 메모리를 더 많이 사용할 수 있다

     

    단점은 스토리지 하나를 공유하기 때문에 병목이 생길 수 있다. 두가지를 운영하기 때문에 비용적 측면이 있다

     

    ---

    Active - Standby

    Active에 문제가 생겼을 때 전환

    전환하는데 시간이 걸림

    active-active에 비해 비용 절감

     

    ---

    다음 Replication

    이게 나오게 된 배경은

     

    서버가 죽은건 클러스터링으로 해결

    근데 스토리지는 하나이기 때문에 그걸 해결하기 위해서

     

    ---

    기본적인 Replication구성, 백업용

    더 나아가서 레플리카를 그냥 백업용으로만 놔두기엔 아까우니 select용으로 부하분산

     

    ---

    Sharding

    데이터가 쌓이면

    검색을 빠르게 하는건 여러 방법이 있는데, Sharding은 테이블을 나누는 것

     

    ---

    샤딩은 테이블을 row단위로 나눠서 각각의 Shard에 저장하는 것

    데이터를 검색할 때 그 데이터가 어느 샤드에 있는지 알게 되면 검색자체는 더 빠르게 진행됨

     

    ---

    Sharding 테이블을 구성할 때 고려할 사항

    어떻게 잘 분산?

    어떻게 읽음?

     

    ---

    고려할 때 나오는게 Shard Key

     

    ---

    Hash Sharding

    Shard 0,1,2,3이 Shard Key다. 이걸 결정하는데 Hash 함수를 사용한다

    구현 자체가 샤드의 수만큼 해싱을 하면 되기 때문에 구현이 간단  ▽그쪽으로 가면 비슷한 애들끼리 있네요 나중에 찾을 때 좋겠어 아 이 특성은 저기 몰려있어요~ 이런식

    근데 샤드가 늘어나면 해시 함수가 달라져야해. 기존에 저장되던 데이터들에 정합성이 깨짐

    단순히 키를 고려해서 데이터를 나눠서 공간의 효율성을 고려하지 않는다(▽한쪽으로 쏠린단 말이겠지)

    ---

    확장성을 해결하기 위해 나온 방법 Dynamic Sharding

    Locator service라는 테이블 형식의 구성요소를 갖고 Shard Key를 결정하는 방식

    이러면 Shard가 하나 더 추가된다고 해도 Locator service Shard Key만 추가하면 됨

     

    단점으로 Locator service에 Shard들이 종속적이라 Locator service에 문제가 생길 때 샤드 전부 다 문제가 생긴다

     

    ---

    Entity Group

    앞의 1번 2번은 RDB보단 No-SQL에 더 적합한 Sharding방식이야

    Entity Group은 관계가 돼 있는 Entity끼리 같은 Shard내에 공유하도록 만드는 방식

    User가 작성한 Posts나 Comments를 같은 Shard내에서 갖고 있도록 구성

    다른 Shard끼리도 연관되는 쿼리가 있을 수 있는데 그럴 땐 실행 효율이 오히려 떨어져

     

    ---

    현재 상황에 맞게 잘 선택하기

    Sharding같은 경우에는 복잡성이 매우 높아져서 캐시같은 방법을 통해서 성능 향상을 먼저 생각해보고 마지막 방법으로 선택하는 것이 좋아보인다

Designed by Tistory.