August 29, 2019
은행 데이터라고 해서… 카카오뱅크에서 연설하겠지 싶어서 들었는데 카카오뱅크 DBA 여서 발표내용은 제대로 이해가 되지 않지만 일단 if kakao 개발자 컨퍼런스 2019 홈페이지에서 세션에 대한 설명을 들고 왔다.
MySQL의 트랜잭션 로그인 바이너리로그를 활용하여, 흐르는 은행 서비스 데이터를 다른 샤딩 디비에 효율적으로 분산 저장하는 방안을 소개. 과거 KakaoADT 오픈소스 프로젝트 컨셉을 공유하는 프로젝트2탄이며, “MySQL로 유입된 데이터”에 빨대를 꽂아, 타겟의 종류와는 상관없이, “서비스 특화된 데이터로 재구성”하는 방안을 공유하고자 합니다.
적용 사례 및 이슈사항
성동찬(chan.chan) / 카카오뱅크
결론이 데이터 분산 처리가 시급하니, 데이터를 분산 재배치 시켜보자 였다.
Pros
Cons
Pros
Cons
기존 방법만으로는 문제를 해결할 수 없다. 프로젝트 시작함!
01 MySQL Binary Log
바이너리로그는 트랜잭션 커밋 시 기록하는 로그 파일, 데이터 변경 순서를 보장. (2 fails commit) “신뢰”할 수 있는 “확정”된 변경 이력
바이너리로그는 이벤트가 많은데, ROW Event중에 Query Event : Begin Table map event Row events Table map eent Row event Query event : end
Table map event : 메타 및 맵핑 정보 (컬럼명 미포함) Write/update/Delete row events : 변경된 row 정보
Https://github.com/kakao/adt 에서부터 시작
03 Requirements
Binary Log Row Format : Row 포맷으로 기록된느 바이너리 로그여야 한다. Binary log Full Image : 바이너리 로그에 변경 전/후 이미지가 모두 포함되어야 한다.
모든 테이블 메타 정보 접근 권한 : Binary Log에는 컬럼명에 대한 정보 및 추가 정보(unsigned)가 포함되지 않음
시간은 밀리세컨드까지 제한
04 Ultra & Kakao ADT
Overwrite Sequential 데이터를 그룹핑하고, 동일 그룹 데이터는 순차 처리한다 Parallel 데이터를 그룹핑하고
05 Ultra Feature
Recover Mode : (일시적으로) 데이터 버전 체크를 하면서 덮어 쓰자 Generate Shard Value Mapping Trigger : 타겟 데이터를 마음대로 바꿔보고 싶어요. 새로운 형태로 가공하고 싶을 때, 동찬/서울/까칠의 데이터를 동찬/서울/까칠동찬 이렇게 조합해보고싶다는 뜻. Interface
06 Performance
데이터 분산(스케일아웃) 성능 테스트 - 초당 30,000건 데이터 통합(스케일인) 성능 테스트 - InnoDB(4node)에서 1node로 데이터 통합하는 것 안밀림!
장사 잘되는 천만고객의 은행 + 몬스터급 트래픽 처리 고민 + 분산 확장을 위한 UldraMan!
Uldraman은 한마디로 아래와 같다고 한다.