분산 시스템에서 한 서비스가 자신의 경계 컨택스트 외부에 있는 데이터가 필요로 할 때 엑세스하는 방법들은 다양하다.

 

앞으로 소개하는 방법들을 이해하기 쉽게 이 글에서 사용할 예시 케이스를 먼저 보자:

  • 서비스는 두 종류가 있다:
    • 고객이 나중에 구매하기를 희망하는 제품들을 보여주는 '위시리스트 서비스'
    • 제품에 대한 자세한 설명을 보여주는 '카탈로그 서비스'
  • 위시리스트 서비스는 다음과 같은 정보를 포함한다:
    • 고객 ID (cust_id)
    • 제품 ID (item_id)
    • 위시 리스트에 추가한 날짜 (date_added)
  • 카탈로그 서비스는 다음과 같은 정보를 포함한다.
    • 제품 ID (item_id)
    • 제품 설명 (item_desc)
    • 제품 규격 (dimension)

고객에게 위시리스트를 보여주기 위해선 제품 설명 데이터 (item_desc) 가 필요한데 위시리스트 서비스는 이를 가지고 있지 않다.

 

위시리스트 서비스가 이 데이터를 얻는 방벋들에 대해서 하나씩 살펴보자.

 


 

1. 서비스 통신 방법 (Interservice Communication Pattern)

서비스 통신을 통해서 필요한 데이터를 얻는 방법이다.

 

다음 그림은 '위시리스트 서비스' 가 필요한 데이터를 얻기 위해서 '카탈로그 서비스' 를 호출한다.

장점:

  • 간단하다.

단점:

  • 성능 저하:
    • 네트워크 통신을 통해 원하는 데이터를 얻으므로 성능이 저하된다.
  • Fault Tolerance 하지 못함:
    • 다운스트림 서비스가 죽을 경우에 업스트림 서비스도 영향을 받는다.
  • Scalability 문제:
    • 업스트림 서비스의 처리량은 다운스트림 서비스 처리에 의존한다.

 

2. 컬럼 스키마 복제 패턴 (Column Schema Replication Pattern)

컬럼 스키마 복제 패턴은 서비스가 필요한 데이터를 복제해서 자신도 가지고 있는 것이다.

 

데이터가 경계 컨택스트 밖에서 이중으로 있는 것이므로 데이터 동기화릁 통한 일관성 관리가 중요하게된다.

장점:

  • 서비스는 다른 서비스의 도움없이 자급자족으로 요청을 처리할 수 있다. 이로 인해서 얻을 수 있는 이점은 많다:
    • 확장성
    • 성능
    • Fault Tolerance

단점:

  • 데이터 일관성 관리 필요

 

3. 복제 캐싱 패턴 (Replicated Caching Pattern)

여기서 소개하는 복제 캐싱 패턴은 개념은 간단한데 구현이 어려워보인다.

 

복제 캐싱 패턴은 로컬 캐시와 같이 어플리케이션 내부에서 사용하는 메모리에 캐싱을 하는데 이들의 캐시 데이터를 동일한 뷰를 가질 수 있도록 해주는 솔루션이다.

 

그림을 보면 알겠지만 서비스 A, B, C 모두 캐싱 데이터를 내부에서 가지고 있고 하나의 데이터가 변경되면 복제 전파로 인해서 동일한 데이터를 가지게 해준다.

 

확실히 이 방법은 분산 캐싱보다 성능이 더 좋아보이며, 로컬 캐싱으로 했을 때의 일관성 문제를 해결하는 것으로 보인다.

 

복제 캐싱을 지원하는 솔루션은 Apache Ignite 가 있다고 하는데 나중에 살펴봐야겠다.

 

단점:

  • 로컬 캐싱 기반이므로 캐시 데이터로 넣을 수 있는 사이즈에 한계가 있다.
  • 처음 어플리케이션이 부팅할 때 캐시 데이터르 가지고 오므로 Startup Dependency 가 존재한다.
  • 변경이 잦은 데이터는 갱신에 대한 부담을 느낄 수 있다.

장점:

  • 원하는 데이터를 얻기 위해서 네트워크 통신을 하지 않아도 될 때 얻을 수 있는 이점들을 모두 누릴 수 있다. (e.g 칼럼 스키마 복제 패턴)

 

4. 데이터 도메인 패턴 (Data Domain Pattern)

경계 컨택스트를 넓혀서 다른 서비스에 있는 데이터에 접근 가능하게 만드는 것이다.

장점:

  • 원하는 데이터를 얻기 위해서 네트워크 통신을 하지 않아도 될 때 얻을 수 있는 이점들을 모두 누릴 수 있다. (e.g 칼럼 스키마 복제 패턴)

단점:

  • 경계 컨택스트가 넓어진다.
  • 테이블 데이터에 대한 결합이 강해져서 테이블 스키마가 변경되면 영향을 받는다.

+ Recent posts