1/21/2018

OCA(Open Connect Appliance)에서 100Gbps 서비스

본 글은 Netflix Tech 블로그의 내용을 번역한 내용입니다. (관심 있는 부분만…) 원문: https://medium.com/netflix-techblog/serving-100-gbps-from-an-open-connect-appliance-cdb51dda3b99

2015년 여름, Netflix Open Connect CDN팀은 NVM Express(NVMe) 스토리지 기반의 단일 FreeBSD OCA에서 100Gbps 속도로 서비스 할 수 있도록 100GbE 네트워크 인터페이스 기술을 활용하는 프로젝트를 수행하기로 결정 했습니다.

Fake NUMA(Non-uniform Memory)

OCA의 경우 대부분의 콘텐츠는 디스크에서 제공되며 인기있는 타이틀 10–20%만 메모리에서 제공됩니다. 초기의 NVMe 프로토타입은 디스크 대역폭 문제로 인해 제한적이었습니다. 그래서 인기 있는 콘텐츠만 제공하는 형태로 테스트 서버에서 실험을 시작했고 모든 콘텐츠가 메모리에 저장되어 디스크 병목 현상이 발생하지 않았습니다. 의외로 성능은 40Gbps로 제한된 CPU에서 22Gbps로 떨어졌습니다.

pmcstat과 Frame graph를 사용하여 매우 기본적인 프로파일링을 수행했습니다. 수행 결과 lock contention에 문제가 있다는 의심이 들었습니다. 그래서 DTrace기반의 lockstat으로 프로파일링을 수행했습니다. Lockstat의 결과 Inactive page queue에 대한 lock에 CPU waiting time이 많이 소요되는 것을 확인했습니다. 왜 메모리상에서 Serving을 하는데 성능이 더 나빠졌을까요?

Netflix OCA는 비동기 sendfile() 시스템 호출을 통해 Nginx를 사용하여 Large 미디어 파일을 제공합니다.


sendfile() call flow 여기서 문제는 Inactive queue가 NUMA별 단일 목록으로 구성되고 single mutex lock으로 보호된다는 점입니다.


NUMA Netflix가 생각해낸 해결책은 “Fake NUMA”입니다. 시스템에 거짓으로 2개의 CPU마다 하나의 Fake NUMA가 있다고 합니다. 이 작업후에 lock contention이 거의 사라졌으며, 52Gbps로 서비스 할 수 있었습니다. (PCIe Gen3 x8 slot)

Pbufs

FreeBSD는 “buf”구조를 사용하여 디스크 I/O를 관리 합니다. Bufs는 시스템 부팅시 정적으로 할당되며 single mutex로 보호됩니다. Netflix의 문제는 sendfile() 시스템 호출이 VM paging system을 사용하여 메모리에 없을 때 디스크에서 파일을 읽는 것입니다. 결국 모든 디스크 I/O는 pbuf mutex에 제약을 받았습니다.

Global pbuf mutex에 대한 lock contention 문제가 있었고, 이를 해결하기 위해 스왑 파티션이 아닌 파일기반으로 페이징을 처리하는 vnod pager를 수정하여 일반 커널 영역의 확장자를 사용하도록 변경했습니다. 이 변경으로 인해 잠금 경합이 제거되고 성능이 70Gbps로 향상 되었습니다.

Mbuf Page Arrays

FreeBSD의 mbuf는 네트워크 스택의 핵심입니다. 모든 패킷은 하나 이상의 mbuf로 구성됩니다. 대량의 트래픽을 처리하기 위해서 사용하는 sendfile() system call은 mbuf내에 있는 4k page를 wrapping합니다.



여기에서의 단점은 많은 mbuf가 함께 연결된다는 것입니다. sendfile을 통과하는 1MB의 요청은 256개의 VM page를 참조할 수 있으며, 각 VM page는 mbuf로 wrapping되어 연결 됩니다.


전송되는 mbuf의 수를 줄이기 위해 동일한 mbuf에서 동일한 유형의 여러 페이지를 전달 할 수 있도록 mbuf를 확장하기로 결정했습니다. sendfile을 위해 최대 24페이지를 전송 할 수 있는 mbuf를 설계했습니다. 그 결과 7Gbps의 성능이 향상 되었습니다. 위의 작업으로 인해 FreeBSD TCP 스택을 사용하여 90Gbps에서 100% TLS 트래픽을 제공 할 수 있게 되었습니다. 그러나 RACK, BBR과 같은 고급 TCP 알고리즘을 사용할 경우 목표에 미치지 못한다는 사실을 발견했고 TCP 코드 최적화에 대한 작업을 계속 진행중입니다.

Netflix는 참 대단한 회사입니다. 어디까지 성능을 끌어올릴지가 궁금하네요.

1/19/2018

Load Balancer 비교

어플리케이션의 고 가용성을 설정하고 성능을 향상시키는 쉽고 가장 빠른 방법 중 하나는 LB(Load Balancer)를 이용하는 것입니다.

로드밸런서는 세 가지 유형이 있습니다.

하드웨어 로드 밸런서는 부하 분산을 제공하는 전용 장치이고 하드웨어 벤더 중 일부는 다음과 같습니다.

하드웨어 로드 밸런서는 가격이 비싸지만, 좋은 성능을 제공합니다.

클라우드 로드 밸런서는 클라우드의 인기와 더불어 많이 사용되고 있습니다. 클라우드 로드 밸런서를 사용하는 것은 하드웨어 어플라이언스에 투자하지 않고도 관련된 모든 기능을 즐길 수 있는 저렴한 방법 중 하나입니다.

다음은 클라우드 로드 밸런서 중 일부입니다.

  • AWS
  • Google Cloud
  • Cloudflare
  • Incapsula
  • DigitalOcean
  • Azure

월 기준으로 20달러의 가격부터 시작할 수 있습니다. 마지막으로 직접 설치, 관리 및 구성하는 소프트웨어 로드 밸런서가 있습니다.

오픈 소스 로드 밸런서의 목록은 다음과 같습니다.

  • Seesaw
  • LoadMaster by KEMP
  • HAProxy
  • ZEVENET
  • Neutrino
  • Balance
  • Pen
  • Nginx
  • Tradefik
  • Gobetween

Seesaw

구글에서 제작한 Seesaw는 Go 언어로 개발되었으며, 우분투/데비안과 같은 리눅스 배포판에서 잘 동작됩니다.

Anycast, DSR(Direct Server Return)을 지원하며 최소 두 개의 Seesaw 노드가 필요합니다. Baremetal환경과 가상 환경에서 동작합니다.

기본적으로 Seesaw는 Layer 4 network에서 작동하며, Layer 7에서의 균형 조정이 필요한 경우 Option을 이용해서 사용할 수 있습니다.

KEMP

KEMP는 AWS또는 Azure와 같은 클라우드 데이터센터에 배포하여 사용 할 수 있습니다.


무료이지만 상용 수준의 기능을 제공합니다.

  • Round Robin 또는 Least connection 알고리즘을 사용하는 TCP/UDP에 대한 Layer 4 계층의 로드 밸런싱
  • Layer 7 계층의 로드 밸런싱
  • WAF(Web Application Firewall)가 내장되어 있음
  • IPS(Intrusion Prevention Engine)가 내장되어 있음
  • Global 로드 밸런싱, 다중 사이트 지원
  • Caching, 콘텐츠 압축, 콘텐츠 스위칭 지원
  • Web cookie persistence
  • IPSec tunneling

KEMP 로드 밸런서는 Apple, Sony, JP Morgan, Audi, Hyundai 등의 대형 회사에서 사용되고 있습니다. 무료 버전으로도 충분한 기능을 제공하지만, 더 많은 기능이 필요할 경우 상용 라이센스를 구입해야 합니다.

HAProxy

High-availability, Proxy, TCP/HTTP 로드 밸런싱을 지원하는 제품입니다. HAProxy는 아래의 회사에서 사용하고 있습니다.

  • Airbnb
  • Github
  • Imgur
  • MaxCDN
  • Reddit

기능은 다음과 같습니다.

  • Support IPv6 and Unix socket
  • Deflate & Gzip compression
  • Health-check
  • Source-based session stickiness
  • 통계 레포팅 기능이 내장되어 있음

Zevenet

Zevenet은 L3, L4, L7을 지원합니다.


Advanced health-check 모니터링을 지원 하기에 끊김없는 사용자 경험을 제공합니다. Zen으로 알려진 Zevenet은 FTP, SIP, SSL, HTTP등과 같은 TCP기반 프로토콜을 지원합니다.

Neutrino

Neutrino는 Ebay에서 사용하고 있으며, Scala & Netty를 사용하여 개발되었습니다. Least-connection, Round-robin 알고리즘을 지원합니다.

  • Using canonical names
  • Context-based
  • L4 using TCP port numbers

Neutrino는 2 Core VM에서 초당 300개의 요청 처리가 가능합니다. HAProxy와 비교시 Neutrino를 사용할 때의 주요 이점은 L7 스위칭입니다. 항상 그렇듯이 두 가지 방법을 모두 사용하고 환경에 가장 적합한 것을 고려해야 합니다.

Balance

기본적인 로드 밸런싱 기능을 지니고 있습니다.

Pen

Pen은 로드 밸런싱의 기본 기능과 함께 아래 기능을 제공합니다.

  • GeoIP 필터
  • SSL 종료
  • IPv4 및 IPv6 호환성

Nginx

오픈 소스 Nginx는 기본 수준의 콘텐츠 스위칭 및 여러 서버에 대한 라우팅을 지원합니다. Nginx Plus의 경우는 그 이상의 기능을 제공합니다. 로드 밸런싱, 콘텐츠 캐싱, 웹 서버, WAF, 모니터링등을 포함한 All-in-one web application delivery solution을 제공합니다. 초당 수백만 건의 요청을 처리 할 수 있는 확장형 어플리케이션을 위한 고성능 로드 밸런서 솔루션도 제공 합니다.

Traefik

HTTP reserve proxy와 로드 밸런서를 제공합니다. 또한 여러 백엔드 서비스를 지원합니다. (Amazon ECS, Docker, Kubernetes, Rancher.,)


Web socket, HTTP/2, 자동 SSL 인증서 갱신, 암호 관리, 리소스 관리 및 모니터링을 위한 Interface를 제공합니다.

Gobetween

Lightweight하지만 강력한 고성능 L4 TCP, TLS 및 UDP 기반의 로드 밸런서 입니다.


Windows, Linux, Docker, Darwin과 같은 멀티 플랫폼에서 동작합니다. 로드 밸런싱은 구성에서 설정해야 합니다. 아래의 알고리즘 기반으로 수행됩니다.

  • IP 해시
  • Round-robin
  • The Least bandwidth
  • Least connection
  • Weight

아래의 벤치마크 정보를 기준으로 Gobetween은 HAProxy보다 빠르지만 Nginx보다는 느립니다.


동적 환경을 위한 자동 검색 기능을 탑재한 최신 L4 로드 밸런서를 찾고 있다면 Gobetween이 유망할 것으로 보여집니다.

위의 정보를 기준으로 각 상황에 맞는 로드 밸런서를 선택하시길 바랍니다.

1/18/2018

Kubernetes vs. Mesos: 어느 Container Orchestrator를 사용해야 할까? (사업 관점)

다른 용도로 사용되는 10개의 컨테이너가 있다고 가정한다면, 많은 인스턴스를 사용하고 이러한 컨테이너를 실행하는 것은 매우 쉽습니다.

어플리케이션이 커지면서 배포한 컨테이너 수가 점점 증가하면 서로 다른 버전, 네트워크 구성을 가진 수천 개의 컨테이너를 관리할 때는 상황이 애매해집니다.

컨테이너에 의존하는 개발 기술을 사용하는 회사의 경우, 이러한 유형의 아키텍처를 확장하는 문제가 발생합니다. 오케스트레이션 인프라 스트럭처의 요점은 컨테이너를 “스케줄링”하는 간단한 방법을 제공하고 기본 인프라가 나머지를 수행하도록 하는 것입니다. 이것이 오케트스레이션의 핵심입니다.

Kubernetes, Mesos, ECS, Swarm 그리고 Nomad와 같이 5개의 툴이 존재합니다. 이 도구중 어떤 도구를 사용할지에 대한 결정은 회사 및 개인적 취향에 따라 달라집니다. Logz.io 의 경우 두개의 플랫폼으로 추렸다고 합니다.

  • Swarm: 테스트에는 적합하지만, 상용에서 사용하기에는 부적합하다고 판단
  • Amazon ECS: 클라우드에 무관심한 도구를 원했기에 ECS는 부적합하다고 판단
  • Nomad: 아직 사용하기에는 성숙하지 않다고 판단, 시간이 지나면 괜찮을지도…

위 이유로 Kubernetes와 Mesos를 선정했다고 합니다. Mesos는 Apache 프로젝트로 컨테이너/비컨테이너 방식을 관리할 수 있습니다.

처음에는 Berkeley 연구 프로젝트로 사용되었고 향후 Twitter에서 사용하고 있습니다. Marathon 플러그인을 제공하여 컨테이너를 쉽게 관리할 수 있는 방법을 제공합니다.

2016년에 Mesosphere가 지원하는 오픈 소스 프로젝트인 DC/OS가 도입되었고, Mesos를 더욱 단순화 하였습니다. Kubernetes는 2014년에 Google에서 출시한 플랫폼이며 Cloud Native Computing Foundation에 기여했습니다.

API에 대한 Marathon의 접근 방식은 Kubernetes와 비교하면 간단합니다. Marathon은 Kubernetes에 비해 적은 API 리소스를 제공합니다. 두 플랫폼이 누리는 인기도에도 명백한 차이가 존재합니다.


위의 그림은 Kubernetes와 Mesos의 commit, contribute를 보여주고 있습니다. 압도적으로 Kubernetes의 커뮤니티 규모가 큽니다.

Logz.io에서는 처음에는 DC/OS(Mesos)를 선택했었고, Kubernetes의 강점 중 일부를 포기할 준비를 했다고 합니다. 하지만 배포 프로세스를 자동화하는데 필요한 간단한 기능이 엔터프라이즈 버전에만 포함되어 있다는 사실을 알았다고 합니다.

Mesosphere에 문의 했었고, 이런 상황이 일시적인 것이 아닐 수 있다는 것을 깨달았다고 합니다.

DC/OS는 이 특수한 상황을 극복해도 결국 상업 회사에 통제되기에 Kubernetes로 작업을 시작했다고 합니다.

그후 Kubernetes기반으로 작업을 완료 했고, 이 변경으로 인해 새로운 코드를 하루에 여러번 배포하는 개발자들에게 모든 책임을 위임할 수 있었고, 보다 효율적이고 지속적인 배포가 가능했다고 합니다. 다음 포스팅에는 Kubernetes와 Mesos의 기술적 비교를 다룰 예정입니다.

References:

  • https://dzone.com/articles/kubernetes-vs-mesos-choosing-a-container-orchestra
  • https://platform9.com/blog/kubernetes-vs-mesos-marathon/



1/16/2018

CMAF (Common Media Application Format)

CMAF는 비디오 스트림을 여러 장치에서 저렴하고 쉽게 전달할 수 있도록 Microsoft 및 Apple에서 MPEG 형식으로 정의한 표준화 된 새로운 미디어 스트리밍 형식입니다.

오늘날 거의 모든 스트리밍 비디오가 표준화 된 인코딩 기술을 사용하여 압축되지만 “비디오의 경우 H.264 또는 H.265(HEVC)이고 오디오의 경우 AAC로 압축하고 있습니다.” Container는 이러한 파일에 Timing 정보를 추가하고 기타 meta data를 추가할 수 있습니다. 그리고 이러한 Container는 표준화 되지 않았습니다.

Apple의 HTTP Live Streaming(HLS) 프로토콜은 데이터를 MPEG-2 TS로 래핑하거나 캡슐화합니다. MPEG-DASH는 MPEG-4 Container(ISOBMFF)를 사용합니다.

결국, 재생할 실제 미디어는 동일한 포맷으로 되어 있지만 이런 캡슐화 포맷을 사용하면 다른 포맷을 만들어야 합니다.

OTT 서비스 제공 업체들은 비디오를 스트리밍 하기전에 이 작업을 수행해야 합니다. 그리고 이런 작업을 통해 생성된 파일을 저장해야 합니다. 즉, 사용자에게 HLS, DASH 서비스를 제공하기 위해 추가 비용이 발생하며, 이런 시스템을 구축하고 운영하는데 있어서 복잡성이 증가합니다.


CMAF는 표준화된 Container 또는 캡슐화 형식을 만들어 이 문제를 해결합니다.


기존에는 위의 그림 처럼 Encryption/Container가 나눠져 있었습니다. HLS, MPEG-DASH를 제공하기 위해서는 물리 파일이 2벌이 필요했습니다. CMAF를 통해 아래의 그림처럼 협의 되었습니다.



Container는 CMAF로 통일 되었지만, 아직 Encryption 부분이 남아 있습니다. HLS의 경우 Encryption 알고리즘으로 AES-CBC를 채택하고 있고, MPEG-DASH의 경우 AES-CTR을 채택하고 있습니다. 이 부분이 2016년까지는 풀리지 않고 있었습니다. IBC 2017(http://www,unified-streaming.com/blog/looking-back-hot-topics-ibc-2017)에서 이 부분에 대해서 논의가 있었고, 내용은 아래와 같습니다.

  • CMAF가 발표되었을 때, 통합 미디어 형식을 제공하겠다는 약속이 두 가지의 양립 불가능한 암호화 모드(AES-CTR, AES-CBC) 때문에 회의적이었음
  • Apple은 CBC모드를 사용하고 Google, Microsoft는 CTR모드를 사용하기에 암호화 콘텐츠를 주요 DRM 시스템에서 다루기 위해서는 두 번 암호화해야 하는 필요가 있었음
  • Google이 Widevine에 CBC 지원을 발표했고, Microsoft도 PlayReady 4.0으로 자사 제품에 CBC 지원을 통합함으로써 CMAF에서는 암호화된 미디어도 통일된 형식의 콘텐츠 제공이 가능

위의 논의 이후에 Microsoft가 2018년까지 CBC를 적용하겠다는 공지를 합니다. (https://www.microsoft.com/playready/newsroom/), 해당 링크의 PlayReady 4.0 supports CMAF interoperable format with AES-CBC and AES-CTR encryption 확인 하지만, 현실에 반영되기까지는 약간의 시간이 필요해보이네요. 그래도 미디어 사업자들의 오랜 염원이었던 부분이 스펙상으로는 해소된 느낌입니다.




11/02/2017

Jmeter vs. Locust 무엇을 써야 할까?

본 글은 Apache Jmeter와 Locust에 대해서 비교한 글입니다.

Apache Jmeter와 Locust는 현재 개발자 사이에서 가장 많이 알려진 인기있는 성능 테스트 도구입니다.

Jmeter와 Locust 소개

Jmeter는 가장 먼저 출시된 성능 테스트 프레임워크중에 하나입니다. 순수 자바로 작성되었습니다. Jmeter는 Web 및 FTP 관련 어플리케이션의 부하 테스트를 수행할 목적으로 제작되었습니다.

그러나 현재에는 거의 모든 어플리케이션과 프로토콜을 테스트할 수 있기에 다양한 OS 플랫폼위에서 동작되는 어플리케이션을 테스트 할 수 있습니다.

Locust는 Python으로 작성된 성능 테스트 프레임워크입니다. 가장 큰 특징은 Python으로 성능 스크립트를 작성할 수 있다는 점입니다.

코드로 작성하여 테스트하는 기능외에도 Event 기반 구현 확장성이 뛰어나기에 Jmeter에 비해 빠르게 성장하는 커뮤니티를 보유하고 있습니다.

오픈소스 라이선스

Jmeter는 Apache에 의해 개발되었고 Apache License 2.0을 기반으로 하며, Locust는 커뮤니티 주도 개발로 이루어졌고 MID 라이센스를 기반으로 합니다.

두 가지 모두 오픈 소스이기에 사용상의 제약없이 자유롭게 사용할 수 있습니다.

로드 테스트 생성 및 유지 관리

성능 테스트를 하기 위한 단계는 생성, 실행, 분석이 존재합니다. 첫번째 단계가 가장 많은 시간을 소모하기에 이 부분에 대해서 비교를 하고자 합니다.

Jmeter에서 성능 테스트를 작성하는 가장 일반적인 방법은 GUI모드를 사용하는 것입니다. Jmeter GUI 모드는 한줄의 코드 작성없이 쉽게 테스트를 작성할 수 있는 Desktop Client를 제공합니다.


Jmeter는 직관적이고 경험이 없는 엔지니어 일지라도 큰 문제없이 기본적인 시나리오를 작성할 수 있도록 되어 있습니다. 그리고 비 GUI 모드에서 Java를 사용하여 코드를 작성할 수 있습니다.

하지만 Jmeter에서는 스크립트 구현의 복잡성(Jmeter가 GUI모드를 쓰도록 설계 되었기 때문에)과 스크립트 작성 방법에 대한 문서가 부족하기에 이 방법을 널리 사용하지는 않습니다.

반면, Locust는 모두 코딩으로 해결 해야 합니다. 성능 테스트 작성에 익숙해지기 위해서는 기본적인 Python 코딩 경험이 있어야 합니다.


Locust에서 작성된 스크립트는 명확해보이지만 거대하고 복잡한 테스트를 수행할 경우, 스크립트 작성 및 검토가 복잡할 수도 있습니다.

하지만, 코드로 모든 테스트를 수행하는 것은 큰 이점입니다. UI가 없어도 테스트를 쉽게 수정할 수 있기 때문입니다.

그리고 작성한 스크립트를 Git을 이용하여 공유하고 변경 사항을 관리하고 함께 작업할 수 있습니다.

테스트 스크립트를 유지 보수를 해야 한다면 코드 기반이 훨씬 더 빠르고 편리하다고 볼 수 있습니다.

지원 프로토콜

테스트에서 가장 이상적인 부분은 “가장 적은 테스트 툴을 사용하여 모든 것을 테스트 할 수 있어야 한다.”입니다.

서로 다른 프로토콜 테스트를 위해 다른 툴을 사용해야 한다면, 여기에 들어가는 시간과 관련 툴에 해박한 엔지니어 소싱등등의 문제가 나올 것 입니다.

JMeter에서는 기본 제공 함수 및 다른 플러그인을 모두 사용하여 한 곳에서 모든 것에 대한 성능 테스트 제작이 가능합니다.

Locust는 HTTP Web 기반 테스트를 위해 제작되었습니다. 그러나 기본 기능을 확장하고 Python을 사용하여 테스트할 수 있는 모든 것을 만들 수 가 있습니다.

즉, 원하는 모든 것을 테스트 할 수 있지만, 필요시 Custom 스크립트와 프로그래밍 경험이 있어야 합니다.

동시 사용자 수

성능 테스트 툴은 테스트 목표를 달성하기 위해 필요한 만큼의 Request를 실행할 수 있어야 합니다.

특정 상황에서는 수천 또는 수백만명의 사용자를 시뮬레이션해야 합니다.

각 도구가 실행할 수 있는 동시 사용자 수는 대부분 리소스를 기반으로 합니다. JMeter와 Locust는 리소스를 다루는 방법이 다릅니다.

JMeter는 각 사용자에 대해 별도의 Thread를 할당하는 Thread 기반 모델을 가지고 있습니다.

이러한 단계별 Thread 할당 방식은 할당될때마다 리소스를 필요로 하기에 JMeter는 한 대의 Worker에서 시뮬레이션 할 수 있는 사용자 수가 매우 제한적입니다.

일반적으로 스크립트가 단순하다면 하나의 Worker에서 Max 1,000개까지 Thread를 생성 할 수 있습니다.

Locust는 이벤트 및 비동기 접근 방식을 기반으로 합니다. Gevent 구현을 통해 Locust 프레임워크는 단일 시스템에서 수천 명의 동시 사용자를 시뮬레이션 할 수 있습니다.

아래는 JMeter와 Locust를 사용하여 50명의 사용자에 대해 동일한 테스트를 실행하여 리소스 사용량을 비교한 그림입니다.



동일한 시나리오에서 GUI 모드로 실행되는 JMeter는 Locust보다 30배 더 많은 메모리를 사용하고 있습니다.

Ramp-up에 대한 유연성

Flexible Ramp-up 기능은 어플리케이션의 사용 사례를 시뮬레이션 하는데에 매우 중요합니다.

예를 들어서, 테스트 중에 Spike-load를 작성하여 점진적 로드이외에 예기치 않은 Spike를 처리하는 방법을 확인할 수 있습니다.

JMeter와 Locust는 로드를 생성하는데 동일한 방법을 제공합니다. 성능 테스트 중에 사용할 사용자 수를 지정하고 이들이 얼마나 빨리 요청해야 하는지를 지정 할 수 있습니다.

JMeter에서는 지정된 필드의 “Thread Group” 컨트롤러에서 로드를 구성할 수 있습니다.


JMeter에서는 유연한 로드 구성을 위한 플러그인을 제공합니다. (Ultimate Thread Group)


이 부분이 JMeter가 지닌 장점중에 하나 입니다.


Script Recording

스크립트 레코딩은 기본적인 테스트 템플릿을 만드는 효율적인 방법입니다. JMeter에는 스크립트 레코딩 기능이 내장되어 있고, 브라우저내에서 스크립트를 레코딩할 수 있는 확장 플러그인도 제공합니다.

Locust는 이 기능이 존재하지 않습니다.

부하 테스트 모니터링

JMeter와 Locust는 모두 성능 테스트를 모니터링하고 결과를 분석 할 수 있는 내장 기능을 제공합니다.

JMeter에는 많은 내장 Listener가 존재하며 Custom Listener를 확장 할 수 있습니다. 다만 JMeter Listener는 많인 리소스를 요구합니다.

Locust는 기본 부하를 모니터링하는 유용한 모든 정보를 제공합니다. 스크립트를 수행하는 동안 Locust는 모든 모니터링 결과를 볼 수 있는 간단한 웹서버를 실행합니다.

JMeter와 비교하여 Locust 모니터링은 많은 리소스를 요구하지 않습니다.

결론, 둘 중 어느 도구가 효과적인지 정리하기가 쉽지 않습니다.

Python을 좋아하고 GUI보다 코드로써 작성하기 원하면 Locust로 진행하면 되고, 그렇지 않으면 JMeter가 더 나은 선택일 수 있습니다.

Locust는 기존 성능 도구의 특정 문제를 해결하기 위해 만들어졌습니다. Locust와 Python 코드 조합은 GUI 없이 유지 보수에 최소한의 시간을 할애하고 매우 느린 시스템에서도 수천 명의 테스트 사용자를 시뮬레이션 할 수 있습니다. JMeter는Python을 잘 모르거나 GUI를 선호할 경우에 너 다은 선택지가 될 것입니다.

어떤 툴이 적합할까요?

참조: https://dzone.com/articles/jmeter-vs-locust-what-to-use-when