kakao의 오픈소스 Ep5 – Almighty Data Transmitter

 

“카카오의 오픈소스를 소개합니다” 다섯번째는 gordon.hahn과 동료들이 개발한 ADT – Almighty Data Trasmitter입니다.

ADT는 샤드 구성이나 사딩 규칙이 바뀔 때 샤드를 재분배하는 용도로 만들기 시작했지만, MySQL에서 데이터를 수집하여 다른 MySQL로 데이터를 전송하는 – CDCETL이 결합된 – 만능 데이터 전송 도구로 변모하고 있습니다.

ADT는 그 자체로도 유용한 소프트웨어 도구지만, MySQL 기반의 CDC/ETL 시스템을 구축하기 위한 좋은 시작점이 될 것 입니다.

ADT는 무엇을 위한 툴인가요?

ADT는 MySQL의 데이터를 수집하여 사용자가 원하는 형태로 가공하거나 다른 DB에 적재할 수 있는 툴입니다. 크게 나누면 두 가지 용도가 있습니다.

  • 1회성 마이그레이션 작업
  • 실시간 마이그레이션 작업

각각에 대해 활용 예시는 다음과 같습니다.

  • 1회성 마이그레이션
  • 샤드 데이터 재분배 혹은 샤드 룰 변경(Modulus를 Range로, 혹은 반대로 변경)
  • 완전히 새롭게 설계한 스키마로 데이터 복사
  • 1일 1회 MySQL의 데이터를 OLAP DB로 복사
  • 실시간 마이그레이션
  • MySQL의 실시간 변경되는 데이터를 NoSQL로 복사하여 read 부하 분산
  • 어떤 특별한 write 이벤트를 감지해서 Push Notification 전송
  • 사용자의 GPS 정보를 기준으로 샤드 재구성 (가까이 있는 다른 사용자들 찾기에 편리하겠죠?)

이 외에도 여러 용도들이 있을 겁니다. 나머지는 여러분들의 상상력에 맡깁니다. 풀리퀘스트의 문은 활짝 열려있습니다 ^^;

ADT는 어떤 기능들이 있나요?

ADT 자체가 하는 일은 단순합니다.

  • MySQL에서 데이터 수집
  • Table Crawler: 각 테이블에 있는 데이터 수집
  • Binary Log Receiver: 실시간으로 변경되는 데이터 수집
  • 수집한 데이터를 사용자가 구현한 Custom Handler로 전달

ADT Overall Architecture

용도에 따라 Custom Handler를 구현하는 게 허들이라면 허들일 수 있지만, 샤드 재분배용 커스텀 핸들러의 소스 코드를 참조하면 그렇게 어렵지 않….을 겁니다. 아마도…요.(이 부분에 대해서는 다른 글을 통해서 더 자세히 알아보겠습니다)

현재는 MySQL에서만 데이터를 수집하지만, 인기가 많으면 더욱 다양한 DB가 추가될 수도 있습니다. 역시나! 풀리퀘스트의 문은 활짝 열려있습니다 ^^;

적용 사례

현재까지는 적용된 사례가 딱 하나 있습니다. 모 서비스의 테이블 스키마가 많이 변경되는 작업이었는데, 도저히 ALTER TABLE로 어떻게 할 수 있는 수준이 아니었다고 합니다. 테이블 스키마가 많이 바뀌어서 서비스 무정지 변경은 못했지만, ADT의 초기 버전을 이용해 무사히 마이그레이션 할 수 있었습니다.

ADT를 만들게 된 이유이자 핵심 목표인 샤드 재분배용 커스텀 핸들러는 현재 DB 엔지니어들과 안정성/정합성을 검증하는 단계입니다.

끝으로…

  • ADT 특징에 관한 좀 더 자세한 내용
  • 사용 방법
  • 요구 사항
  • 데이터 정합성에 관한 이야기

등등… 이 글에서 다루지 못한 많은 내용들이 README에 담겨있습니다. 현재까지 구현된 ADT 프레임웍 본체와 검증이 진행 중인 샤드 재분배용 커스텀 핸들러의 소스 코드는 아래 Github 사이트에서 확인할 수 있습니다:

  • https://github.com/kakao/adt

kakao 기술 블로그위키을 통해서 ADT의 활용 사례를 소개할 예정입니다. ADT가 이름처럼 전지전능한 도구가 될 수 있도록 여러분들의 많은 관심과 참여를 기대합니다.

special thanks to 성동찬 (한국카카오 카카오뱅크)

  • 커버 이미지 출처: Swiss Army Knife – 3 © [Tom Von Lahndorff](https://www.flickr.com/photos/tomvon/
  • 데이터베이스 아이콘 출처: http://www.seaicons.com/database-icon/
카카오톡 공유 보내기 버튼

Latest Posts

언어모델의 원리와 만들기

언어모델 언어 모델(Language model)은 주어진 단어들의 시퀀스에 대해 임베딩 표현(Embedding representation) 또는 벡터(Embedding vector)를 만들어 줍니다. 언어 모델을 통해 만든 임베딩 표현으로