시뮬레이션 도구

시뮬레이션 도구 (Simulation Tools)

부하 분산기가 실제 부하를 어떻게 처리하는지 관찰하려면 테스트 환경을 만들고 인공적인 부하를 발생시켜야 할 때가 있어요. 시뮬레이션 클라이언트, 시뮬레이션 컨트롤러, 브로커 모니터는 이런 부하를 만들고 관리자에게 미치는 영향을 더 쉽게 관찰하기 위한 도구들이에요. 이 글에서는 각 도구의 역할과 사용 방법을 정리해 드릴게요.

출처: 문서

본문

테스트 환경을 만들고 인공 부하를 발생시켜 부하 관리자가 부하를 얼마나 잘 처리하는지 관찰해야 할 때가 있어요. 부하 시뮬레이션 컨트롤러, 부하 시뮬레이션 클라이언트, 브로커 모니터는 이 부하를 만들고 관리자에게 미치는 효과를 더 쉽게 관찰하기 위한 노력으로 만들어졌어요.

시뮬레이션 클라이언트

시뮬레이션 클라이언트는 구성 가능한 메시지 속도와 크기로 토픽을 만들고 구독하는 머신이에요. 큰 부하를 시뮬레이션하려면 여러 클라이언트 머신을 사용해야 할 때가 있으므로, 사용자는 시뮬레이션 클라이언트와 직접 상호 작용하지 않고 요청을 시뮬레이션 컨트롤러에 위임하고, 컨트롤러가 클라이언트에 신호를 보내 부하를 시작하게 해요. 클라이언트 구현은 org.apache.pulsar.testclient.LoadSimulationClient 클래스에 있어요.

사용법

시뮬레이션 클라이언트를 시작하려면 pulsar-perf 스크립트에서 simulation-client 명령을 다음과 같이 사용해요:

pulsar-perf simulation-client --port <listen port> --service-url <pulsar service url>

그러면 클라이언트가 컨트롤러 명령을 받을 준비가 돼요.

시뮬레이션 컨트롤러

시뮬레이션 컨트롤러는 시뮬레이션 클라이언트에 신호를 보내 새 토픽을 만들고, 이전 토픽을 중단하고, 토픽이 발생시키는 부하를 변경하는 등 여러 작업을 요청해요. 그것은 org.apache.pulsar.testclient.LoadSimulationController 클래스에 구현되어 있고, 명령을 보내는 인터페이스로 사용자에게 셸을 제공해요.

사용법

시뮬레이션 컨트롤러를 시작하려면 pulsar-perf 스크립트에서 simulation-controller 명령을 다음과 같이 사용해요:

pulsar-perf simulation-controller --cluster <cluster to simulate on> --client-port <listen port for clients>
--clients <comma-separated list of client host names>

클라이언트는 컨트롤러를 시작하기 전에 이미 시작되어 있어야 해요. 그러면 시뮬레이션 클라이언트에 명령을 내릴 수 있는 간단한 프롬프트가 표시돼요. 인수는 종종 테넌트 이름, 네임스페이스 이름, 토픽 이름을 참조해요. 모든 경우에 테넌트, 네임스페이스, 토픽의 베이스 이름이 사용돼요. 예를 들어 토픽 persistent://my_tenant/my_cluster/my_namespace/my_topic의 경우 테넌트 이름은 my_tenant, 네임스페이스 이름은 my_namespace, 토픽 이름은 my_topic이에요. 컨트롤러는 다음 작업을 수행할 수 있어요:

  • 프로듀서와 소비자로 토픽 만들기
    • trade <tenant> <namespace> <topic> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--size <message size in bytes>]
  • 프로듀서와 소비자로 토픽 그룹 만들기
    • trade_group <tenant> <group> <num_namespaces> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--separation <separation between creating topics in ms>] [--size <message size in bytes>] [--topics-per-namespace <number of topics to create per namespace>]
  • 기존 토픽의 구성 변경
    • change <tenant> <namespace> <topic> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--size <message size in bytes>]
  • 토픽 그룹의 구성 변경
    • change_group <tenant> <group> [--rate <message rate per second>] [--rand-rate <lower bound>,<upper bound>] [--size <message size in bytes>] [--topics-per-namespace <number of topics to create per namespace>]
  • 이전에 만든 토픽 중단
    • stop <tenant> <namespace> <topic>
  • 이전에 만든 토픽 그룹 중단
    • stop_group <tenant> <group>
  • 한 ZooKeeper에서 다른 ZooKeeper로 이력 데이터를 복사하고 그 이력의 메시지 속도와 크기에 따라 시뮬레이션
    • copy <tenant> <source zookeeper> <target zookeeper> [--rate-multiplier value]
  • 현재 ZooKeeper에서 이력 데이터의 부하 시뮬레이션 (시뮬레이션 중인 것과 같은 ZooKeeper여야 함)
    • simulate <tenant> <zookeeper> [--rate-multiplier value]
  • 주어진 활성 ZooKeeper에서 최신 데이터를 스트리밍해 그 ZooKeeper의 실시간 부하 시뮬레이션
    • stream <tenant> <zookeeper> [--rate-multiplier value]

이 명령들의 "group" 인수는 사용자가 한 번에 여러 토픽을 만들거나 영향받게 해줘요. 그룹은 trade_group 명령을 호출할 때 생성되며, 이 그룹의 모든 토픽은 이후 change_groupstop_group 명령으로 각각 수정하거나 중단할 수 있어요. 모든 ZooKeeper 인수는 zookeeper_host:port 형식이에요.

Copy, Simulate, Stream의 차이

copy, simulate, stream 명령은 매우 비슷하지만 중요한 차이가 있어요. copy는 정적 외부 ZooKeeper의 부하를 시뮬레이션 중인 ZooKeeper에서 시뮬레이션하고 싶을 때 사용돼요. 따라서 source zookeeper는 복사하려는 ZooKeeper여야 하고, target zookeeper는 시뮬레이션 중인 ZooKeeper여야 해요. 그러면 두 부하 관리자 구현 모두에서 소스의 이력 데이터를 완전히 활용할 수 있어요. 반면 simulate는 시뮬레이션 중인 ZooKeeper 하나만 받아요. SimpleLoadManagerImpl에 대한 이력 데이터가 있는 ZooKeeper에서 시뮬레이션하고 있다고 가정하고, ModularLoadManagerImpl에 대한 동등한 이력 데이터를 만들어요. 그런 다음 클라이언트가 이력 데이터에 따른 부하를 시뮬레이션해요. 마지막으로 stream은 시뮬레이션 중인 ZooKeeper와 다른 활성 ZooKeeper를 받아 그로부터 부하 데이터를 스트리밍하고 실시간 부하를 시뮬레이션해요. 모든 경우에서 선택적인 rate-multiplier 인수로 사용자가 부하의 일정 비율을 시뮬레이션할 수 있어요. 예를 들어 --rate-multiplier 0.05를 사용하면 시뮬레이션되는 부하 속도의 5%로만 메시지가 전송돼요.

브로커 모니터

이 시뮬레이션에서 부하 관리자의 동작을 관찰하려면 org.apache.pulsar.testclient.BrokerMonitor에 구현된 브로커 모니터를 사용할 수 있어요. 브로커 모니터는 watchers로 갱신될 때 표 형식의 부하 데이터를 콘솔에 출력해요.

사용법

브로커 모니터를 시작하려면 pulsar-perf 스크립트에서 monitor-brokers 명령을 사용해요:

pulsar-perf monitor-brokers --connect-string <zookeeper host:port>

그러면 중단될 때까지 콘솔이 부하 데이터를 계속 출력해요.

더 알아보기 (Learn more)