.png)
나는 사용하고있다Nginx-rtmp-모듈라이브 스트리밍용. 단일 시스템(AWS EC2 C3-대형)에서 40~50대의 카메라에 완벽하게 작동합니다. 하지만 스트림이 100개가 넘는 경우 요구 사항을 충족하도록 서버를 확장하려면 어떻게 해야 합니까?
ELB를 사용해 보았지만 새 시스템이 시작되면 연결이 종료되고 새 시스템을 시작한 후 라운드 로빈 방식으로 들어오는 요청을 보냅니다. 내가 원하는 것은 다음과 같습니다.
- 시스템의 CPU 사용률이 80%에 도달하면 새 서버를 시작하되 기존 연결은 유지합니다.
- 첫 번째 서버의 CPU 사용률이 80%를 초과하는 경우에만 새로 생성된 서버에 새 요청을 보냅니다. (라운드 로빈 없음)
어떻게 이것을 달성할 수 있나요? 시간 내 주셔서 감사합니다.
답변1
hls로 전환하려는 경우(nginx-rtmp는 hls를 지원합니다) 내 경험에 따르면 rtmp 자체의 로드 밸런싱을 시도하는 것보다 여러분의 삶이 더 쉬워질 것입니다. hls 트랜스코딩을 설정한 후에는 웹 서버 앞에 CDN을 배치하고 캐싱을 처리하도록 하거나 광택제, 오징어 또는 심지어 nginx를 직접 사용하여 직접 롤링하는 데 필요한 유일한 것입니다(물론 더 많은 가능성이 있습니다) ) - HTTP 캐싱은 널리 퍼져 있으므로 쉬운 해결책을 찾을 수 있을 것이라고 확신합니다.
하지만 rtmp를 계속 사용하려면 유사한 인프라를 설정할 수 있습니다.
하나의 마스터 수집 서버와 각각의 여러 에지 노드를 보유합니다.당기다수집 서버에서. 이 설정은 확장성이 뛰어나며 현재 로드에 적합하게 작동합니다.
편집: 귀하의 질문을 오해한 것 같습니다. 로드 밸런싱을 시도하는 대신 웹캠이 스트리밍해야 하는 rtmp 서버를 물어볼 수 있는 API 엔드포인트를 갖는 것이 가장 쉬운 방법일 것입니다.
따라서 rtmp 서버가 X 스트림(nginx-rtmp 통계 모듈 참조)에 도달하면 새 인스턴스를 시작하고 새 스트림을 해당 인스턴스로 리디렉션합니다.
nginx-rtmp에는 위치와 함께 3xx 헤더를 반환하여 on_connect에 리디렉션 기능이 있습니다(아직 2개 이상의 링크를 넣을 수 없습니다. 지시어 위키 페이지에서 on_connect를 검색하세요). 이것이 다른 노드로의 리디렉션을 지원하는지 확실하지 않지만 시도해 볼 가치가 있습니다. 그러면 서버를 선택하기 전에 수동으로 쿼리할 필요가 없습니다.
답변2
nginx가 rtmp 모듈을 사용하여 확장성을 지원하는지 모르겠지만 서버 솔루션을 자유롭게 변경할 수 있다면 우리 서버를 사용해 볼 수 있습니다.모나서버.
확장성을 허용하고 RTMFP와 같은 다른 프로토콜을 기본적으로 지원합니다.
여기에 3개의 서버를 사용한 확장성의 구성 예가 있습니다.http://www.monaserver.ovh/scalability.html#exchange-data-and-resources 이 샘플은 서버에 400명이 넘는 구독자가 있는 경우 새 구독을 리디렉션합니다. CPU 사용률을 실제로 사용하려는 경우 다음 줄을 변경할 수 있습니다.
if _nextServer and _subscribers>=400 then error(_nextServer.host) end
와 함께 :
if _nextServer and cpu>80 then error(_nextServer.host) end
그런 다음 CPU 로드를 얻는 가장 좋은 방법을 자유롭게 찾을 수 있습니다(매개변수CPU). C++ 코드를 호출해야 하는 경우 FFI 라이브러리를 살펴보세요. (다른 라이브러리/플러그인을 포함하지 않고 C++ 코드를 lua 스크립트에 포함할 수 있습니다.)
도움이 필요하면 포럼에 문의하세요.
그것이 당신에게 도움이 되기를 바랍니다!