PM2와 NodeJS간 프로세스 통신

Donghoon Nam
원티드랩 기술 블로그
3 min readAug 6, 2020

Lambda + SSM관련 글을 읽으시면 더 도움이 되실거 같습니다.

https://medium.com/wantedjobs/sending-bash-commands-to-an-ec2-cluster-with-aws-lambda-and-ssm-8b7ecb9597bd

배경

S3에 있는 용량이 큰 데이터를 웹으로 가져와 핸들링 하는 것에서 웹 서버의 transaction time이 늘어나는 것을 확인 할 수 있었습니다.

이에 대한 해결 방법으로 nodejs의 memory-cache를 사용하고자 하였습니다.

목표

현재 S3에 용량이 큰 특정 데이터 파일에 대해서 생성/변경이 생기면 웹 서버에 메세지를 전달해서 nodejs의 memory-cache에 저장/갱신 해야 합니다.

방법

해당 데이터를 갱신하는 작업을 진행하는데 있어 두 가지 방식으로 좁혀 진행및 테스트를 하였습니다.

  1. S3, Lambda, Api Gateway를 이용한 web socket통신
web socket을 이용한 메세지 전달

2. S3, Lambda, SSM, PM2 sendDataToProcessId를 이용하여 해당 인스턴스 Nodejs프로세스와 통신

PM2를 이용한 프로세스에 따라 메세지 전달

1번의 web socket통신의 경우 단순한 파일 갱신 메세지를 보내기 위해 Api Gateway의 socket프로토콜을 설정하여 사용하기에는 monitoring등 aws resource낭비라고 판단이 되었습니다.

2번의 경우 lambda에서 send-command를 통하여 ec2내 명령어를 실행하여 프로세스간 메세지 통신을 통해 memory-cache를 갱신을 할 수 있어 간단하게 처리할 수 있어 선택하게 되었습니다.

pm2에서 pm2 instance의 nodejs와 통신을 하는 예제는 첨부하도록 하겠습니다.

결론

EC2등 instance별 거기서도 pm2로 동작하고 있는 인스터스들 중에 선별, 혹은 모두에게 특정 메세지를 보내 처리할 수 있는 부분을 정리하였습니다.

개발하는데 도움이 될거 같아 공유합니다~.

--

--