예를들어서 cpu intensive한 잡이 있는데, 다중 서버 환경에서 이러한 일 처리를 골고루 하도록 샤딩 방식으로 일을 줄 수는 있겠지만, 애초에 그러한 일을 하는 서버가 독단적으로 있는 것이 깔끔하고 클라이언트 요청 스레드랑 경합하지 않을거 같은데, 그러한 일을 하는 서버만 하나 따로 파고 그 서버가 한 일에 대한 메타데이터는 같은 DB 사용, 기존 기능들에 대해서는 분산 서버가 이를 처리한다고 할때 이는 MSA 라고 할 수 있음?
뭔가 장애 처리에 대한 부분이나 그런 고려가 필요하지 않고 단순히 요청을 보내면 DB랑만 엮이는, 실패하더라도 크게 문제가 없는 유즈케이스라면.. 다중 서버가 그러한 일을 분산해서 처리하는 것과 저렇게 별도 서버를 두는 것 중 어느게 적절한지? 그리고 후자는 MSA라고도 하는지 궁금
뭔가 장애 처리에 대한 부분이나 그런 고려가 필요하지 않고 단순히 요청을 보내면 DB랑만 엮이는, 실패하더라도 크게 문제가 없는 유즈케이스라면.. 다중 서버가 그러한 일을 분산해서 처리하는 것과 저렇게 별도 서버를 두는 것 중 어느게 적절한지? 그리고 후자는 MSA라고도 하는지 궁금
- dc official App
제발 msa 공부를 기초라도 좀 쳐 하시고 물어보시면 안될까요?
msa 공부 하지말라는거 아녔음? - dc App
내로남불 ㅈ되노 대기련 ㅋㅋ - dc App
대기 SI다녀서 MSA뭔지모름 물어보는게 잘못맞다 ㅇ
MSA는 잘 몰라서 이 부분은 사과드립니다 기초 관련해셔 읽어보면 좋을 책이 있을까요? 아니면 꼭 MSA 아니더라도 이런 설계 관점에서 인사이트는 얻고 싶습니다 - dc App
아니 시발 msa가 뭔지는 알고 공부를 시작하던 말던 해야지 검색만 해도 나오는걸 알려달라는게 뭔.. 열받게 하는거려면 성공했다
오해하신거 같은데 MSA를 추구하고자하는게 아닙니다 잘 모르니까 모놀리식으로 가져가고 싶은데 별도 서버를 두는 구조가 모놀리식 그 이상으로 고려할게 많아지는 건지 아니면 여전히 모놀리식인지 모르겠습니다 - dc App
모놀리식, msa 두개로 나눠지는게 아니야 msa는 니가 생각하는거보다 훨~~~~~~~씬 더 잘게 쪼개고 디비도 나누는 등 할게 존나게 많음 역할에 맞게 서버를 나누는건 좋은 일이고 일반적으로 그렇게 함
걍 gpt한테 물어봐 - dc App
이 글만 보면은 cpu bound 작업의 결과를 response에 포함을 시켜줘야 하는지 아니면 그냥 응답만 내려주면 되는지를 모르겠음 만약 포함을 안 시켜줘도 된다면 저렇게 서비스 단위로 기능을 나누면 프로세스 간 어떻게 데이터를 전송해야 하는가? 중간에 장애가 발생하면 메시지 손실을 어떻게 감수해야 할 것인가? 혹은 메시지 순서가 중요하면 메시지 순서 보장은 어떻게 해야 하나? 또 멱등성이 중요하면 멱등성 처리는 어떻게 할 것인가?
고민할 포인트만 쓸데없이 ㅈㄴ 늘어남 나 같으면 동기화된 큐에 cpu bound 작업을 넣고 worker쓰레드를 코어만큼 만든 후 백그라운드로 돌렸음
응답 안줘도 되는걸 생각했음.. 뭔가 복잡한 로직이 있는 건 아니라서 사실 비즈니스 특성상 서로 통신할 필요조차 없을 수도 있겠다. 그냥 별도 분리된 서버는 아예 별도의 일만 해주고, DB에 메타데이터만 쉐어하는 구조라고 보면 될듯 - dc App
Thread per request 같은 모델을 사용하고 있고 cpu bound 작업때문에 Thread blocking이 걱정되면 동기화 큐에 넣고 worker thread로 돌리셈
여기에 대한 문제도 있지 당연히, 근데 너가 생각하셈 머리아픔
스프링부트 상 큐에 넣고 비동기 스레드로 돌린다는게 원래 생각한거긴한데 분산인 경우에는 한 서버가 너무 많은 일을 담당할거같아서 저렇개 분산서버에 라운드로빈해서 각각 일을 맡게끔 하려고하는데 괜찮은 방법인지를 모르겠음 - dc App
부하 예측이나 증설 관점에서 나누는게 맞긴 해 제공하는 기능들이 균일한 성능을 내지 않는다고 생각해봐라
나도 나누는게 맞다고 생각한다
개발 공수가 많이 들어간단 이야기지? 그러면 분산 서버가 있을때 한 서버가 몰아서 그 요청을 처리하고 로드밸런싱에 뭔가 전략이 있는게 아니라면 클라 요청이 열심히 작업 중인 쪽으로 포워딩되면 얘만 손해를 볼거 같아서 고민임 - dc App
로드밸런싱 라운드로빈이나 최소연결전략 같은거를 사용해
라운드로빈 알고리즘 많아 너가 찾아보고 적절한걸 선택하셈
걍 카프카 같은거로 메시지 쏘고 백프레셔로 처리 가능한 만큼 가져라가하면 되지 아 근데 혹시 사용자 요청에 동기적으로 수행돼야하는 일이야?
사용자랑 별도로 그냥 자기일만 하는 일이에요 이미지 압축쪽? 대규모도 아니고 손실되어도 그만이라서 레디스로 해보려고 했는데 카프카는 백프래셔라는게 있어서 서버가 가용할수 있는 리소스에 맞게 쓸 수 있나보군요 - dc App
ㅇㅇ 그럼 일반적으로 나눠야될 일이긴 함 근데 세상에 정답은 없고.. 막장솔루션도 솔루션이긴 하니까..
카프카 쓰던 내부 큐 만들어서 백프레셔를 스스로 구현하던 알아서하면됨
조언 감사합니다 관련해서 공부해볼게요..ㅎ - dc App