다중 테넌시

다중 테넌시 (Multi Tenancy)

Pulsar는 처음부터 다중 테넌트(multi-tenant) 시스템으로 설계된 메시징 플랫폼이에요. 한 클러스터를 여러 팀이나 애플리케이션이 함께 나눠 쓰면서도 서로 간섭 없이 관리할 수 있게 해주는 구조죠. 이 글에서는 테넌트(tenant)와 네임스페이스(namespace)라는 두 핵심 개념을 중심으로 다중 테넌시가 어떻게 동작하는지 설명해 드릴게요.

출처: 문서

본문

Pulsar는 처음부터 다중 테넌트 시스템으로 만들어졌어요. 다중 테넌시를 지원하기 위해 Pulsar에는 테넌트(tenant)라는 개념이 있어요. 테넌트는 클러스터 전반에 걸쳐 퍼질 수 있고, 각각 자신만의 인증 및 권한 부여 방식을 적용할 수 있어요. 또 테넌트는 저장 할당량, 메시지 TTL, 격리 정책을 관리하는 행정 단위이기도 해요.

Pulsar의 다중 테넌트 성격은 토픽 URL에서 가장 잘 드러나요. 토픽 URL의 구조는 이렇게 생겼어요:

persistent://tenant/namespace/topic

보시다시피 테넌트는 토픽을 분류하는 가장 기본적인 단위예요 (네임스페이스와 토픽 이름보다 더 근본적인 단위죠).

테넌트

Pulsar 테넌트는 용량을 할당하고 인증 또는 권한 부여 방식을 적용하기 위한 행정 단위예요. Pulsar 인스턴스의 각 테넌트에 다음을 할당할 수 있어요:

  • 권한 부여 방식
  • 테넌트의 설정이 적용되는 클러스터 집합

네임스페이스

Pulsar 네임스페이스는 토픽을 논리적으로 묶어 놓은 것이에요. 테넌트와 네임스페이스는 다중 테넌시를 지원하는 Pulsar의 두 핵심 개념이에요.

  • Pulsar는 특정 테넌트를 위해 프로비저닝되며, 해당 테넌트에 적절한 용량이 할당돼요.
  • 네임스페이스는 테넌트 안의 행정 단위 이름이에요. 네임스페이스에 설정한 구성 정책은 그 네임스페이스 안에 생성된 모든 토픽에 적용돼요. 테넌트는 REST API와 pulsar-admin CLI 도구를 이용해 자체 관리 방식으로 여러 네임스페이스를 만들 수 있어요. 예를 들어 서로 다른 애플리케이션을 가진 테넌트는 애플리케이션마다 별도의 네임스페이스를 만들 수 있죠.

같은 네임스페이스 안의 토픽 이름은 이렇게 생겼어요:

persistent://tenant/app1/topic-1persistent://tenant/app1/topic-2persistent://tenant/app1/topic-3

네임스페이스 변경 이벤트와 토픽 수준 정책

Pulsar는 다중 테넌트 이벤트 스트리밍 시스템이에요. 관리자는 다양한 수준에서 정책을 설정해 테넌트와 네임스페이스를 관리할 수 있어요. 하지만 보존 정책, 저장 할당량 정책 같은 정책은 네임스페이스 수준에서만 사용할 수 있어요. 많은 사용 사례에서 사용자들은 토픽 수준에서 정책을 설정해야 하죠. 이런 토픽 수준 정책을 효율적으로 지원하기 위해 네임스페이스 변경 이벤트(namespace change events) 접근 방식이 제안됐어요. 이 접근 방식에서는 Pulsar를 이벤트 로그로 사용해 네임스페이스 변경 이벤트(예: 토픽 정책 변경)를 저장해요. 네임스페이스 변경 이벤트 접근 방식의 장점은 다음과 같아요:

  • ZooKeeper를 사용하지 않고 ZooKeeper에 더 많은 부하를 주지 않아요.
  • Pulsar를 이벤트 로그로 사용해 정책 캐시를 전파해요. 효율적으로 확장할 수 있죠.

각 네임스페이스에는 __change_events라는 이름의 시스템 토픽이 있어요. 이 시스템 토픽은 해당 네임스페이스의 변경 이벤트를 저장해요. 다음 그림은 시스템 토픽을 활용해 토픽 수준 정책을 갱신하는 방법을 보여줘요.

  1. Pulsar 관리 클라이언트가 Admin RESTful API와 통신해 토픽 수준 정책을 갱신해요.
  2. Admin HTTP 요청을 받은 브로커가 해당 네임스페이스의 시스템 토픽(__change_events)에 토픽 정책 변경 이벤트를 게시해요.
  3. 네임스페이스 번들(bundle)을 보유한 각 브로커가 시스템 토픽(__change_events)을 구독해 해당 네임스페이스의 변경 이벤트를 수신해요.
  4. 각 브로커가 변경 이벤트를 자신의 정책 캐시에 적용해요.
  5. 정책 캐시가 갱신되면 브로커가 Pulsar 관리 클라이언트에 응답을 보내요.

더 알아보기 (Learn more)

  • 보안 개요 — 테넌트별 인증·권한 부여 방식을 어떻게 적용하는지 알아봐요.
  • 보존 및 만료 쿡북 — 네임스페이스 수준에서 설정하는 보존 정책과 메시지 TTL을 다뤄요.
  • 메시징 개념 — 시스템 토픽과 토픽 분류 구조를 이해해요.
  • 네임스페이스 관리pulsar-admin CLI로 네임스페이스를 직접 만들어 보세요.