비동기(asynchronous)라는 용어는 정말로 정말로 넓게 쓰이는 용어입니다
여러 문맥에서 사용될 수 있는 용어고, 각 문맥에 따라 의미가 조금씩 다르게 쓰이기 때문에
비동기 프로그래밍, 비동기 I/O, 비동기 커뮤니케이션
이 세 가지가 무엇을 의미하는지 각각의 문맥에서 비동기의 개념들을 살펴봅니다.
출처 : 쉬운코드 유튜브
차례 차례 작업을 시작한다. task1이 끝나고 task2, task2가 끝나면 task3
synchronous programming : 여러 작업들을 순차적으로 실행하도록 개발
task 1, 2, 3가 동시에 실행될 수 있다.
asynchronous programming : 여러 작업들을 독립적으로 실행하도록 개발
v1 > v2
여러개의 스레드가 한 작업씩 맡아 수행한다.
스레드 한개가 여러 작업들을 수행한다.
햇반을 커널에 맡기고, 스레드는 김치를 썬다. 국 끓이기를 커널에 맡기고 스레드는 스팸을 굽는다. 햇반을 다 데울때까지 기다리지 않고 동시작업이 가능하다.
적은 스레드를 사용하면서 non-block I/O를 통해 성능 향상을 추구한다.
하나의 서비스를 구현하면 기능과 역할에 따라 여러 개의 마이크로 서비스로 구성되고 이들 사이에는 빈번하게 커뮤니케이션이 발생한다.
문제점 : 서비스 C에서 에러가 발생해서 응답을 하지 않을경우 서비스 B와 A도 계속해서 응답값을 기다리기 때문에 서비스를 수행하지 못한다.
서비스 A가 작업 중 서비스 B가 처리할 이벤트가 발생하면 A는 메세지 큐에 넣고 자기가 할일을 하고, B는 메세지 큐에 새로운 값이 존재하는지 체크, 컨슘한다. 새로운 메세지가 생성되면 해당 메세지를 컨슘해서 작업을하고 C로 향하는 메세지 큐에 데이터를 보내고, B는 자기가 할일을 한다.
이벤트가 발생하면 각 서비스에 요청을 하는게 아니라, 메세지 큐에 넣는다.(중계, 버퍼 역할)
C에서 장애가 발생해도 일부 서비스 또는 C에서 장애가 영향이가고 전체서비스에 영향을 미치지 않는다.
메세지 큐는 각 서비스에서 API 통신하는것보다 상대적으로 느리다.