본문 바로가기
일/aws

AWS DMS Consistency Checking Application Concept

by blair2dev 2022. 1. 11.

aurora DB 와 s3 의 정합성을 체크 하는 애플리케이션이 필요하다.

 

===============================================================

 aws doc에 뭔가 있다…

 

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Validating.html

 

정확히 마이그레이션 됐는지 데이터 검증함 

데이터 전체 로드한 후 검증 시작 

증분 변경 사항이 일어날 때 비교 (그럼 계속하겠다는건데? )

 

원본, 타겟 행간 비교 후 불일치 보고

 

Data validation works with the following databases wherever AWS DMS supports them as source and target endpoints:

  • Oracle
  • PostgreSQL-compatible database (PostgreSQL, Aurora PostgreSQL, or Aurora Serverless for PostgreSQL) 
  • MySQL-compatible database (MySQL, MariaDB, Aurora MySQL, or Aurora Serverless for MySQL) 
  • Microsoft SQL Server
  • IBM Db2 LUW

 

소스, 타겟 엔드포인트가 나열된 디비 타입만 제공한다. 우리는 타겟이 s3 이므로 이걸 사용할 수는 없다. ㅠㅜ

===============================================================

 

pyspark 로 스케줄링 걸어서 특정 스케줄 마다 정합성을 체킹하는 프로세스를 만들면 될 거 같다. 

 

pyspark 에어플로 스케줄링과 slack 얼럿은 s3 restore 할 때 했던 것들을 참고 하면 될듯 하다. 

 

로직 : 어떻게 체크할까 ?

  1. 특정 pk 에 해당하는 튜플을 s3 와 원본 db 에서 가져와서 비교
    풀체킹? 아니면 몇 개만? 성능을 고려 해봐야 할듯하다..
  2. 카운팅 : 데이터 건수 체크
    데이터 건수는 데이터가 소스 디비에 곗속 들어오기 때문에 지난 일자로 끊어서 비교해야 함 

 

2.1   일별로 짤라서 특정시간(airflow 배치 01시쯤 전 날꺼?) 에 수행 

2.2 어플리케이션에 RDB dao 만들어서 이 메타 디비에 특정일자의 tuple 갯수 insert

2.3 어플리케이션에 spark 로 특정일자의 df 가져와서 tuple 갯수 메타디비에 insert 

2.4 비교해서 차이가 심하면  얼럿

2.5 모니터링 시각화 (grafana?)

 

이 처럼 체킹하는 프로세스가 메타 디비에 각각의 카운트 수를 저장하여 시계열로 모니터링도할 수 있음 (https://burning-dba.tistory.com/130)

 

  1. 중복 체크 :
    3.1 유니크 칼럼 groupby, count 해서 한개 초과 뜨면 중복 으로 판단
    3.2 중복 칼럼이 뜨면 slack 얼럿
    ex)
    SELECT id,COUNT(*) AS cnt
    FROM TABLE
    GROUP BY id
    HAVING count(*) > 1

 

  1. 구성도

세부 기능 정의

  • count 
    • 특정일정 mod date 기준 mod date 없는 경우 스킵 
      • 과거 데이터
        • 두달 전 ~ 한달 전 
          • 정합성이 100% 맞았을 경우 
          • 해당 기간 정합성이 맞았다는 것을 디비에 기록
            • 스키마 -> 시작 mod date, 종료 mod date, 정합성 체킹 일시
      • 최근 데이터 
        • 당일 00시 ~ now()-3m 데이터 비교 
          • 일별 count data  db에 insert 
            • 해당 db grafana 시각화 
            • 오차치 임계점 넘으면 slack alert  (일단 0.1% 라고 설정하겠음)
  • key tuple 데이터 정합성
    • 샘플링 방법  
      • 일단 1퍼센트 갯수만큼 
        • 10000 tuple  이면 각각 100개 가져와서 pk 별로 루프돌면서 정합성 확인
          • 동일한 mod_date 날짜범위 에서 아래 수행
          • 테이블에서 100개 pk 리스트 가져옴
          • 해당 pk 로 parquet 에서 조회 
          • 있으면 멤버 데이터 값 비교 없으면 스킵 

 

 

 

아래 글을 참고 했음.

https://burning-dba.tistory.com/130