Att köra redis på en dyno är en intressant idé. Du kommer förmodligen att behöva skapa ett redis buildpack så att dina dynos kan ladda ner och köra redis. Eftersom "redis inte har några andra beroenden än en fungerande GCC-kompilator och libc" borde detta vara tekniskt möjligt.
Men här är några problem du kan stöta på:
-
Heroku dynos har ingen statisk IP-adress
"dynos har inga statiska IP-adresser .. du kan aldrig komma åt en dyno direkt via IP"
Även om du ställer in och kör Redis på en dyno är jag inte medveten om ett sätt att hitta den dyno-instansen och skicka den redis-förfrågningar. Detta innebär att din Redis-server förmodligen måste köras på samma dyno som din webbserver/huvudapplikation.
Detta också betyder att om du försöker skala din app genom att skapa fler webbdynor kommer du också att skapa fler lokala redis-instanser. Data kommer inte att delas mellan dem. Det här verkar inte vara en särskilt skalbar design, men om din app är tillräckligt liten för att bara kräva en webbdyno kan det fungera.
-
Heroku dynos har ett tillfälligt filsystem
"inga filer som är skrivna är synliga för processer i någon annan dyno och alla skrivna filer kommer att kasseras i samma ögonblick som dynon stoppas eller startas om"
Som standard skriver Redis sin RDB-fil och AOF-logg till disken. Du måste regelbundet säkerhetskopiera dessa någonstans så att du kan hämta och återställa efter att din dyno har startat om. Se dokumentationen om Redis persistens.
-
Heroku dynos startas om ofta
"Dynos cyklas minst en gång per dag, eller när dyno-grenröret upptäcker ett fel i den underliggande hårdvaran"
Du måste kunna starta din redis-server varje gång dynon startar och återställa data.
-
Heroku dynos har 512 MB RAM
"Varje dyno är tilldelad 512 MB minne att arbeta inom"
Om din Redis-server körs på samma dyno som din webbserver, subtrahera RAM-minnet som behövs för din huvudapp. Hur mycket Redis-minne behöver du?
Här är några frågor som försöker uppskatta och spåra Redis minnesanvändning:
- Redis:Databasstorlek till minnesförhållande?
- Profilering av Redis minnesanvändning
--
Totalt: Jag föreslår att du läser upp 12 Factor Apps för att förstå lite mer om Herokus avsedda applikationsmodell.
Den korta versionen är att dynos är tänkta att vara oberoende arbetare som enkelt kan skapas och kasseras för att möta efterfrågan, och att dynos har tillgång till olika resurser för att läsa eller skriva data och betjäna din app. En redis-instans är ett exempel på en resurs. Som du kan se av objekten ovan, genom att använda ett redis-tillägg får du något som garanterat är statiskt, stabilt och tillgängligt.
Läsmaterial:
- http://www.12factor.net/ - specifikt processer och tjänster
- Heroku-processmodellen
- Heroku Blog - Processmodellen