2013-12-23 4 views
2

그래서 내 친구는 Heroku에서 인스턴스가 계속 유지된다고 말했습니다 (어휘가 맞는지는 모르겠지만 모든 사용자가 같은 인스턴스를 공유 함을 암시합니다) .Heroku 인스턴스는 영구적입니까? (또는 dict/array를 캐시로 사용할 수 있습니까?)

따라서 app.py이 있고 인스턴스가 실행되면 모든 사용자가 해당 인스턴스를 공유합니다. 이는 우리가 dict을 작은 응답을 저장하기위한 임시 캐시로 사용할 수 있음을 의미합니다.

예를 들어 API를 제공하는 경우 this과 같은 캐시를 정의한 다음 use it을 정의 할 수 있습니다.

어떻게 사실입니까? 나는 이것을 보았지만 아무 것도 찾을 수 없었다.

나는 1 dyno에서 heroku에 연결된 API를 배포했으며, 1 초당 요청 수가 적 으면 서비스를 제공하는 데 100 초 이상 걸렸습니다. 그래서 제 이해는 캐시가 작동하지 않는다는 것입니다. (새로운 유물에 따르면 대다수의 시간이 request queueing 일 것임을 여기에 유의하는 것이 유용 할 수 있습니다.)

+3

캐시를 사용하려면 redis 또는 memcached를 사용하십시오. Werkzeug에는 캐시 옵션이 있습니다. 그러나 파일에 저장하는 것은 옵션이 아닙니다. Heroku 파일 시스템 임시, 즉 파일 시스템은 읽기 및 쓰기 후에 달라집니다. – Kracekumar

+0

위의 kracekumar와 동의합니다. 게다가, 파일 캐싱은 항상 메모리 캐싱보다 훨씬 느릴 것이기 때문에 나는 확실히 memcached를 살펴볼 것이다. – iandouglas

답변

10

Heroku Devcenter는 Heroku architecture에 대한 여러 기사를 가지고 있습니다.

프로세스는 메모리를 공유하지 않습니다. 또한 코드는 compiled into a slug이고 dyno manager으로 배포되도록 최적화되어 있습니다. 간단히 말해서, 어떤 머신이 코드를 실행할 지조차 알지 못한다는 뜻입니다. 이론적으로 5 명의 사용자가 귀하의 앱을 친다면 5 개의 서로 다른 컴퓨터와 프로세스로 라우팅 될 수 있습니다.

앱이 단일 웹 dyno를 실행하는 경우 해당 웹 dyno는 잠자기 상태가됩니다. 웹 다이 노스가 잠자는 것을 방지하려면 하나 이상의 웹 다이노를 가져야합니다. dyno가 절전 모드로 전환되면 메모리가 해제되고 메모리의 모든 데이터가 손실됩니다.

이렇게하면 접근 방법이 작동하지 않습니다.

일반적으로 Heroku에서는 외부 저장소를 사용해야합니다. 예를 들어 Memcached add-on을 사용하고 캐시 정보를 Memcached에 저장할 수 있습니다.

또한 파일 시스템을 캐시로 사용하지 마십시오. Memcached보다 속도가 느릴뿐 아니라 Cedar 스택 파일 시스템 should be considered ephemeral도 있기 때문에.

+0

그레이트 대답; 특히 웹 dyno 부분. +1. –

+0

하지만 memcached는 모두 동일한 메모리를 사용합니다 (예 : 5 대의 다른 컴퓨터)? 아니면 클라우드를 "가상"메모리로 사용하는 memcached 애드온입니까? –

+1

@KaranGoel memcached *는 외부 서비스이므로 공유됩니다. 다이노스의 기억을 사용하지 않습니다. – aledalgrande

관련 문제