O0oO0Oo / Coin

비트코인 프로젝트 리팩토링
1 stars 0 forks source link

feat: testing for replication lag problem, replication aware #36

Closed O0oO0Oo closed 10 months ago

O0oO0Oo commented 10 months ago

이슈 개요

  1. 삭제(master) -> 락(master) -> 읽기(slave) 과정에서 발생하는 Master-Slave 간 데이터 불일치 문제점 테스트
  2. MySQL 을 Replication 으로 구성했을때 readOnly 에 대해서는 레플리카로 요청이 가도록 구현합니다.

재현 단계

예상 동작

동기화 지연으로 인해 문제가 발생합니다. readOnly 는 레플리카로 쓰기요청은 마스터로 갑니다.

실제 동작

Redis == 동기화 지연으로 인해 문제 발생 가능, Master 로만 읽기/쓰기로 변경 MySQL == readOnly = true - replica, write = master

추가 정보

O0oO0Oo commented 10 months ago

Result of redis replication lag testing

1000개 이상의 데이터 등록 다음과 같이 진행 삭제(master) -> 락(master) -> 읽기(slave)

삭제 후 읽기에서 Master-Slave 간 불일치 확인

O0oO0Oo commented 10 months ago

Solution to Redis Replication lag

쓰기, 읽기 성능을 높이고 불일치를 방지하려면 현재 구성에서 다음과 같이 마스터에서만 읽기/쓰기로 설정을 하거나

        Config config = new Config();
        config.setCodec(StringCodec.INSTANCE);
        config.useMasterSlaveServers()
                .setMasterAddress(master.toString())
                .setReadMode(ReadMode.MASTER)
                .setLoadBalancer(new RoundRobinLoadBalancer());

Cluster 로 구성후 마스터에서만 읽기/쓰기를 하면 되지않을까? 하지만 Cluster 구성은 오버엔지니어링 아닌가? 성능과 비용에서 절충이 필요하다.