Я изучаю использование Heroku для PHP-приложения, которое использует Redis. Я видел различные дополнения для redis. Например, с Redis To Go вы можете использовать переменную среды $ _ENV ['REDISTOGO_URL'] в вашем PHP-коде, как URL-адрес сервера Redis.
Большинство из этих дополнений имеют свои собственные схемы ценообразования, которые я бы хотел избежать. Я немного смущен тем, как работает героику. Есть ли способ, которым я могу просто установить Redis на свой собственный Dynos без аддонов?
Как, например, есть один рабочий dyno, который действует как сервер, а другой, который действует как клиент? Если возможно, как я буду:
Установка и запуск сервера redis на Dyno? Это то же самое, что и установка на любом другом unix-боксе? Могу ли я просто сшить его и установить все, что захочу?
Подключить ли один Dyno к другому с IP-портом через TCP? У динозавров-работников есть свои собственные ссылочные IP-адреса или URL-адреса, которые я могу использовать? Могу ли я получить их динамически с PHP?
PHP-код для клиента redis предполагает, что есть хост и порт, к которым вы можете подключиться, но понятия не имеете, что это будет?
$redis = new Predis\Client(array( "scheme" => "tcp", "host" => $host, //how do i get the host/port of a dyno? "port" => $port));
Запуск redis на dyno – интересная идея. Вам, вероятно, понадобится создать redis buildpack, чтобы ваши динозаторы могли загружать и запускать redis. Поскольку «redis не имеет зависимостей, кроме рабочего компилятора GCC и libc», это должно быть технически возможным.
Однако, вот некоторые проблемы, с которыми вы можете столкнуться:
У процессоров Heroku нет статического IP-адреса
«dynos не имеют статических IP-адресов .. вы никогда не сможете получить доступ к динамическому прямому IP-адресу»
Даже если вы настроили и запустили Redis на dyno, я не знаю, как найти этот экземпляр dyno и отправить его redis-запросы. Это означает, что ваш сервер Redis, вероятно, придется запускать на том же динамике, что и ваш веб-сервер / основное приложение.
Это также означает, что если вы попытаетесь масштабировать свое приложение, создав больше веб-динамиков, вы также создадите более локальные экземпляры redis. Данные не будут передаваться между ними. Это не поражает меня как особенно масштабируемый дизайн, но если ваше приложение достаточно маленькое, чтобы требовать только один веб-дино, он может работать.
У процессоров Heroku есть эфемерная файловая система
«никакие файлы, которые пишутся, не видны для процессов в любом другом дино, и любые записанные файлы будут отброшены в тот момент, когда dyno будет остановлен или перезапущен»
По умолчанию Redis записывает свой RDB-файл и AOF-журнал на диск. Вам нужно регулярно возвращать их туда, чтобы вы могли извлекать и восстанавливать после перезапуска dyno. См. Документацию о постоянстве Redis .
Часто запускаются динамики Heroku
«Динамики циклически работают не реже одного раза в день, или когда динамический манифест обнаруживает ошибку в базовом оборудовании»
Вы должны будете иметь возможность запускать свой сервер redis каждый раз при запуске диноза и восстановлении данных.
У процессоров Heroku 512 Мбайт ОЗУ
«Каждому динамику выделено 512 МБ памяти для работы в пределах»
Если ваш сервер Redis работает на том же динамике, что и ваш веб-сервер, вычтите RAM, необходимый для вашего основного приложения. Насколько вам нужна память Redis?
Вот несколько вопросов, которые пытаются оценить и отслеживать использование памяти Redis:
–
В целом: я предлагаю читать 12 приложений Factor, чтобы понять немного больше о предполагаемой модели приложения героку.
Краткая версия состоит в том, что dynos предназначены для самостоятельных работников, которые могут быть легко созданы и отброшены для удовлетворения спроса, а также для того, чтобы динозависимый доступ к различным ресурсам для чтения или записи данных и обслуживания вашего приложения. Экземпляр redis является примером ресурса. Как вы можете видеть из приведенных выше пунктов, с помощью дополнения redis вы получаете то, что гарантировано будет статичным, стабильным и доступным.
Материал для чтения:
redis имеет архитектуру клиентского сервера, которую вы можете установить на одном компьютере (в вашем случае dyno) и получить доступ к нему от любого клиента.
для получения дополнительной помощи по библиотекам вы можете сослаться на эту ссылку, или вы можете пройти через эту документацию Redis, которая представляет собой простой пример внедрения клонирования twitter с использованием базы данных объявлений Redis и PHP