개발실

NATS 성능 테스트.

copycd 2020. 1. 12. 17:01
반응형
  • https://nats.io/  에서 서버프로그램 다운받고, 테스트에 사용한 소스도 다운받음.
  • 서버는 그냥 프로그램받아 실행 하고, publisher 샘플은 c#으로된것 컴파일해서 실행함.
  • 2020년 01월 12일자 사이트 소스임.
  • 노트북은 최신 인텔 i7 이긴한데, cpu 클럭을 2.2로 제한하여 사용하고 있음 ( boost 꺼서 )

 

아래 테스트는 동일한 노트북에, 서버를 실행시키고

publisher 와 subscriber 를 실행시켜놓은 상태에서 수행됨.

 

과연 성능이 얼마나 나오는지 확인해 보기 위해서 간략하게 수행한 결과를 캡쳐함.

 

publisher의 샘플은 아래와 같다.

사이트에서 샘플을 받으면 아래와 같이 코딩이 되어 있다.

아래 캡쳐에 1000번, 10000번....   씩 천만번까지 늘려가면 수행한 결과가 있다.

         using (IConnection c = new ConnectionFactory().CreateConnection(opts))
         {
            sw = Stopwatch.StartNew();

            for (int i = 0; i < count; i++)
            {
               c.Publish(subject, payload);
            }
            c.Flush();

            sw.Stop();

            Console.Write("Published {0} msgs in {1} seconds ", count, sw.Elapsed.TotalSeconds);
            Console.WriteLine("({0} msgs/second).",
                (int)(count / sw.Elapsed.TotalSeconds));
            printStats(c);
         }

 

 

매번 접속했을때 어느정도 성능이 나오는지 확인해 보고 싶어서, 아래와 같이 코드를 변경했다.

// 아래와 같이 1번 수행할때마다, 접속을 새로이 할경우 급격히 느려진다.
// 역시, 접속에 가장 많은 부하가 걸리는걸 알 수 있다.
// 아래 캡쳐 그림에 수행 결과가 나와 있다.
// 마지막 2건을 제외하고, 10건, 100건, 1000건 수행한 내용임.

sw = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
  using (IConnection c = new ConnectionFactory().CreateConnection(opts))
  {
    c.Publish(subject, payload);
    c.Flush();
  }
}

sw.Stop();

Console.Write("Published {0} msgs in {1} seconds ", count, sw.Elapsed.TotalSeconds);
Console.WriteLine("({0} msgs/second).",
 (int)(count / sw.Elapsed.TotalSeconds));

 

// 아래와 같이 접속만 할경우에는 시간이 조금 줄어드는걸 볼 수 있다.

// 1000건 수행했을때, 1.55초가 소요되었다.

// 아래 캡쳐 그림의 마지막 2건.

  using (IConnection c = new ConnectionFactory().CreateConnection(opts)) 
  { 
  } 

 

** 참고로, NetMQ는 tcp로 매번 접속을 새로 했을때 현재 동일한 노트북에서 초당 3000~4000건정도의 성능이 나왔음.

    확실히, middle ware( 서버) 를 거치지 않고 하니 빠른것 같음.

 

 

반응형