问题标签 [google-cloud-memorystore]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
networking - 无法从 Compute Engine Vm 实例 (GCP) 连接到 Memorystore
我有一个在区域 A 中运行的内存存储,我有一个在区域 B 中运行的计算引擎虚拟机。我无法从我的虚拟机(B)连接到内存存储(A)。
我正在尝试通过 telnet 来自我在区域 B 中的 VM 的 memorystore 端口(即 6379)的连接。
我已阅读 Google Docs并发现您只能从位于同一区域并使用与您的实例相同的 VPC 网络的 Compute Engine VM 实例连接到您的 Redis 实例。
但是为什么会这样呢?无法从在多个区域中运行的 VM 连接到内存存储
google-cloud-platform - 无法连接到 GCP 中的 Redis 实例
我在 GCP 上创建了一个实例,但我无法访问它。这与此类似,但建议的解决方案对我不起作用: 无法远程登录到 GCP MemoryStore
我试过 telnet 到它,我在同一个项目和区域,但显然我需要在同一个网络中,因为它是一个私有 ip,但是如果你想使用云 shell 连接怎么办?另外,在我的本地机器上运行的应用程序如何访问它?我还包括了一个防火墙规则,以确保允许传入连接。
timeout - memorystore 的默认超时和保持活动设置
我们计划从我们自己托管的 redis 实例迁移到 Google Cloud Memorystore。但似乎有一件事我在文档中找不到任何答案:
- 默认内存存储超时设置
- 默认 tcp 保持活动设置
我们在应用程序的一部分中存在一些连接出血(由于 Kubernetes 中的可抢占节点和 oom 崩溃),需要确保将这些设置为一些合理的值。
它们不在“可修改”之下:https ://cloud.google.com/memorystore/docs/reference/redis-configs#modifiable_configuration_parameters
但也未在“不可修改”下列出:https ://cloud.google.com/memorystore/docs/reference/redis-configs#unmodifiable_configuration_parameters
我怎样才能弄清楚这些设置(和其他设置)?(CONFIG
是一个被阻止的命令)
shared-memory - 在 Cloud Run 中将共享缓存对象存储在哪里?
我正在使用 Cloud Run 创建数据提取管道。每次通过 Pub Sub 将文件放入 GCS 存储桶时,都会调用我的 Cloud Run api。我需要加载一些元数据,其中包含我正在摄取的数据的文本。此元数据很少更改。我显然不想在每次执行时将它重新加载到内存中。我最好的选择是什么?到目前为止,我能够研究的是:
选项1
如果在每个服务请求上重新创建对象的成本很高,您也可以将对象缓存在内存中。将其从请求逻辑转移到全局范围会带来更好的性能。 https://cloud.google.com/run/docs/tips#run_tips_global_scope-java
在此链接给出的示例中,是否仅在冷启动时调用了一次重计算函数?如果我需要在元数据更新时偶尔重新触发此功能怎么办。我还发现以下信息令人不安,因为它似乎说不能保证其他实例会重用该对象。
在 Cloud Run 中,您不能假设在请求之间保留服务状态。但是,Cloud Run 确实会重用单个容器实例来服务持续的流量,因此您可以在全局范围内声明一个变量,以允许在后续调用中重用其值。无法提前知道任何单个请求是否会从这种重用中受益。
选项 2
使用 Redis 或 Cloud Memory Store 之类的东西,只要有更改,就会由云功能更新。并且所有的云运行 api 实例都从 Redis 中拉取元数据信息。这会比选项 1 性能更低还是更高?这还有其他不利方面吗?
如果还有其他更好的方法可以做到这一点,我会非常感兴趣。
更新 1:我想了更多,因为我的元数据对于每个租户都是不同的,而且我的云运行代码的每次调用都会为一个租户摄取一个文件,加载所有租户是个坏主意每次执行时的元数据,即使它被缓存。不过,我可能会在每个租户的项目中运行单独的云运行。
google-cloud-firestore - Cloud Memorystore 和 FireStore 是缓存我计算的查询结果的良好组合吗?
我有个问题。我有一个从 Firestore 计算聚合数据的查询(在时间戳 y 之后使用键 z 从用户 x 获取所有文档)。结果成百上千的文档。
然后我从这个数据集中计算每日、每周、每月和每年的值(AVG、SUM、MAX 等)。结果是一个对象:
我想保存这个对象,这样我就不用每次都做查询和计算了。
- 将其保存到 Cloud Memorystore 是否有价值 - 相同数据的重新计算率约为每天用户调用我的服务的 10-100 次,并且此数据需要存在
没有使用 Memorystore 及其用法的经验...
node.js - 内存存储的最佳方法(GCP/云内存存储上的多区域)
我正在用 react-native 构建一个带有 nodejs 后端的聊天应用程序。我正在使用谷歌云平台。
我正在使用 websockets 在应用程序和后端之间创建连续连接。因为用户可以向特定客户端发送消息,所以我将套接字存储在 nodejs 中:
请注意,这是一个简化的示例。
问题是:我计划在负载均衡器后面的不同区域中拥有多个实例。当您连接到特定实例时,其他实例无法访问套接字对象。因此,当 2 个不同的用户连接到 2 个不同的实例时,他们无法互相聊天。
为了解决这个问题,我正在考虑将套接字存储在 redis 缓存(云内存存储)中。但是redis实例必须和VM实例在同一个区域。但就像我说的,我在多个区域有多个 VM 实例。
我的问题是:
1)这个解决方案是最好的方法吗?还是有其他可能性,例如将套接字存储在数据库中?
2)如何解决VM实例不在同一个区域时无法连接到redis实例的问题。我是否应该为我使用的每个区域(asia-east1、europe-north1、us-central1)创建一个 redis 实例,并镜像这 3 个 redis 实例,使它们都具有相同的内容?
另一方面,如果您有完全不同的方法,请告诉我!我还在学习 nodejs 和谷歌云平台,我对新的输入持开放态度。
编辑:所有实例(实例组)都在同一个 VPC 中。
编辑 2:如果我在与 redis 实例相同的区域中创建一个 VM,并将其用作代理怎么办?会不会有性能问题?
编辑 3:我通过使用 haproxy 创建代理服务器使其工作。该实例与 redis 实例位于同一区域。一个问题:会不会有任何性能问题?这真的是要走的路吗?
google-app-engine - Appengine Flexible with MemoryStore 上的 Pyramid 可能存在内存泄漏
我们正在使用金字塔将我们的后端从 appengine 标准(和“webapp2”框架)迁移到灵活。我们有一个看似没有很多问题的概念证明。它在这个早期阶段所做的只是接受来自第三方的请求(“ping”),然后将任务启动到另一个内部服务以获取一些数据。它与谷歌的 MemoryStore 连接以缓存用户 ID,以表明我们已经在过去 6 小时内获取(或尝试获取)该用户数据。
说到 6 小时,似乎每 6 小时左右,Flexible 实例上的内存使用量似乎达到了一个临界点,然后可能会刷新,一切又恢复正常。此实例设置为具有 512MB 内存,但就像发条一样,它在大约 800MB 时执行此操作(某种宽限使用?或者这些不能设置为低于 1GB)
很明显,它的移动是多么缓慢,记忆并没有像应该的那样经常被清除。发生这种情况时,实例上的延迟也会激增。
我不确定调试这样的东西有什么用,所以我会尽力展示我能做的。
Appengine YAML 文件:
Dockerfile(作为自定义运行时灵活需要它)
为什么要定制?在默认的 Python 运行时,我无法让它工作。这pip install -e .
似乎是需要的。
然后,在根__init__
我有:
也许这么早就定义了与 MemoryStore 的连接是问题所在?缓存存储:
在实际请求本身上,在 import 之后from externalping import cachestore
,我只是调用上面显示的那些方法:cachestore.client.get(user['ownerId'])
据我所知,这似乎是谷歌文档所说的实现这一点的方式。唯一的区别是我在它周围放了一个包装器。
google-cloud-platform - 如果内存超过 90%,则 GCP 刷新 redis
触发触发器时,有没有办法刷新我的 GCP Redis?
在我的具体情况下,我使用 Google StackDriver 指标来监控并获得通知。我希望当我的 Redis 内存超过 90% 时,它会自动刷新。有没有办法做到这一点?
google-app-engine - 如何在 GAE 中手动管理 Memorystore Redis 中的密钥?
我在 Google App Engine 中使用我的 Nodejs 设置了 Memorystore Redis。我想知道如何访问我的 redis 实例以便手动管理(如del
)密钥?
有从 Compute Engine 访问的这个文档,但是从 GAE 呢?
django - 在 GCP 中连接 redis 和 django 的问题
我已经使用 GCP Memorystore 部署了一个 Redis 实例。我还有一个使用 App Engine 部署的 django 应用程序。但是,我在连接这两个时遇到了问题。两者都部署在同一个时区。我使用的包是 django_redis。当我尝试登录管理页面时,我遇到了连接错误。错误是:
在 settings.py 我使用:
注意:使用本地安装的 Redis 并设置为 localhost,一切正常。