분산 환경에서 메세지를 전달할 때 사용되는 전략 세 가지에 대해 설명함.
아래 링크를 보고 정리
www.joinc.co.kr/w/man/12/Kafka/exactlyonce
A 에서 B 로 0,1,2,3,4,5,6,7,8,9 의 10개 메세지를 보낸다고 하자.
이 때 메세지를 보내는 전략 중 다음 세 가지를 선택 가능하다.
< at-most-once >
A 에서 B로 최대 한 번은 보내는 전략
중간에 네트워크 이슈나 타임아웃, 실패 등의 이슈로 인해 메세지가 전달되지 않을 수 있지만
그건 신경쓰지 않는다.
예를 들어 0,1,2 는 방화벽에 막혀서 사라져버렸고
3,4,5,6 은 B가 받질 못해 사라져버렸고
7,8,9 만 B에 제대로 도착함.
0~6은 어떻게 되는 걸까? 그냥 사라진 상태 그대로 둔다.
이 전략은, 짧은 간격으로 주기적으로 발생하는 센서 데이터 등을 보낼 때 사용한다.
중간에 메세지가 사라지더라도, 영향이 크지 않고, 대량 처리가 용이하다.
< exactly-once >
A 에서 B로 보내는 메세지를 정확하게 딱 한 번 보내는 전략
중간에 여러 이슈 때문에 실패가 떠서 사라지는 메세지 소실 이슈와
ack 가 오지 않아 A가 똑같은 메세지를 다시 보내는 중복 이슈 등이 생길 수 있지만
이러한 이슈들을 모두 해결하고 B 는 딱 하나의 메세지만 받는다.
구현하기 굉장히 어렵다.
중간에 B에게 열심히 가고 있는 메세지가 여러 환경의 제약때문에 속력이 너무 느려졌는데,
A가 '중간에 사라졌나? 다시 보내야지' 하고 똑같은 메세지를 다시 보낼 수 도 있다.
그럼 먼저 보낸 메세지와 나중에 다시 보낸 똑같은 메세지가 중복으로 들어갈 것인데,
이러한 환경의 조건들까지 모두 생각해서 구현해야 하는 것이 exactly-once 전략이다.
모든 경우를 대비해야한다.
< at-least-once >
A 에서 B로 최소 한 번은 보내는 전략
A 가 보내는 메세지가 여러 이슈 때문에 사라지거나, 지연될 수 있다.
이런 상황에서 A 는 사라진 메세지를 B가 받지 못할거라 생각하기 때문에
메세지를 다시 보낸다. B가 받을 때까지.
그에 따라 똑같은 메세지가 중복으로 발송될 수 있다.
(위에 exactly-once 에서 든 예처럼, 너무 느리게 가서 중간에 사라졌다고 착각하게 되는 경우)
B는 A가 보내는 메세지를 반드시 받는다.
그런데 그 메세지는 1개 이상 올 수 있다.
A가 0,1,2,3,4 를 보냈는데, B는 0,0,3,3,3,3,3,3,2,4,4,1,1,1,1 이렇게 중복되어 올 수 있다.
또한 환경의 차이에 의해 도착하는 메세지들의 순서가 다르게 올 수 있다.
A가 1,2,3,4,5 순서로 보냈는데, B는 5,2,4,1,3 순서로 받을 수 있다.
'눈가락' 카테고리의 다른 글
[Python] directory 내 모든 파일의 글자 빈도수 계산하기 (0) | 2021.02.08 |
---|---|
[AWS] 첫 사용자를 위한 Tutorial 유튜브 링크 (영어) (0) | 2021.02.08 |
[Docker] Telegraf+InfluxDB+Grafana 로 Server Metric 확인하는 방법 연구 (0) | 2021.01.13 |
[Git] 직접 실습해보는 사이트 링크 (0) | 2021.01.03 |
[Vi/Vim] 줄 번호 넣거나 검색어 하이라이트 넣는 방법 (0) | 2020.12.24 |