2011-12-25 2 views
1

그래서이 서버 애플리케이션을 Google AppEngine에서 실행하여 node.js로 마이그레이션하고 있습니다.node.js에서 이미지 서비스를 빌드하는 가장 좋은 방법

내 주요 관심사는 강력한 GAE의 blobstore/imageservice 조합과 유사한 API를 작성하여 사용자가 업로드 한 사진을 호스팅하고 제공하는 것입니다.

저는 node.js를 처음 접했고 일부 문서를 읽고 비디오를보고 지금까지 노드와 놀았습니다. 나는 기울고 있어요

  • 호스트
  • 효율적인 캐시 시스템 순간

를 통해 서비스를 제공 사진 : 나는에 최상의 솔루션이 될 것입니다 무슨에 몇 가지 통찰력을 가지고 싶습니다 그림을 저장하고 캐시하기위한 redis로 향해서, 나는 아직 모든 노드 모듈을 보지 못했다.

이러한 응용 프로그램을 위해 선택한 아키텍처는 무엇입니까?

+0

이것은 너무 크고 너무 모호한 질문이며 합리적으로 대답 할 수 없습니다. 기본적으로 "전에 사용 해본 적이없는 것들을 사용하여 웹 사이트를 만드는 방법"을 묻습니다. – cHao

+0

나는 stackoverflow에 솔직히 더 많은 애매하고/어려운 질문이 방법이 있다고 생각합니다. 나는 노드에 경험이있는 사람이 그 문제에 답할 때 어려움을 겪지 않으며, 적어도 그 문제에 대한 경험에 대한 피드백을 제공하지 않습니다. –

+0

여기에는 많은 질문이 있습니다. Amazon AWS 또는 Windows Azure와 같은 클라우드를 사용하고 있습니까? 확장 요구 사항은 무엇입니까? 클라우드 스토리지/CDN으로 롤링하는 대신 이미지를 캐시 할 이유가 있습니까? 이러한 질문에 대한 답은 당신에게 더 나은 방향을 제시하는 데 도움이됩니다. –

답변

3

node.js 인프라와 관련하여 응용 프로그램을 빌드하려면 express framework을 사용하는 것이 좋습니다. 일부 이미지 처리 기능이 필요한지 여부는 알 수 없지만 imagick 라이브러리를 래핑하는 데는 node module이 있습니다. 계속 개발중인 것처럼 보입니다. 이미 사용 가능한지 확실하지 않습니다. 어쨌든 노드 단일 스레드 이벤트 루프에서 이미지 처리 코드를 실행하지 않아야합니다.

신청서의 업로드 부분은 node-formidable 또는 this question으로 시작합니다.

이제 저장소 자체에 대해 Redis는 많은 양의 작은 개체를 저장하는 데는 효율적이지만 대형 개체를 저장할 수는 없습니다. 최근 Redis 버전은 좋은 범용 메모리 할당자인 jemalloc을 기반으로하지만, Redis로 큰 객체를 저장하면 내부 조각화가 발생합니다. Redis에는 memcached와 같은 슬랩 할당자가 없습니다.

그래서 Redis에서는 이미지를 저장하지 않지만 메타 데이터 및 관련 색인 (파일 경로, 소유자, 크기, 태그 등) 만 저장합니다. 이미지는 파일 시스템 IMO에 직접 저장하는 것이 좋습니다. 훌륭한 node-redis 모듈이 node.js의 Redis에 액세스합니다.

캐시가 실제로 필요한지 잘 모르겠습니다. 이미지가 파일 시스템에 저장되어 있다면 파일 시스템 캐시를 사용하여 I/O를 피할 수 있습니다. Node는 파일 작업을 libeio 스레드 풀에 위임하여 주 이벤트 루프를 막지 않도록합니다. Redis와 함께 이미지 컨텐츠 캐싱이 여기에 어떤 이점도 가져다 줄 것이라고 저는 확신하지 못합니다. 먼저 파일 시스템 캐시를 시도하고 필요한 경우에만 더 복잡한 캐시를 조사합니다.

+0

고마워, 나는 이미 무서운 시도와 노드 redis 시도하고 그들은 내 요구에 잘 맞았다. 캐시에 관해서는, 나는 당신의 말을 따를 것입니다. 이미 'fs'를 사용하여 실제로 좋은 벤치 마크를 얻은 것으로 보입니다. 이미 appengine 이미지 서비스와 동등한 수준이며, 전혀 의심하지 않습니다. –

+0

Didier는 프로젝트에 대한 램 기반 이미지 캐시를 고려하고있었습니다. 나는 더 잘 맞는 것을 찾기 위해 조금 더 깊이 파야 할 것입니다. 파일 기반 솔루션은 읽기 -> 프로세스 -> 쓰기의 경우 프레임 당 약간 느립니다. –

관련 문제