W2AS2L
2023. 7. 21. 01:52
2023. 7. 21. 01:52
일반적인 서비스
- 객체는 다른 객체를 직접 호출하고 데이터를 받는다. == 동기
- 경계가 무너지고 구성요소의 독립적인 실행이 보장되지 않으며 복원력, 유연성 모두 위협을 받게 됨
- Reactive manifesto를 적용한다면?
동기 stream
- callee는 caller에게 응답이 아닌 stream을 제공한다.
- callee는 각각의 값을 stream을 통해서 전달한다.
- caller는 해당 stream을 collect하여 처리한다.
stream을 이용한 흐름
- 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
- caller는 collect를 통해서 값을 조회해야 한다.
- 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
- stream이 메시지 큐의 역할을 하지만, 부하를 관리할 수 없다
비동기 future
- callee는 caller에게 응답이 아닌 future를 제공
- callee는 각각의 값을 future를 통해서 전달한다.
- caller는 해당 future를 chaining 하여 이를 처리한다.
future를 이용한 흐름
- 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
- caller와 callee는 비동기적으로 동작한다.
- 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
- future는 메시지 큐의 역할을 할 수 없고, 부하를 관리할 수 없고, 배압도 적용할 수 없다.
Reactive streams
- callee는 caller에게 응답이 아닌 publisher를 제공
- callee는 각각의 값을 publisher를 통해서 전달한다.
- caller는 해당 publisher를 subscribe하거나 다른 caller에게 전달한다.
- caller는 subscriber를 등록하여 back-pressure를 조절하여 처리 가능한 만큼 전달 받는다.
Reactive streams을 이용한 흐름
- 구성 요소는 서로 비동기적으로 메시지를 주고 받으며, 독립적인 실행을 보장
- callee는 publisher를 반환하고 caller를 subscriber를 등록한다. 이 과정에서 caller와 callee는 비동기적으로 동작한다.
- 메시지 큐를 생성하고 배압을 적용하여 부하를 관리하고 흐름을 제어한다.
- publisher는 메시지 큐를 생성해서 부하를 관리하고 흐름을 제어한다. back-pressure를 조절할 수 있는 수단을 제공한다.
Reactive programming
- 비동기 데이터 stream을 사용하는 패러다임
- 모든 것이 이벤트로 구성되고 이벤트를 통해 전파되어야 한다.
- event-driven 해야 한다.
- 데이터의 전달, 에러, 완료 까지 모두 이벤트로 취급
- Reactive manifesto의 Responsive,Resilient, Elastic, Message Driven 까지 모두 해당