들어가며..
최근 운영 환경 데이터베이스의 저장소를 NFS에서 분산 스토리지 시스템 CephFS를 도입해 이관하는 작업을 진행했다. 이관 목적은 NFS를 사용하던 경우 PV 추가를 하는 경우 관리가 어렵고, 현재 NFS를 구성한 위치가 host에 구성해서 불필요하게 접근 포인트가 늘어난 기분이 들었다.
간단한 방법
가장 단순한 방법은 새로운 데이터 변경점이 없도록 서비스를 일시적으로 중단하고, 기존 데이터베이스의 모든 데이터를 복제해 이관할 수 있다. 적은 트래픽을 가진 서비스에선 비용 측면이나, 시간적으로 빠르고 진행할 수 있어 계획만 잘 수립하면 부담 없이 시도해 볼 수 있는 방법이라고 생각된다.
무중단 데이터베이스 이관 작업
앞서 소개한 서비스 이용 시간대가 낮은 새벽 시간대에 서비스 일시중단을 하는 것이지만, 이 작업은 서비스가 일시적으로 중단되어 사용자 경험이 떨어지고, 만약 이관할 데이터가 큰 경우 작업 완료 시점을 예상하기 어렵고, 장애가 발생하기 쉬울 것이다.
두 번째로 생각할 수 있는 작업은 Martin Fowler의 Strangler fig pattern을 사용해 볼 수 있다. 이 방식은 신규 서비스와 레거시 서비스 동시에 운영하며 레거시 서비스를 점점 줄여가 최종적으로 신규 서비스로 전환하는 방법이다. 이 방식은 완전히 이전될 동안 동일한 기능을 하는 인스턴스를 운영해 비용적인 부담이 있을 수 있지만, 사용자에게 아무런 영향을 주지 않으며 서비스를 이관하는 방식이다.
이벤트 기반 데이터 동기화
이 방식은 레거시 시스템에서 데이터 수정/변경 이벤트가 발생한 경우 해당하는 이벤트를 발행해 신규 서비스에서 처리하도록 구성하는 방식이다. 이 방식의 경우 이관할 데이터베이스가 다른 경우도 유효한 방식이며, SQS 같은 이벤트 큐를 이용해 신규 서비스가 일시적으로 동기화할 수 없는 상태가 발생하더라도 기존 시스템에 영향을 주지 않으며 이후 큐에 쌓인 이벤트를 처리함으로써 데이터를 이관할 수 있다.
'메모' 카테고리의 다른 글
알림 기능 고찰 🤔 (0) | 2023.12.21 |
---|---|
extends JpaRepository<Cookie, String> (0) | 2023.12.20 |
GeoIP를 활용한 Nginx 국가별 접근 차단: 당신의 웹사이트를 지키는 글로벌 관문 🌍 🗝️ (1) | 2023.12.12 |
N+1 발생을 쉽게 파악할 수 없을까? (0) | 2023.12.08 |
서버 성능 병목은 어디서 발생할까? (0) | 2023.11.29 |