gpt4 book ai didi

php - 如果没有插件,Heroku 上的 redis 是否可行?

转载 作者:IT王子 更新时间:2023-10-29 05:56:24 26 4
gpt4 key购买 nike

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

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

例如,让一个 worker dyno 充当服务器,另一个充当客户端?如果可能的话,我会怎么做:

  1. 在 Dyno 上安装和运行 redis 服务器?这是否与 安装在任何其他 unix 机器上?我可以直接连接到它并安装我想要的任何东西吗?

  2. 连接一个 Dyno 另一个通过 TCP 使用 IP/端口? worker 测功机有自己的吗 我可以使用的可引用 IP 地址或命名 URLS?我能以某种方式从 PHP 动态获取它们吗?

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

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

最佳答案

在 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 日志写入磁盘。您需要定期将它们备份到某处,以便您可以在测功机重启后获取和恢复。查看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 内存

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

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

    这里有一些试图估计和跟踪 Redis 内存使用的问题:

--

总体:我建议继续阅读 12 Factor Apps进一步了解 heroku 的预期应用程序模型。

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

阅读 Material :

  1. http://www.12factor.net/ - 特别是 ProcessesServices
  2. The Heroku Process Model
  3. Heroku Blog - The Process Model

关于php - 如果没有插件,Heroku 上的 redis 是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com