
다음과 같이 실행되는 앱이 있습니다.
- 프런트엔드로 사용되는 nginx 인스턴스 1개(정적 파일 제공)
- 백엔드용 node.js 애플리케이션 클러스터(클러스터 및 expressjs 모듈 사용)
- 하나의 Postgres 인스턴스를 DB로 사용
애플리케이션에 다음과 같은 확장성이 필요한 경우(HTTP/REST 요청에만 해당) 이 아키텍처가 충분합니까?
초당 500개 요청(각 요청은 DB에서 데이터만 가져오며 해당 데이터는 몇 ko일 수 있으며 가져오기 후에 큰 계산이 필요하지 않음)
20000명의 사용자가 동시에 연결됨
병목 현상이 발생하는 곳은 어디입니까?
답변1
nginx의 한 인스턴스는 땀을 흘리지 않고도 초당 수천 개의 작은 정적 파일을 처리할 수 있습니다.
앱 계층의 확장성은 node.js보다 앱에 따라 달라집니다. 파일/세션 데이터 등을 로컬에 저장하는 경우 작업이 까다로울 수 있지만 모든 저장소를 데이터베이스와 같은 중앙 위치에 배치하는 경우(또는 다음과 같은 것일 수 있음) 세션 데이터 저장을 위한 Redis), 더 많은 노드를 추가하여 앱 계층을 확장하는 것은 쉬울 것입니다.
데이터베이스는 거의 항상 확장하기 가장 어려운 부분입니다. 대부분 읽기 작업을 수행하는 경우 postgres 9.1에는 하나의 읽기/쓰기 마스터 데이터베이스와 대량의 읽기 작업을 처리할 수 있는 여러 읽기 전용 슬레이브를 보유할 수 있는 정말 멋진 핫 대기 기능이 있습니다.
쓰기가 많은 데이터베이스 시스템을 확장하는 것은 아마도 가장 어려운 확장성 문제일 것입니다. 하나의 매우 강력한 데이터베이스 서버가 따라잡을 수 없을 때 대부분의 사람들은 앱을 완전히 다시 생각하고 다시 작성하게 됩니다(처음부터 계획된 것이 아닌 한, 여러 개의 마스터 데이터베이스를 계획하면 시작하기가 더 어렵고 느려집니다). , 거의 필요하지 않습니다. stackoverflow 네트워크는 모두 하나의 데이터베이스 IIRC에 있습니다.)