최근 MySQL을 공부하면서 위 2가지 부분에 대해서 궁금증이 생겼다. 비슷한거 같으면서도 다른 개념들을 확실히 정리하고 넘어갈려고 한다.
서버의 성능에 한계가 생기면 뭐가 되었건 성능을 올리기 위한 방법을 찾아야 하는데 Scale up, Scale out 이 해당된다.
1. Scale up
메모리, 디스크 등의 스펙을 향상시키는 것 -> 수직 향상
그러나 1개의 서버에 부하가 발생 가능
2. Scale out
동일 스펙의 서버를 여러개 추가하여 분산 처리하는 것 -> 수평 향상
그러나 로드 밸런싱 문제와 데이터 정합성을 처리하는 문제도 존재
간단하게 생각하면 서버를 복제하는 것이다. 여기서는 DB가 해당될 것이다.
주의할 점은 정말 똑같이 복제한다는 것이다. Sharding
과 혼동하지 말자!
1. Master - Slave 관계를 가진다.
Master DB에서 삭제, 등록, 수정등이 이뤄진다면 Binary log로 생성하여 이를 Slave 쪽으로 전달, 이후 Slave가 이를 반영
2. 백업, 부하 분산을 가능하게 함
읽기 작업은 Slave에서 나머지 작업을 Master에서 진행하면 자연스레 작업이 분할되어 부하도 분산된다
사실 Master - Slave 단어 사용은 지양하라고 하지만 해당 단어가 익숙하여 이 단어들로 글을 쓰고 있다...
Sharding
Row 분산을 의미한다. 10개의 Row 가 있다면 5번까지 DB A 에 저장,
6 ~ 10번은 DB B에 저장한다.
Ex) 국가 코드를 생각하자! 한국 Row는 DB A, 미국 Row는 DB B
사실 개념만 비교해보면 다를게 없다. 하지만 1차적으로 의심해보면 같은 것이라면 굳이 용어를 분리할 이유가 없지 않은가?
16.3.4 Using Replication for Scale-Out
You can use replication as a scale-out solution; that is, where you want to split up the load of database queries across multiple database servers, within some reasonable limitations.
https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-scaleout.html
공식 MySQL 문서를 확인해보면 Replication을 Scale out 을 위해 사용할 수 있다고 한다. 이것만 보면 동일한 개념이 아니라 Scale out의 방식 중 하나가 replication이 아닐까?
그림만 보면 Scale out과 동일하다.
What is Database Scale-out?
Scale-Out is a modern computing architecture that enables
organizations to improve application performance and
scalability on an incremental, as-needed basis by adding
multiple replicated database servers on low-cost commodity
hardware.
-Oracle-
Scaling Horizontally
Oracle 에서 설명하는 Scale out은 현대 컴퓨팅 기술 중 하나로 소개하고 있다. 뭔가 점점 말장난에 빠지는 기분이다... 그냥 요리를 할 때 칼을 사용하거나 가위를 사용하듯이 MySQL 에서는 그 방법 중 하나가 Replication 이라는 확신이 점점 든다.
Scaling Horizontally
For projects with requirements for high availability or failover, adding additional servers can be the right solution. Horizontal scaling can be done with a variety of configurations: Active-Passive, Master-Slave, Cluster, or Sharding.
https://www.oshyn.com/blog/2011/11/mysql-scaling-options#horizontally
드디어 찾았다. 해당 글에 아주 잘 소개되어 있다. 앞서 잠깐 언급했던 Sharding은 물론 Master-Slave(Replication) 이 수평 확장 즉, Scale out에 해당되는 것으로 보인다. Scale up도 잘 설명되어 있다.
동일한 개념은 아니다! 공식 문서에도 나와있듯이 Scale out을 구현하는 방법중에 MySQL 은 Replication이 존재하는 것이다!