Zero To One
2) 마이크로서비스 정리 본문
1. 메세지 서비스로 Apache Kafka와 Amazon SQS, Amazon Kinesis가 있다. 각각은 어떤 차이점이 있을까?
Amazon SQS
- 서비스형
- 소비자가 큐에서 데이터를 땡겨오는 방식 (pull)
- 데이터는 소비되고 나서 삭제됨
- 많은 소비자를 붙일 수 있음
- 처리량에 대한 프로비저닝 불필요
- FIFO(first in first out, 선입선출)큐를 이용하면 순서를 보장함
- 개별 메시지에 대한 지연 전송 가능
Amazon Kinesis
- 서비스형
- Pull방식 및 Push 방식 둘다 사용가능 (push : 메시징 시스템이 소비자에게 메시지를 전달)
- 스트림 데이터와 같은 빅데이터를 다루는데 더욱 유리
- 데이터 소비 행위 자체를 replay할 수 있음(이벤트 스트림 재생)
- 데이터를 바로 삭제하지 않고 며칠 후에 만료되도록 설정할 수 있음
- 처리량에 대한 프로비저닝 필요
Apache Kafka
- 설치형
- Pull방식 (높은 처리량과 낮은 지연시간)
- 스트림 데이터와 같은 빅데이터를 다루는 데 더욱 유리
- 데이터 소비 행위 자체를 replay할 수 있음 (이벤트 스트림 재생)
- 데이터를 바로 삭제하지 않고 며칠 후에 만료되도록 설정할 수 있음
언제 무엇을 사용하면 되는가?
- 메시지 큐를 간단하게 사용하려면 SQS
- 스트림 데이터를 다루거나, 빅데이터를 다룰 때, 혹은 로그 저장소로써 메시지 브로커를 사용하려면 Kafka
- (현업에서 가장 많이 사용함)
- 돈 걱정을 안해도 된다면 Kinesis
2. 웹 서비스에서 메시지 브로커(메시지 큐)를 이용해 비동기적인 방법이 활용되는 사례와 어떻게 활용이 되는가?
- 두가지 패턴의 프로세스 간 통신(IPC)
- 동기 커뮤니케이션 (애플리케이션 -> 애플리케이션)
- 비동기 커뮤니케이션 (이벤트기반), (애플리케이션 -> 큐 -> 애플리케이션)
- 느슨한 결합(loose coupling)이 주는 장점
- 프로세스 간의 의존성을 줄일 수 있음
- 시스템을 유지보수하기 쉽게 만듦
- 시스템의 유연성이 증가됨
- 보다 쉽게 서비스를 테스트할 수 있음
- 일부 시스템의 실패가 전체 시스템의 실패로 이어지지 않음
- 프로그래밍 세계에서는 항상 느슨한 결합이 주된 관심사
- UI (frontend) : 컴포넌트화
- 객체 지향 프로그래밍(backend) : 의존성 주입 (Dependency Injection)
- 마이크로서비스 : 메시징 시스템을 이용한 비동기 커뮤니케이션
- 항상 REST API를 사용하면 중간에 메세지가 소실되면 컨슈머에게 도달할 수 없기 때문에 느슨한 결합이 중요하다.
- Queue의 사례
- 프린터
- 일반적으로 프린터는 속도가 느림
- CPU는 프린터와 비교하여, 데이터를 처리하는 속도가 빠름
- 따라서, CPU는 빠른 속도로 인쇄에 필요한 데이터를 만든 다음 인쇄 작업 Queue에 저장하고 다른 작업을 수행함
- 프린터는 인쇄 작업 Queue에서 데이터를 받아 일정한 속도로 인쇄
- 컴퓨터 장치 사이
- 컴퓨터 장치 사이에서 데이터를 주고받을 때, 각 장치 사이에 존재하는 속도의 차이나 시간 차이를 극복하기 위해 임시 기억장치의 자료구조 Queue를 사용
- 이를 통틀어 버퍼, 과장 자체를 버퍼링이라 부른다
- 1GB 이상의 동영상 파일들이 재생되기에 충분하지 않는 경우 발생하는 것 (유튜브의 회색바..)
- 데이터가 버퍼로 끊임없이 흐르는 것 : 스트리밍
- 메세지 큐가 필요한 실제 사례
- O2O (online to offline) 서비스를 구현할 때 (마켓컬리, 쿠팡 등등)
- 컴퓨터가 할 수 있는 일은 대부분 수평확장으로 해결 가능
- 그러나, O2O 서비스는 결국 사람이 해야 하므로, 주문 메시지를 메시지 큐에 모아놓고, 이벤트를 처리하는 주체가 주문을 차근차근 진행해야함
- 빠른 응답속도를 필요로 할 때
- 주(main) 작업과 별도로 처리되어도 상관 없고, 실시간성을 요구하지 않는 태스크
- 메세지큐에 다 밀어넣어놓고 하나하나 처리하면서 알림을 받는 것들
- 주(main) 작업과 별도로 처리되어도 상관 없고, 실시간성을 요구하지 않는 태스크
'마이크로서비스' 카테고리의 다른 글
S3, Lambda, SQS (0) | 2022.04.15 |
---|---|
AWS 서버리스 사진첩 만들기 (0) | 2022.04.14 |
AccessDenied: Access Denied 에러 해결 (0) | 2022.04.14 |
도메인 주도 설계 (코로나19 환자 관리 정보시스템 설계) (0) | 2022.04.08 |
마이크로서비스 정리 (0) | 2022.04.08 |