sql >> Database >  >> NoSQL >> Redis

Is redis op Heroku mogelijk zonder een add-on?

Redis op een dyno uitvoeren is een interessant idee. U zult waarschijnlijk een redis-buildpack moeten maken zodat uw dyno's redis kunnen downloaden en uitvoeren. Aangezien "redis geen andere afhankelijkheden heeft dan een werkende GCC-compiler en libc", zou dit technisch mogelijk moeten zijn.

Hier zijn echter enkele problemen waar u tegenaan kunt lopen:

  1. Heroku-dyno's hebben geen statisch IP-adres

    "dyno's hebben geen statische IP-adressen.. je hebt nooit rechtstreeks toegang tot een dyno via IP"

    Zelfs als u Redis op een dyno instelt en uitvoert, weet ik geen manier om die dyno-instantie te lokaliseren en redis-verzoeken te verzenden. Dit betekent dat uw Redis-server waarschijnlijk op dezelfde dyno moet draaien als uw webserver/hoofdtoepassing.

    Deze ook betekent dat als u probeert uw app te schalen door meer webdyno's te maken, u ook meer lokale redis-instanties zult maken. Er worden geen gegevens tussen hen gedeeld. Dit lijkt me geen bijzonder schaalbaar ontwerp, maar als je app klein genoeg is om slechts één webdyno nodig te hebben, kan het werken.

  2. Heroku-dyno's hebben een kortstondig bestandssysteem

    "geen bestanden die zijn geschreven zijn zichtbaar voor processen in een andere dyno en alle bestanden die zijn geschreven zullen worden weggegooid op het moment dat de dyno wordt gestopt of opnieuw wordt gestart"

    Standaard schrijft Redis zijn RDB-bestand en AOF-log naar schijf. U moet deze regelmatig ergens back-uppen, zodat u ze kunt ophalen en herstellen nadat uw dyno opnieuw is opgestart. Zie de documentatie over de persistentie van Redis.

  3. Heroku-dyno's worden vaak opnieuw opgestart

    "Dyno's worden minstens één keer per dag gefietst, of wanneer het dyno-spruitstuk een fout in de onderliggende hardware detecteert"

    U moet uw redis-server elke keer dat de dyno start, kunnen starten en de gegevens kunnen herstellen.

  4. Heroku-dyno's hebben 512 MB RAM

    "Elke dyno krijgt 512 MB geheugen toegewezen om binnen te werken"

    Als uw Redis-server op dezelfde dyno draait als uw webserver, trekt u het RAM-geheugen af ​​dat nodig is voor uw hoofdapp. Hoeveel Redis-geheugen heb je nodig?

    Hier zijn enkele vragen om het geheugengebruik van Redis in te schatten en bij te houden:

    • Redis:databasegrootte tot geheugenratio?
    • Profilering van geheugengebruik in Redis

--

Algemeen: Ik raad aan om 12 Factor Apps te lezen om wat meer te weten te komen over het beoogde toepassingsmodel van Heroku.

De korte versie is dat dyno's bedoeld zijn als onafhankelijke werknemers die gemakkelijk kunnen worden gemaakt en weggegooid om aan de vraag te voldoen, en dat dyno's toegang hebben tot verschillende bronnen om gegevens te lezen of te schrijven en uw app te bedienen. Een redis-instantie is een voorbeeld van een resource. Zoals je kunt zien aan de hand van de bovenstaande items, krijg je door een redis-add-on te gebruiken iets dat gegarandeerd statisch, stabiel en toegankelijk is.

Leesmateriaal:

  1. http://www.12factor.net/ - specifiek Processen en Services
  2. Het Heroku-procesmodel
  3. Heroku Blog - Het procesmodel


  1. Wat is een goede databasekeuze voor een kleine .NET-toepassing?

  2. MongoDB $binarySize

  3. Groepeer en tel per maand

  4. Hoe communiceer je Web- en Worker-dyno's met Node.js op Heroku?