2013-02-18 16 views
8

Rozważam użycie Heroku dla aplikacji PHP, która używa Redis. Widziałem różne dodatki do redis. Na przykład w Redis To Go możesz użyć zmiennej środowiskowej $ _ENV ['REDISTOGO_URL'] w swoim kodzie PHP, jako adresu URL serwera Redis.Czy Redis na Heroku jest możliwy bez dodatku?

Większość z tych dodatków ma własne schematy cenowe, których chciałbym uniknąć. Jestem nieco zdezorientowany, jak działa heroku. Czy istnieje sposób, w jaki mogę zainstalować Redis na swoich własnych Dynach bez dodatków?

Na przykład, czy masz jedną maszynę pracującą jako serwer, a drugą działającą jako klient? Jeśli to możliwe, jak bym się obejrzał:

  1. Instalowanie i uruchamianie serwera redis na urządzeniu Dyno? Czy to jest to samo, co instalowanie na jakimkolwiek innym pudełku unixowym? Czy mogę po prostu ssh do niego i zainstalować, co chcę?

  2. Czy jedno urządzenie Dyno łączy się z numerem za pomocą protokołu IP? Czy dynamiczne urządzenia robocze mają swoje własne adresy IP lub nazwane adresy URL, których mogę używać? Czy mogę w jakiś sposób uzyskać je dynamicznie z PHP?

Kod PHP dla klienta redis zakłada host i port, z którymi można się połączyć, ale nie mają pojęcia, co by to było?

$redis = new Predis\Client(array(
     "scheme" => "tcp", 
     "host" => $host, //how do i get the host/port of a dyno? 
     "port" => $port)); 

Odpowiedz

10

bieganie Redis na hamowni jest interesującym pomysł. Prawdopodobnie będziesz musiał utworzyć redis buildpack, aby Twoje dynos mogły pobierać i uruchamiać redis. Jako "redis has no dependencies other than a working GCC compiler and libc" powinno to być technicznie możliwe.

Jednakże, oto niektóre problemy mogą napotkasz:

  1. Heroku hamowni nie ma statycznego adresu IP

    "dynos don’t have static IP addresses .. you can never access a dyno directly by IP"

    Nawet jeśli założyć i uruchomić Redis na dyno Nie jestem świadomy sposobu, aby zlokalizować tę instancję dynna i wysłać go żądań redis. Oznacza to, że twój serwer Redis będzie prawdopodobnie musiał działać na tym samym terminalu, co twój serwer sieciowy/główna aplikacja.

    Ten oznacza, że ​​jeśli spróbujesz przeskalować swoją aplikację, tworząc więcej dynamów internetowych, będziesz także tworzyć więcej lokalnych instancji redis. Dane nie będą dzielone między nimi. Nie wydaje mi się to szczególnie skalowalnym projektem, ale jeśli Twoja aplikacja jest wystarczająco mała, aby wymagać tylko jednego dyna internetowego, może działać.

  2. Heroku hamowni mieć efemeryczny system plików,

    "no files that are written are visible to processes in any other dyno and any files written will be discarded the moment the dyno is stopped or restarted"

    Redis domyślnie zapisuje swój plik RDB i zalogować AOF na dysku. Będziesz musiał regularnie tworzyć kopie zapasowe, abyś mógł je pobrać i przywrócić po ponownym uruchomieniu gry. Zobacz documentation on Redis persistence.

  3. Heroku hamowni restartem są często

    "Dynos are cycled at least once per day, or whenever the dyno manifold detects a fault in the underlying hardware"

    Musisz być w stanie uruchomić swój serwer Redis każdym uruchomieniu dyno i przywracania danych.

  4. Heroku hamowni posiada 512 MB pamięci RAM

    "Each dyno is allocated 512MB of memory to operate within"

    Jeśli serwer Redis działa na tej samej hamowni jako serwer WWW, odejmowanie RAM potrzebnej do głównej aplikacji. Ile pamięci Redis potrzebujesz?

    Oto kilka pytań, próbując oszacować i śledzić wykorzystanie pamięci Redis:

-

Ogólnie: sugeruję czytanie w górę na 12 Factor Apps, aby dowiedzieć się nieco więcej o zamierzonym modelu aplikacji Heroku.

Krótka wersja jest taka, że ​​dynos mają być niezależnymi pracownikami, które można łatwo tworzyć i odrzucać w celu zaspokojenia popytu, a dynosom dostęp do różnych zasobów w celu odczytu lub zapisu danych i obsługi aplikacji. Instancja redis jest przykładem zasobu. Jak widać z powyższych elementów, za pomocą dodatku redis otrzymujesz coś, co gwarantuje stabilność, stabilność i dostępność.

materiał Reading:

  1. http://www.12factor.net/ - specjalnie Processes i Services
  2. The Heroku Process Model
  3. Heroku Blog - The Process Model
+0

Dziękuję za wszystkie linki, to jest bardzo pomocne – user1385729

+0

@ user1385729 Cieszę się, że pomaga! :) Zapraszam do zadawania więcej pytań. – culix

+0

@ user1385729 Dziękuję za pytanie - skłoniło mnie to do myślenia o tym, jak używać heroku na kilka różnych sposobów – culix

-1

Redis ma architekturę klient-serwer można go zainstalować na jednym komputerze (w przypadku hamowni) i do niego dostęp z dowolnego klienta.

dla bardziej pomaga na bibliotekach można odnieść this link czy można przejść przez ten Redis documentaion który jest prosty case study z wdrożenia klon Twitterze Korzystanie z bazy reklam Redis i PHP

+0

Dzięki, pytanie jest więcej o tym, jak skonfigurować program Client/Server na heroku. Część Redis sama myślę, że rozumiem. – user1385729

+0

domyślny port dla redis to 6379, który można znaleźć w pliku redis.conf, a host ip to ip twojego serwera (Dyno w twoim przypadku), tj. Ip serwera, na którym uruchamiasz binarny "redis-server". –

Powiązane problemy