Maker Forums에는 대규모 사용자 기반이 있지만, 동시에 온라인인 사용자가 ‘Who’s Online’ 아바타 표시를 무너뜨릴 정도로 많지는 않습니다. ‘Who’s Online’ 플러그인이 성능 저하의 원인이었으며, 온라인 사용자가 단 몇 명뿐인 상황에서도 요청이 타임아웃에 이를 정도로 심각한 문제였습니다. 우리는 오프라인 페이지가 포함된 외부 nginx 설정을 사용하고 있었는데, 이러한 타임아웃된 요청으로 인해 유지보수가 진행되지 않았음에도 주기적으로 유지보수 페이지가 표시되는 문제가 발생했습니다.
Digital Ocean Spaces에서 마이그레이션한 후 이미지를 로컬에서 서빙하고 있으며, 이로 인해 유니콘(unicorn) 워커를 위한 경쟁이 발생합니다. 그러나 우리는 2 CPU 4GB VM에서 모든 것을 실행하고 있고, 상대적으로 큰 데이터베이스(약 40만 개의 게시글, 6GB 데이터베이스)를 보유하고 있으므로, 각 0.5GB를 차지하는 유니콘 워커를 단순히 많이 추가할 공간이 없습니다. 이미지에 오브젝트 스토리지를 사용했다면 유니콘 워커를 위한 경쟁이 줄어들어 전반적인 영향이 더 작을 것으로 추정하지만, 현재 단 두 명의 온라인 사용자만으로도 이러한 영향이 관찰되었으므로, 여전히 상당한 영향이 발생할 가능성이 높습니다.
업데이트: 레이트 리miting flood 영역을 12r/s에서 36r/s로, burst를 12에서 36으로 수정한 결과, 'Who’s Online’의 영향이 적어도 줄었습니다. 현재 이 설정을 테스트하고 있습니다.
추가 업데이트: flood 레이트를 3배로 늘린 후, 현재까지 문제점에 대한 보고가 없습니다.
저는 외부 nginx를 사용하고 있습니다. 외부 nginx에 레이트 리miting을 적용했으며, ratelimited 템플릿을 시작점으로 사용했습니다 하지만 외부 nginx는 어떤 라우트가 정적인지 알지 못해 정적 라우트와 동적 라우트 모두에 레이트 리miting을 적용하므로, 이를 수행했을 때 정적 자산 로딩 시 많은 실패/재시도가 발생했습니다. 따라서 내부 nginx에서 레이트 리miting을 사용하기로 결정했습니다. 참고로 외부 nginx를 실행해야 하는 이유 중 하나는, 그렇지 않으면 모든 IPv6 트래픽이 docker IP 주소로 귀속되어 하나의 IP 주소인 것처럼 레이트 리miting이 적용되기 때문입니다.