Plaid가 Node 병렬처리를 30배로 늘린 방법
(blog.plaid.com)Plaid는 은행으로부터 사용자의 잔고정보를 읽어서 통합뱅킹 API로 외부에 제공하는 서비스.
병렬화 없이 4000대의 Node워커를 운용하다가, 병렬 처리로 바꾸고 년간 $300K를 절약.
오류없이 변경을 적용하기 위해 단계별 시도한 접근들을 잘 정리.
- Prometheus에 메트릭 추가 : V8 Heap Size, GC, Task Latency
- 병렬처리 효과 측정용 Grafana 대쉬보드 생성
- LaunchDarkly 의 피쳐플래그를 이용해서 재디플로이 없이 병렬처리 효과를 튜닝
- CPU 시간을 측정하기 위해 프로덕션에 flamegraph 생성
실제 디플로이후 계속 조사하고 수정을 반복
- Node의 Max Heap Size 증가
- S3 보틀넥 제거 : S3클라이언트가 50으로 줄여버리는 maxSockets 를 20480으로 증가
- JSON Serialization 속도 향상 - bfj 를 JSONStream 으로 대치
- semi space 크기를 지정해서 GC 수행횟수를줄이기
- regex 가 많이 들어간 로깅 방식을 바꿔서 CPU 시간 최적화