2017-03-08 1 views
0

분석 목적으로 여러 엔드 포인트에서 동시에 데이터를 스트리밍 할 수있는 서버를 구축하고자합니다.사용자를위한 스트림 데이터

시나리오 : 사용자의 플랫폼에 등록 된 사용자는 IoT 장치의 자격 증명을 제공합니다. 예 : https://stream.example.com/user1 & https://stream.example.com/user2

Google의 책임은 보고서를 생성하기 위해 기기 로그 및 상태를 모니터링하는 것입니다.

Questions : 각 스트림은 HTTP 연결을 열어 둘 것이므로 node.js 또는 ruby ​​응용 프로그램에서 serval HTTP 스트림을 열려면 어떻게해야합니까?

+0

서버에서 장치의 데이터를 가져 와서 단일 스트림으로 멀티플렉싱하고 싶습니까? –

+0

가능합니까? 데이터 스트리밍에 익숙하지 않습니다. 방법을 제안하십시오. 감사합니다 –

+0

그래. Scramjet을 썼을 때 제가 생각한 사례 중 하나는 대답을 쓸 것입니다. :) –

답변

0

대부분의 경우 응용 프로그램이 IO (파일로 네트워크 데이터 스트리밍)를 처리하기 때문에 CPU가 병목 현상이 아닐 수도 있습니다. 그러나 대역폭을 고려해야하며 대역폭이 병목 현상이 될 때 확장해야합니다. 이 경우 전통적인 역방향 프록시가 도움이되지 않습니다. 라운드 로빈 DNS와 같은 DNS 트릭을 수행하여 클라이언트를 서버에 고르게 파견하고 서버에 직접 연결할 수 있도록해야합니다.

데이터베이스를 사용하여 로그를 저장하지 않는 것이 좋습니다. 일반 텍스트 파일로 충분합니다. crontab 작업을 만들어 정기적으로 파일을 구문 분석하고 필요한 경우 데이터베이스를 업데이트 할 수 있습니다.

Ruby를 사용하지 않는 것이 좋습니다. Node.js는 비동기 I/O로 인해 이러한 상황에서 우수합니다. 이는 한 스레드에서 수천 개의 이러한 연결을 처리 할 수있게합니다.

+0

죄송합니다. 나의 이전 질문은 약간 불분명하다. 나는 내 질문을 업데이트했다. 그것에 대해 알고 싶으면 확인해 주시겠습니까? –

0

내가보기 엔 node.js를위한 루트도 있습니다. 개방형 연결을 유지하면 비동기식 프레임 워크에서 잘 작동하며 Ruby는 매우 적합하지 않습니다 (그렇지만 저는 Ruby에 그다지 중요하지 않습니다).

Scramjet을 사용하면 두 사람이 열린 연결을 유지해야하므로 노드 응용 프로그램 자체는 아닙니다. 귀하의 경우 노드 응용 프로그램이 주어진 자격 증명을 사용하여 여러 장치에 대한 연결을 적극적으로 열어 주며 이러한 장치는 Twitter의 스트리밍 API와 같은 비트를 통해 끝이없는 스트림으로 응답한다는 점을 이해합니다. 조금 같이 :

new scramjet.MultiStream(devicesList.map(
    (device) => request.post(device, credentials) 
      .pipe(new StringStream()) 
      .split("\r?\n") // or however you'd read your messages 
      .parse(JSON.parse) // or however you'd parse your data 
      .assign({deviceId: device.id}) // you'll probably need this 
)) 
.mux(/* optionally an ordering function */) 
// above there's a single stream with all the logs from all your devices. 

를이 다른 방법으로 둥글고 장치가 서버를 호출하는 경우, 다음 scramjet-http-uristream 또는 scramjet-http-post 좀 봐 - 그냥 모든 URI의 나 게시물을 스트림 간단한 단절이다 서버에 게시됩니다.

이 정보가 도움이되기를 바랍니다. :)