大多数这些附加组件都有自己的定价方案,我想避免.我对heroku如何工作有点困惑.有没有办法可以在没有插件的情况下在我自己的Dynos上安装Redis?
例如,有一个工作器dyno充当服务器,另一个充当客户端吗?如果可能的话,我该怎么做:
>在Dyno上安装和运行redis服务器?这和它一样吗?
安装在任何其他unix盒子上?我可以ssh到它并安装我想要的任何东西吗?
>有一个Dyno连接到
另一个通过TCP的IP /端口?工人dynos有他们自己的
我可以使用可引用的IP地址或命名的URL?我能以某种方式从PHP动态获取它们吗?
redis客户端的PHP代码假设有一个可以连接的主机和端口,但不知道它会是什么?
$redis = new Predis\Client(array( "scheme" => "tcp","host" => $host,//how do i get the host/port of a dyno? "port" => $port));
但是,以下是您可能遇到的一些问题:
> Heroku dynos没有静态IP地址
07002
即使您在dyno上设置并运行Redis,我也不知道找到该dyno实例并向其发送redis请求的方法.这意味着您的Redis服务器可能必须与您的Web服务器/主应用程序在同一个dyno上运行.
这也意味着如果您尝试通过创建更多Web dynos来扩展应用程序,您还将创建更多本地redis实例.他们之间不会共享数据.这并不是一个特别可扩展的设计,但如果您的应用程序足够小,只需要一个网络动态,它可能会起作用.
> Heroku dynos有一个短暂的文件系统
07003
默认情况下,Redis将其RDB文件和AOF日志写入磁盘.你需要定期将它们备份到某个地方,这样你就可以在你的dyno重新启动后获取和恢复.见documentation on Redis persistence.
> Heroku dynos经常重启
07005
每次dyno启动和恢复数据时,您都需要能够启动redis服务器.
> Heroku dynos拥有512MB的RAM
07006
如果您的Redis服务器与Web服务器在同一个dyno上运行,请减去主应用程序所需的RAM.你需要多少Redis内存?
以下是一些试图估算和跟踪Redis内存使用的问题:
> Redis: Database Size to Memory Ratio?
> Profiling Redis Memory Usage
–
总体而言:我建议您阅读12 Factor Apps以了解更多有关heroku预期应用程序模型的信息.
简短的版本是dynos旨在成为独立的工作者,可以轻松创建和丢弃以满足需求,并且dynos访问各种资源来读取或写入数据并为您的应用程序提供服务. redis实例是资源的示例.正如您从上面的项目中看到的那样,通过使用redis附加组件,您可以获得保证静态,稳定和可访问的内容.
阅读材料:
> http://www.12factor.net/ – 特别是Processes和Services
> The Heroku Process Model
> Heroku Blog – The Process Model