코딩공부/백엔드개발 공부

[Apache Ignite] Data Consistency를 위한 Data Replication, Write Sync 설정

내일의기대 2023. 12. 25. 00:34

본 글에서는 Apache Ignite에서 Data Consistency를 위한 두 가지 설정인 Data Replication, Write Sync 설정에 대해서 다룹니다.

1. Data Replication 관련 설정
Ignite은 Data Replication 관련하여 Partition, Replicated 두 가지 Mode를 제공합니다. 먼저 Partition의 경우 전체 데이터의 여러 Partition을 만들어 노드에 저장하는 모드입니다. 이때 복제본 개수는 설정할 수 있습니다. 다음으로 Replicated 모드는 모든 노드가 모든 복제본을 가지고 있는 모드입니다. 

CacheConfiguration cacheCfg = new CacheConfiguration("myCache");

cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setBackups(2);

IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCacheConfiguration(cacheCfg);

// 노드 시작.
Ignition.start(cfg);

위 코드를 보면 Data Replication을 PARTITIONED로 설정하고 데이터 Backup은 두개로 설정한 모습입니다. 만약 Replicated를 설정하고 싶다면 다음과 같이 설정하면 됩니다.

CacheConfiguration cacheCfg = new CacheConfiguration("myCache");

cacheCfg.setCacheMode(CacheMode.REPLICATED);

IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCacheConfiguration(cacheCfg);

// 노드 시작
Ignition.start(cfg);

Replicated 모드를 설정하면 Write 시 모든 노드에 전파가 돼야하기 때문에 Write 속도가 느립니다. 또한 모든 Copy를 모든 노드가 가지고 있기 때문에 용량도 많이 차지하게 됩니다. 하지만 Read 시에 Local에서 읽으면 속도가 빠르다는 장점이 있습니다. 

2. Write Sync 관련 설정
다음으로 Write Sync 관련 설정에 대해서 설명드리겠습니다. Write Sync 관련 설정은 Write 작업이 완료되는 시점을 결정합니다. 이때 시점을 결정하는 기준은 Primary Node와 Backup Node의 작업이 완료되는 시점 기준입니다. 아래로 갈수록 강한 Synchronization 모드 입니다.

  • FULL_ASYNC : Write 요청만 보내고 바로 완료 처리 됩니다.
  • PIRMARY_SYNC : Write 하고자 하는 Data의 Primary Node의 Data Update가 완료될때까지 기다리고 완료처리가 됩니다.
  • FULL_SYNC : Primary Node 뿐만아니라  모든 Backup Node의 Data Update 완료하여 응답하면 비로서 완료처리가 됩니다.

설정하는 코드는 아래와 같습니다.

// Write Synchronization 관련 모드를 설정합니다. 
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);

만약에 Data Replication 모드를 Replicated 모드를 사용하고 setReadFromBackup 설정을 건드리지 않았다면 FULL_SYNC를 사용하는 것이 Data Consistency에 좋을것입니다. setReadFromBackup 설정은 Backup Node에서 데이터를 읽어드릴지를 결정하는 옵션인데 default가 true 입니다. Replicated 모드에서는 기본적으로 Local에서 Read를 한다는 것인데 Write Sync 모드가 FULL_SYNC가 아니라면 다른 Node에서 Write한 데이터와 Local Read 데이터가 달라지는 경우가 많이 발생할 것입니다.

3. 기타
Data Consistency 관련 설정은 atomicity Mode, Partition Loss Policy 등 더 다양한 설정이 있습니다. 앞으로 더 다양한 Data Consistency 설정에 대해서 공부할 예정입니다. 아래 공식 문서 링크를 들어가시면 더 다양한 설정 정보를 얻으실 수 있습니다.

참고자료

https://ignite.apache.org/docs/latest/configuring-caches/configuration-overview

https://www.gridgain.com/resources/technical-presentations/architects-guide-apache-ignite-acid-transactions-and-consistency