작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
596
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로 클러스터링 또 하고 있습니다.
쉬는 날에도 빠른 답변을 주셔서 너무 감사합니다.
제가 처음하다보니 조금 무지해서 추가 질문을 드려요 (__)
현재 서버 안에서 하나의 서버를 더 띄운다는 것은
책에서도 나와있는 동일 프로젝트에 mono-repo 형식으로 서버를 2개 띄우는 것을 말씀하시는걸까요? 그 서킷 브레이킹을 할 수 있는 노드라는 말씀도 조금만 더 설명을 들을 수 있을까요?ㅜㅜ
정말 죄송하고 감사합니디.