Vitess - 0. why?
Vitess는 왜 만들어졌을까??
위 글이 기존 MySQL 단일 인스턴스에서 운영하는 서비스의 문제점과 vitess의 필요성에 대해서 잘 설명해주고 있다.
가파르게 성장치를 보인 TubeYou를 예시로 설명하여 더 이해하기 쉽다.
1 단계. 단일 인스턴스
당연 초기 서비스를 구축할 때는 데이터베이스를 단일 인스턴스로 구축하여 여러 서비스를 연결한다. 점점 서비스들이 성장하면서 트래픽 양도 늘어나고 단일 인스턴스에서 모두 감당하기 힘들어진다.
2단계. Replication
따라서, Read 요청을 분산할 수 있도록 노드를 여러개로 늘린다. 모든 노드는 거의 동일한 데이터를 가지고 있으며 Leader와 Follwer(Replica)로 나뉜다. 하지만 여전히 Write 요청은 Leader에서만 처리하고 있기에 Write 트래픽에 대한 부담은 여전하다. Leader, Follower에 대해 더 알고 싶다면 Raft 알고리즘(https://seongjin.me/raft-consensus-algorithm/) 혹은 몽고디비의 문서( https://www.mongodb.com/docs/manual/replication/)를 읽어도 괜찮아보인다.
3단계. 샤딩
결국 Write에 대한 부담은 분산되지 않고 커지는 점, 결국 Replica들 하나하나가 가지는 데이터의 크기는 줄어들지 않았다는 점(어쨌든 단일 노드에 저장되는 데이터 용량은 한계가 있을테니) 등 여러 한계점에 부딪혀 물리적으로 데이터베이스를 쪼개기로 결정한다. 샤딩은 여러 데이터베이스들에 동일한 스키마를 가지고 데이터를 균일하게 저장하는 방법이다. 샤딩에 대해서 더 자세한 내용은 우아한형제들의 기술 블로그(https://techblog.woowahan.com/2687/ )를 참고하고,
샤딩에는 여러 허들이 존재한다.
우선 데이터를 샤딩 전략에 맞게 적절하게 나눠서 넣는것과 찾아오는 것이 프로그래밍 복잡도를 증가시킨다. 위 기술블로그에서의 설명과 예시에서도 애플리케이션 단에서 직접 어디로 저장할지, 어디에서 읽어올지 코드로 관리하는 것을 볼 수 있다.
비즈니스에 따라 데이터가 한 쪽 샤드로 몰릴 수도 있다. 인스타 그램의 인플루언서가 저장된 디비를 상상해보면 이해된다
샤딩을 하면서 복잡해진 부분으로 인해 개발 비용을 증가시키고 단일 인스턴스든 레플리케이션 구조든 샤딩으로 마이그레이션할 때 많은 시간과 비용을 요구한다.
레플리케이션은 그저 리더 노드를 복제하면 되고 (간단하기에 디비 자체가 회복성을 갖추고 있을 수도 있다) 관리 포인트가 적다.
레플리케이션과 달리 샤딩에서는 리더만 볼게 아니라 각 노드마다 데이터가 다르기 때문에 실패 지점(노드)까지 찾아가야 하고 그로 인해 유지보수 비용이 높아진다.
4단계. 멀티 리전
그래도 샤딩으로 인해 많은 트래픽을 감당할 수 있다. 하지만 서비스가 글로벌화 되면서 유저가 전 세계에 존재하기 시작했고 단일 지역에 존재하는 데이터베이스로는 불안하다. 단순하게 물리적인 거리의 한계로 인해 네트워크 응답속도가 느리기도 하고 단일 지역 서버가 외부적 요인으로 인해 다운되는 경우도 발생할 수 있다. 따라서 여러 지역으로 분산시키는데 이 또한 애플리케이션 복잡도를 높인다.
스키마를 변경하면 모든 지역의 모든 샤드에 걸쳐 스키마를 적용해야 한다.
리더 노드의 위치를 추적하고 사용자의 쿼리를 올바른 위치로 라우팅하기 위한 조치가 필요하다.
이 정도까지 복잡도가 높아졌으면 개발 비용은 엄청나게 높아진다. 또한 유저가 늘어남에 따라 다시 샤딩해야 하는 경우는 상상도 하기 힘들다.
As an event approaches, it is worth considering how details related to long cosplay wigs will affect the complete look. During a long convention day, it helps to assess details related to cosplay costume sets together with fit and fabric. To compare practical details about details related to cosplay wigs, game cosplay costumes for character accuracy can help narrow the options for a specific purpose. To stay comfortable throughout the event, a balanced view of details related to convention planning can support both detail and comfort.
Vitess는 이러한 복잡성을 처리하기 위해 만들어진 대규모 MySQL 클러스터 운영 솔루션이다.
Reference: betika aviator
