대량 동영상 변환(FFmpeg) 서버 구축시 고려해야 할 사양들이 궁금합니다.
사용자가 동영상을 올릴경우에 변환 해주는 서버를 구축할 예정입니다.
효율적인 서버 구성에 있어 어떤 사항들을 고려해야할지 조언 좀 해주시면 감사하겠습니다.
일단 Master 서버를 하나두고 여기서 일을 분배할 예정입니다.
Slave 서버들에서는 동영상 경로를 받아서 특정 코덱으로 변환해서 스토리지에 쓸 예정입니다.
1 Master - 5 Slave - 1 Storage ( NAS ) 형태로 구성하려고합니다.
동영상 원본과 변환물은 전부 한 스토리지에 있꾸요.
분산 처리라고 해봤자 각 서버에 FFmpeg을 CommandLine으로 순차적으로 실행하는정도로 할 예정이구요...
한 서버당 FFmpeg은 동시에 5개까지 돌릴예정입니다. 그 이상 넘어가면 속도차이가 많이 없는 것 같아서요...
이렇게 구성하려고 하는데 이런방법이 맞는걸까요?... 몇가지 질문 드리자면
1. 스토리지에 동시에 얼마까지 write를 할 수있는지도 고려를 해야하는지 궁금하고...
2.변환 일을 분배하는데 순차적으로 분배하는것보다 좋은 방법이 있을런지요
3. FFmpeg의 경우 성공이나 실패 callback이 따로 없는것 같은데 이를 적용할려면 직접 c 소스를
수정해서 컴파일 해야할까요? ( 제가 C/C++를 다뤄본지 꽤 오래됐습니다 ㅠㅠ).
4. 동영상 변환 예상시간을 보여주려면 어떻게 계산을 해야할까요?... FFmpeg h264로 변환하는데 옵션마다 변환시간이 다르고 비트레이트(용량) 마다도 다 다른거 같아서... 계산식이 있는지 궁금합니다.
주저리주저리... 아는 지식이 많지 않아서 질문을 막 드렸는데,
조언 부탁드리겠습니다.
대충 아는것만..
일단 조언드리고 싶은것은.. 현재 방향이 그닥 크게 틀린것은 없어보이니 일단 구현을 하신 다음에 퍼포먼스 튜닝을 하시는게 좋을것 같다는 생각입니다.
1. 고려는 하셔야겠지만 H.264코덱이 프로세싱 파워를 상당히 먹기때문에 하드디스크단에서 병목이 생기진 않을것 같다는 생각입니다. 혹시라도 병목이 생기면 서로 다른 하드디스크에 저장한다든지 하는 방법을 생각해 볼 수 있겠네요. 이거는 퍼포먼스 측정 툴로 금방 나올테니..
2. 일반 유저 대상일 경우 순차로 하셔야 될 것 같네요. 순서대로 넣었는데 뒤엣 파일이 먼저 인코딩되면 좀 당황스러울듯 합니다. 물론 유료사용자는 별도의 큐에 지정한다든지 하는 예외상황은 염두에 두셔야겠죠.
3. 그냥 스크립트단에서 출력 텍스트 메시지를 가공해서 판단하셔도 됩니다. 소스코드를 수정해도 되겠지만..
4. 소스파일을 읽어들이는 속도를 가지고 적당히 계산하시면 됩니다. 가령 소스의 1/10을 읽어서 변환하는데 1초가 걸렸다면 총 변환은 10초로 예상하는 식으로.. 이것도 FFMPEG의 출력메시지를 가공해서 판단할 수 있는 걸로 압니다. 또는, CBR이라면 출력 파일의 크기를 대충 예상할 수 있으므로 생성된 파일의 크기를 보고 계산할 수도 있겠네요.
또한 노파심에서.. FFMPEG에는 멀티스레딩 옵션이 있습니다. 혹시 테스트 안해보셨다면 테스트해보세요.. 퍼포먼스 희생을 최소화하면서 파일 하나의 인코딩에 걸리는 시간은 줄어들기 때문에 (물론 전체 완료 시간은 비슷하게 걸리겠죠) 유저 입장에서 좀더 만족스러울 듯 합니다.
--
댓글 달기