2022년 5월 25일 수요일

MSK vs SQS

애플리케이션들을 AWS 클라우드로 이관하고 Pub/Sub 체계를 구축하는데 있어서 우리는 이미 온프레미스 환경에서 Kafka를 사용한 경험이 있었기에 AWS에서 SaaS형태로 제공하는 MSK와 SQS를 놓고 검토를 하게 되었는데 두 솔루션의 장단점이 명확하므로 여기에 정리를 해본다.

Amazon MSK (Managed Streaming for Apache Kafka)

  • AWS에서 제공하는 완전 관리형 Apache Kafka 서비스
  • 기존에 On-Promise에서 사용하던 혹은 EC2로 관리하던 Apache Kafka를 SaaS형태로 사용할 수 있음
  • Apache Kafka의 특정 버젼을 그대로 사용할 수 있기 때문에 Vanila Apache Kafka의 버젼별 Api spec을 따라서 사용 가능
  • MSK 모니터링 제공
  • Apache Kafka의 특징을 그대로 활용
    • 같은 partition 내에서만 순서 보장이 됨. → partition이 다르면 순서를 보장하지 못한다는 의미.
    • Pub/Sub 아키텍처 구축에 많이 사용되어 레퍼런스 자료가 풍부.
    • 컨슈머 그룹을 분리하여 운영한다면 같은 메시지를 서로 다른 컨슈머에서 각각 수신하여 사용할 수 있다.
  • 장점
    • 아키텍처 구성이 간편하고 구축 시간을 줄일 수 있음.
    • AWS에서 관리툴 제공하므로 모니터링이 용이할 듯함.
    • 자동복구 및 패치 기능이 있어 애플리케이션 지속성 향상, 안정적임.
  • 단점
    • 쓰는 만큼 비용이 나가고 그 비용이 다소 비쌈, 강제로 VPC/AZ에 broker 들이 할당되어서 제약사항이 많음.
    • 로컬 개발환경에서 MSK 접속이 안됨.

Amazon SQS (Simple Queue Service)

  • 지속적이고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리
  • 이미 만들어지고 운영 중인 AWS 서비스에서 Queue 채널만 추가 생성하는 개념으로 이해
  • 일반적인 Queue는 순서 보장을 하지 않으며, FIFO Queue는 순서 보장이 됨.
    • 단 FIFO Queue는 초당 3,000개 메시지까지만 처리 가능
  • 256KB 용량 제한
    • 256KB를 초과하는 메시지는 S3에 업로드하는 방식으로 우회하여 처리하는 방법이 있고, AWS에서도 해당 기능을 가진 라이브러리를 제공 중
    • https://github.com/awslabs/amazon-sqs-java-extended-client-lib
  • 장점
    • 관리와 사용이 매우 쉽고 간편 단점 256KB의 용량 제한, 초당 처리량 제한 등의 성능 이슈
    • 기능이 Kafka만큼 High Level로 제공되지 않음
    • 하나의 메시지를 여러 개의 컨슈머가 동시에 수신할 수 없음

Note: With Amazon SQS, multiple consumers can’t receive the same message simultaneously. A message can only be received from a queue by one consumer that’s ready to process and then delete the message received. A message can be retained in queues for 14 days maximum.

댓글 없음:

댓글 쓰기

Kotlin, SpringBoot 3, GraalVM 환경에서 Native Image로 컴파일하여 애플리케이션 실행

Spring Boot 3부터, GraalVM Native Image를 공식 지원하여 애플리케이션의 시작 속도와 메모리 사용량을 크게 줄일 수 있다. Native Image란 기존의 JVM 기반 위에서 돌아가는 Java 애플리케이션과는 달리 JVM 없이...