-
[TIL] 심화 주차 개인 과제 진행 (D-3), 강의 수강 (Sharding)TIL-sparta 2024. 6. 11. 20:53
> 과제의 필수 요구사항을 진행하고, 저녁 강의에서 배운 내용을 간략하게 정리해보았다. 강의 노트가 게재되면 잘못된 내용이나 부족한 부분을 보강하도록 해야겠다.
학습 키워드: Database, sharding, XA Transaction, 2-Phase-Commit
1. 강의 내용
1) Database Sharding:
샤딩은 데이터베이스를 물리적으로 나누는 작업을 의미한다. 이전 프로젝트 처럼 테이블 몇 개가 다른 데이터베이스로 가는 개념이 아니라, 하나의 테이블에 있는 데이터를 여러 개로 분리된 데이터베이스에 나눠서 저장하여 요청들을 병렬처리하는 개념이다.
2) How does it work?:
나누는 방식에는 modulo를 사용하거나, if else 로 구간을 나누거나, hash 함수를 이용하는 방법 등이 있다고 하는데, 앞의 방식들은 샤드의 개수가 변경될 때 데이터의 이동이 많이 발생하게 되는 단점이 있다. 예를 들어 modulo 4로 나뉜 샤드가 있다면, 샤드의 개수를 3개로 줄여야해서 modulo 3을 사용하게 된다면 없어진 DB의 데이터 외에도 남아있는 DB에 있던 데이터들의 modulo 값도 달라지기 때문에 불필요한 데이터 이동이 많아지게 된다.
3) Consistent Hashing:해싱을 통해 데이터를 샤드에 균등하게 분배하는 방식이다. 해시 함수로 얻어낸 값을 이용하여 똑같이 해시 함수를 이용해 원형으로 분포시킨 서버들 중 시계방향(예시)으로 회전하며 가장 처음 만난 서버에 데이터를 보관한다. 조금 더 균등한 분배를 위해 사이사이에 가상 노드를 넣어두는 방식도 있다고 한다.
3) Why use it?:
단순히 DB 서버 내 데이터가 너무 많아서 요청 처리가 어려운 경우거나, 요청이 너무 많아서 처리가 지연되는 등의 경우에서 사용하게 되는데, 샤딩 자체가 복잡하고 관리하기 어려우며, transaction이 여러 DB에 걸쳐서(XA Transaction, or 2-Phase Commit) 일어나기 때문에 속도가 많이 느린편이기 때문에 전문 기술자가 없거나 샤딩이 꼭 필요한 경우가 아니면 사용하지 않는다고 한다.
2. 과제 진행 사항- (필수) PR #8 아이템 획득 시 아이템별 지정 점수(서버 asset) 획득하는 기능 구현
- 현재 매 획득 마다 서버에 보내서 verification을 하고있는데, 서버 부하를 낮추기 위해 스테이지별로 확인하는 방법을 고려해보도록 하자
- (필수) PR #9 특정 점수(정해진 점수) 만족 시 다음 스테이지로 이동하는 기능 구현
- 스테이지별 초당 점수 획득량이 서버의 asset에 지정된 수치만큼으로 변동되도록 구현
--
REFERENCES:
(링크 추가 예정)
> 강의 노트
> Wikipedia, "Consistent hashing"
> 개인 과제 repo
728x90'TIL-sparta' 카테고리의 다른 글
[TIL] 심화 주차 개인 과제 (Chrome Dino Web Socket Server) 진행 (D-1) (2) 2024.06.13 [TIL] 심화 주차 개인 과제 (Chrome Dino Web Socket Server) 진행 (D-2) (0) 2024.06.12 [TIL] 스파르타) 심화 주차 강의 수강, 개인 과제 시작 (Chrome Dino Web Server) (0) 2024.06.10 [TIL] OOD (Object-Oriented Design) principles - SOLID (0) 2024.06.09 [TIL] 풋살 온라인 프로젝트 종료 - 2부 (ERD 수정해보기) (0) 2024.06.08 - (필수) PR #8 아이템 획득 시 아이템별 지정 점수(서버 asset) 획득하는 기능 구현