Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1장] 분산 컴퓨팅의 역할에 대한 장환님 질문 답변 #3

Open
jay-so opened this issue May 3, 2024 · 3 comments
Open
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@jay-so
Copy link
Member

jay-so commented May 3, 2024

  • 도서 : 분산 컴퓨팅
  • 챕터 : 1장

안녕하세요! 분산 컴퓨팅 1장에 대해서 장환님 @newbieJanghan
분산 컴퓨팅 1장에 대해서 다음과 같이 질문을 해주셨는데요!

장환님 1장 질문

p.20
분산 컴퓨팅 또한 메시지 전달에만 초점을 맞추지 않는다.
중간에 어려운 환경의 네트워크가 있어 메시지 전달에 어려움이 있어도
참여하는 전자 및 기계 장치 간의 협력과 공동 목적 달성에 무리 없이 수행할 수 있는지를 해결한다.
이것이 바로 분산 컴퓨팅이 수행하는 역할이다.

저자가 제시하는 분산 컴퓨팅의 역할이

  1. 메세지 전달에 실패해도 합의에 도달하게끔 한다인지
  2. 메세지 전달에 어려움이 있지만 메시지 전달 성공에만 집중하는 것이 아니라 합의까지 도달하는 것인지

맥락적 이해가 어렵다.

해당 부분에 대한 제 생각은 다음과 같습니다!

👉🏻 장환님 질문에 대한 개인적인 생각 및 정리 @jay-so

안녕하세요 장환님! 개인적으로 분산 컴퓨팅의 역할은 둘 다 해당한다고 생각합니다. 😀😀

1. 메시지 전달에 실패해도 합의에 도출할 수 있는 경우

  1. 메시지 전달에 어려움이 있지만 메시지 전달 성공에만 집중하는 것이 아니라 합의까지 도달하는 것인지
  • 해당 부분은 “메시지 전달이 어려움” 이 있었지만, “메시지 전달 성공” 과 함께 “합의를 도달하는 것” 이라는 전제 조건이 있는데요. 이는 스프링 Batch와 스프링 Scheduler를 예시로 들 수 있어요.

  • 스프링 Batch에서는 미리 어떤 작업(Job)을 할 것인지 을 설정할 수 있는데요! 대용량 트래픽 상황에서 미리 정의된 작업(Job)과 스케줄러(Scheduler)를 이용하여 특정 이벤트 발생 시점이나 지정된 시간에 미리 합의된 작업(Job)을 수행할 수 있는 과정을 예시로 들 수 있을 것 같습니다!

@jay-so jay-so added the documentation Improvements or additions to documentation label May 3, 2024
@newbieJanghan
Copy link
Contributor

와! 이렇게 바로 답변 주셔서 감사합니다! : )
Actuator 사례를 보니 메시지 전달에 실패해도 합의할 수 있는 분산 컴퓨팅 개념이 이해되었어요.

한편 Batch나 Schedule의 사례는 아직 좀 어려운데요.

  1. Batch/Schedule Application에 비동기적인 컴퓨팅을 요청함. (메시지 전달 성공)
  2. Batch/Schedule Application 은 수행 결과에 대한 응답을 따로 네트워크를 통해서 전달하지 않음 (응답 메시지 전달의 어려움)
  3. 요청을 보낸 쪽도 동기적인 응답을 기대하지 않음. 작업을 요청한 시점부터 반드시 작업을 수행할 것이라고 확신하기 때문(합의)

이런 논리 흐름으로 분산 컴퓨팅 이해하려고 하는데 맞을까요?

@jay-so
Copy link
Member Author

jay-so commented May 3, 2024

안녕하세요! 장환님! @newbieJanghan
Spring Batch나 Scheduler 개념 부분이 조금은 어렵게 느끼실 수 있어요! 😃😃

장환님께서 주신 답변을 바탕으로 정확히 설명드리자면 살펴보자면 다음과 같아요!

  1. 요청 메시지 전달 성공(메시지 전달 성공)
  • 단순히 A서버에서 B서버로 요청을 주는 과정이라고 생각하시면 좋을 것 같습니다!
  • 예를 들어, 토스 계좌 이체 서비스 기능을 담당하는 서버(서버A)에서 국민은행 서버(서버B)에 장환님께서 저에게 만원을 송금한다는 요청 메시지 전달하는 과정을 예시로 들 수 있습니다! (저는 국민 은행을 쓴다고 가정했을 경우를 의미합니다!)
  1. (응답 메시지 전달의 어려움)
  • 해당 부분은 “응답 메시지 전달의 어려움” 보다는 "비즈니스 특성 상 실시간 응답이 필요한 경우와 불 필요한 경우" 로 생각하시면 좋을 것 같습니다!

2 - 1) 요청이 들어옴과 동시에 실시간으로 처리하는 과정이 필요한 경우

  • 돈과 관련된 결정이나 해당 서비스가 비즈니스 특성상 실시간으로 작동이 필요한 경우

돈과 관련된 금융과 관련 시스템에서는 실시간 처리가 중요합니다! 이전 요청에 따라서 장환님 계좌에서 만원을 빼는 작업과 동시에 제 계좌에 만원이 입금되는 과정이 한 번의 트랜잭션 안에서 이루어져야 합니다!

성공할 경우

  • 장환님 계좌에서 만원이 출금되며 동시에 저에게 만원이 이체되어, 제 계좌에 만원이 입금됩니다!

실패할 경우

  • 만약 실패하면 "보상 트랜잭션" 으로 해당 요청이 실패되었음을 알리고, 요청 이전의 상황을 복구합니다!
  • 예를 들면, 만약 자정 무렵에 장환님이 저에게 돈을 송금하려는 상황이라면 “점검 중입니다!” 라고 표시되고 바로 이체가 거부된다고 했을 때, 장환님의 이체 요청은 실패가 되고, 장환님의 계좌에서는 돈이 이체가 되지 않아야 합니다!
  • 이때 보상 트랜잭션을 사용할 수 있는데, 보상 트랜잭션은 요청에 실패하게 되면 요청 이전의 상태로 돌아가는 작업을 의미 합니다.
  • 보상 트랜잭션에 관련해서는 다음의 글을 참고하시면 좋을 것 같습니다!

2- 2) 요청이 들어왔으나, 실시간으로 처리가 불필요한 경우

  • 해당 부분은 제가 어떤 웹 사이트에서 구매한 상품의 리뷰를 작성했을 때를 생각할 수 있어요!
  • 제가 네이버 쇼핑을 통해서 물건을 구입하고 쇼핑 리뷰를 작성한다고 가정해봤을 때, 제가 쓴 글이 1분 뒤에 올라와도 해당 서비스에는 전혀 문제가 없어요.
  • 한 명의 사용자가 리뷰를 작성하는게 아닌, 수십만 명의 사용자가 리뷰를 작성할 경우, 각각의 리뷰 업데이트를 즉시 처리하려면 서버에 막대한 부하가 발생할 수 있습니다. 또한, 해당 리뷰 업데이트라는 작업이 실시간적으로 처리가 필요하지는 않습니다!
  • 이때, Spring Batch와 Spring Scheduler를 이용하여 1분 단위로 사용자가 작성한 리뷰들을 저장하고 업데이트한다면 서버의 부하를 줄일수 있습니다!
  • 이에 spring batch에 사용자가 작성한 리뷰를 저장하고, 이를 업데이트한다는 작업을 Job으로 등록하고 스케줄러를 이용한 1분마다 업데이트 작업을 수행한다는 시간을 설정한다면 서버의 부하는 줄어들게 됩니다!
  1. (합의)
  • 해당 부분도 단순히 "요청을 보낸쪽도 동기적인 응답을 기대하지 않음" 이 아닌 "비즈니스 특성 상 실시간 응답이 필요한 경우와 불 필요한 경우" 로 생각하시면 좋을 것 같습니다!

3 - 1) 요청이 들어옴과 동시에 실시간으로 처리하는 과정이 필요한 경우

  • 해당 부분은 동기적으로 작업이 수행됩니다!!

3-2) 요청이 들어왔으나, 실시간으로 처리가 불필요한 경우

  • 작업을 요청한 시점부터 반드시 작업을 수행할 것이라고 확신하기 때문(합의)에 비동기적으로 수행 이 됩니다!

이처럼 분산 컴퓨팅에서도 응답형태가 딱 명시되는 것이 아닌 비즈니스 특성상 1)실시간으로 이루어지는 경우2)실시간으로 처리가 불가능한 경우 에 따라서 동기적인 응답이 필요한지, 비동기적인 응답이 필요한지 에 대해서 나누어진다고 생각합니다!
이에 분산 시스템 및 여러 서버가 있는 시스템(MSA)에서는 비즈니스의 특성 으로 응답 형태가 구별된다고 생각하시면 좋을 것 같습니다! 😃😃

@newbieJanghan
Copy link
Contributor

와., 정말 감사합니다. 많이 배웠어요!!

저도 더 나은 지식 공유 위해 열심히 공부하겠습니다! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants