• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

pm2 사용 관련 질문이 있습니다.

22.07.03 18:32 작성 조회수 434

0

nodejs  활용 외부 API 호출 후 응답받은 데이터로 2차 서비스를 만들고 있는중에

선임(자바 개발자) 으로부터 API 호출 시 안전 장치를 위해 Circuit Breaker 를 구현하는게 좋을 것 같다는

의견을 청취해 해당 로직 구현 후 로컬 테스트 후 개발 서버에서 테스트 중 버그를 발견했습니다.ㅜㅜ

 

pm2 로 멀티프로세싱 시 메모리 공유가 되지않아 각 프로세스 별 API 요청 실패 횟수 및 서킷의 현재 상태가 공유되지않아

제가 생각한 방향과 다르게 동작했습니다.

(pm2를 책에서 보고 따라했어서 다시 찾아보니 제로초님이 로그인 세션에 빗대어 설명해주신걸 이제야 이해했네요ㅜㅜ)

 

핵심 질문은 요런 내용으로 pm2 가 관리하는 마스터 노드에서 각 워커 노드에게

브로드캐스팅으로 현 상태를 전달하는 예제들을 많이 봤는데

 

각 프로세스들의 서킷 상태 뿐 아니라 실시간으로 API 실패 횟수를 체크(서킷의 상태를 관리하기 위한 임계치) 를 해야해서

여러 프로세스에서 동시에 처리하다보면 해당 데이터가 꼬일 것 같습니다.ㅜㅜ

 

1. Redis 등 외부 인프라를 사용하지 않고 처리 할 수 있는 괜찮은 방안이 있을까요?

2. 해당 어플리케이션이 k8s 클러스터에 배포가 되는데, 서버 상태를 k8s가 체킹해주고 있다면

      pm2를 걷어내도 될까요?(각 k8s 의 워커 노드들의 CPU가 4코어로 pm2를 사용 시 좀 더 효율적으로 메모리 관리가 된다고        생각하고 있습니다..)

사내에 node.js 개발자가 없어서 강사님께 질문을 드리게되네요.

 

무더위 건강 유의하시고, 좋은 강의 감사합니다.

답변 1

답변을 작성해보세요.

1

1. 현재 서버 안에서 하나의 서버를 더 띄워서 공유하면 됩니다. 그 서버가 레디스면 되고요. 아니면 서킷브레이킹을 할 수 있는 노드여도 됩니다.

2. 저희도 코어를 활용하기 위해 k8s에서 pm2로 클러스터링 또 하고 있습니다.

elseelse님의 프로필

elseelse

2022.07.03

쉬는 날에도 빠른 답변을 주셔서 너무 감사합니다.

제가 처음하다보니 조금 무지해서 추가 질문을 드려요 (__) 

 

현재 서버 안에서 하나의 서버를 더 띄운다는 것은

책에서도 나와있는 동일 프로젝트에 mono-repo 형식으로 서버를 2개 띄우는 것을 말씀하시는걸까요? 그 서킷 브레이킹을 할 수 있는 노드라는 말씀도 조금만 더 설명을 들을 수 있을까요?ㅜㅜ

정말 죄송하고 감사합니디.

쉽게 말해서 컴퓨터 안에 서버 두 대를 띄우시면 됩니다. localhost:8001 localhost:8002 띄우듯요. 서킷브레이킹을 할 수 있는 노드라는 건 서킷 브레이킹 기능을 노드로 구현하실 수 있다면 그 서버도 쓸 수 있다는 겁니다.

elseelse님의 프로필

elseelse

2022.07.03

감사합니다. 바쁜 시간 내주셔서 감사합니다!

이해가 어느정도 돼서 공부를 더 해보겠습니다. !!!