如果没有插件,Heroku上的redis可能吗?

时间:2013-02-18 03:43:52

标签: php heroku redis

我正在考虑将Heroku用于使用Redis的PHP应用程序。我见过redis的各种插件。例如,使用Redis To Go,您可以在PHP代码中使用环境变量$ _ENV ['REDISTOGO_URL']作为Redis服务器的URL。

这些附加产品中的大多数都有自己的定价方案,我想避免。我对heroku如何工作有点困惑。有没有办法可以在没有插件的情况下在我自己的Dynos上安装Redis?

例如,有一个工作器dyno充当服务器,另一个充当客户端吗?如果可能的话,我将如何进行:

  1. 在Dyno上安装和运行redis服务器?这和它一样吗?     安装在任何其他unix盒子上?我可以ssh到它并安装我想要的任何东西吗?

  2. 让一个Dyno连接到     另一个通过TCP的IP /端口?工人dynos有他们自己的     我可以使用可引用的IP地址或命名的URL吗?我能以某种方式从PHP动态获取它们吗?

  3. redis客户端的php代码假设有一个主机和端口可以连接到,但不知道它会是什么?

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

2 个答案:

答案 0 :(得分:10)

在dyno上运行redis是一个有趣的想法。您可能需要创建一个redis buildpack,以便您的dynos可以下载并运行redis。作为"redis has no dependencies other than a working GCC compiler and libc",这在技术上应该是可行的。

但是,您可能遇到以下问题:

  1. Heroku dynos没有静态IP地址

      

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

    即使您在dyno上设置并运行Redis,我也不知道找到该dyno实例并发送redis请求的方法。这意味着您的Redis服务器可能必须在与Web服务器/主应用程序相同的dyno上运行。

    表示如果您尝试通过创建更多网络动态扩展您的应用,您还将创建更多本地redis实例。他们之间不会共享数据。这并不是一个特别可扩展的设计,但如果你的应用程序足够小,只需要一个网络动态,它就可以工作。

  2. Heroku dynos有一个短暂的文件系统

      

    "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将其RDB文件和AOF日志写入磁盘。你需要定期将它们备份到某个地方,以便在你的dyno重启后可以获取和恢复。请参阅documentation on Redis persistence

  3. Heroku dynos经常重启

      

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

    每次dyno启动和恢复数据时,您都需要能够启动redis服务器。

  4. Heroku dynos有512MB RAM

      

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

    如果您的Redis服务器与您的Web服务器在同一个dyno上运行,请减去主应用程序所需的RAM。你需要多少Redis内存?

    以下是尝试估算和跟踪Redis内存使用的一些问题:

  5. -

    总体而言:我建议您阅读12 Factor Apps以了解更多有关heroku预期应用模式的信息。

    简短版本是dynos旨在成为独立的工作人员,可以轻松创建和丢弃以满足需求,并且dynos访问各种资源来读取或写入数据并为您的应用程序提供服务。 redis实例是资源的示例。正如您从上面的项目中看到的那样,通过使用redis附加组件,您可以获得保证静态,稳定和可访问的内容。

    阅读材料:

    1. http://www.12factor.net/ - 具体为ProcessesServices
    2. The Heroku Process Model
    3. Heroku Blog - The Process Model

答案 1 :(得分:-1)

redis有一个客户端服务器架构,您可以将它安装在一台计算机上(在您的情况下是dyno)并从任何客户端访问它。

有关图书馆的更多帮助,请参阅this link 或者你可以通过这个Redis documentaion这是一个使用Redis广告数据库和PHP实现twitter克隆的简单案例研究