Skip to content

stove-smooth/godfka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Origin : https://github.com/ruthetum/study/tree/main/kafka

HTTP vs MQ

Overview

  • 지난 인턴십에서 진행했던 프로젝트에서 마이크로서비스 간 요청을 MQ를 이용하여 처리하지 못 했다.
  • 변명이라면 변명이지만 MSA 및 Spring Cloud에 대한 개념이 조금도 없는 상황에서 진행했던 프로젝트였고, 기본적인 구조 이해 및 설계에 정신이 없었다.
  • 추가적으로 WebRTC를 바탕으로 한 시그널링 서버+미디어 서버 구축 부분에 공부 및 구현을 신경쓰다보니 MQ를 공부하고 서비스간 요청에 대해 효율적으로 처리하기보다는 Feign Client를 이용한 단순하게 API 처리를 하게 되었다.
  • 당시 적용하지 못 했던 부분을 이번 실험을 통해 공부하고 적용해보면서 성능을 비교할 계획이다.

Subject

상황

  • 실험은 간단하게 2가지 상황을 비교할 계획이다.

  • 첫 번째 상황은 단순하게 두 개의 서비스에 각각 HTTP 요청을 보내는 상황이고,

    image

  • 두 번째 상황은 kafka에 topic을 publish하고, 해당 토픽을 각 서비스에 subscribe하여 처리하는 상황이다.

    image

  • 이후 각 상황에 대해서 nGrinder를 이용하여 성능을 비교할 계획이다.


Experiment

환경

  • Service

    • 모두 Local 환경에서 동작
    • source
      • HTTP 요청
      • Producer(publish)
      • port : 8080 실행
    • target
      • HTTP 응답
      • Consumer(subscribe)
      • port : 8081 / 8082 실행
  • Kafka

    • AWS EC2 t2.micro(CPU 1, 메모리 1GiB)
    • heap size 옵션 : KAFKA_HEAP_OPTS="-Xmx400m -Xms400m"
  • Test tool

    • nGrinder

준비

  • EC2에 Zookeeper, Kafka 설치 및 실행

    image

  • source, target application 작성

결과

vusers : 10, run count : 5000

HTTP image

Kafka image

구분 TPS Peak TPS Mean Test Time Run Time
HTTP 539.3 753 13.65 00:01:38
Kafka 1233.8 1905 4.78 00:00:47

vusers : 10, run count : 10000

HTTP image

Kafka image

구분 TPS Peak TPS Mean Test Time Run Time
HTTP 530.3 712 13.82 00:03:17
Kakfa 1496.9 2086 4.45 00:01:13

Conclusion

  • 기본 설정으로 단순 비교해봤을 때 kafka를 활용해서 처리하는 경우가 앞도적으로 성능이 좋다.
  • 역시 대용량 서비스에서 서비스간 요청 혹은 파이프라인 처리 시에는 kafka와 같은 MQ를 사용해서 효율적으로 처리하자.

Reference

Releases

No releases published

Packages

No packages published

Languages