nodejs 写了一个 map 做内存缓存,但是使用 pm2 启动集群模式,就会导致每个都有自己的 map 缓存,
这就导致数据不一致了,这怎么解决?
1
90928yao 2019-06-11 18:27:17 +08:00
redis 发布订阅 http 接口通知
|
3
WittBulter 2019-06-11 18:48:02 +08:00
集群模式每个都是独立的,应该没有状态共享,否则就 **不应该** 用集群模式。(业务应该用 redis 等第三方的共享状态)
如果你强行要这么做,可以用 rpc 通信,参考 dnode 项目。 |
4
yixiang 2019-06-11 18:48:59 +08:00
改用 cluster 然后互传信息。
或者内存映射一部分到磁盘,缓存写入这个磁盘里一个 json 文件。 上 redis 或类似的玩意其实是最简单直接的。 |
5
chenqh 2019-06-11 19:36:33 +08:00
还是 redis 把,简单粗暴
|
6
rizon OP @WittBulter #3
@yixiang #4 @chenqh #5 1g 内存的机器不够用了快。 那我换个思路,有没有办法让指定链接的请求固定只走集群中的一个节点? 因为我只是对其中一个特定的请求做了缓存,所以这个请求可以有办法让他固定只走一个节点吗? |
7
yangg 2019-06-11 21:11:05 +08:00 via iPhone
Haproxy 这样就用不了集群模式了
|
9
runtu2019 2019-06-11 21:44:37 +08:00
写个配置文件或者数据库保存集群主机的 ip 地址或者访问地址,明确哪台机器为主是可以写的
写个 json 接口,可以读取缓存内容和提交缓存内容 更新缓存的是时候,根据配置文件访问接口提交到可以写的主机内 其他的主机根据配置文件的 ip 和接口做定时同步,同时这个动作可以作为心跳检查,接口获取不了就切换主机 但是你这么做不觉得累的慌吗,redis 不好吗 |
10
rizon OP @runtu2019 #9 我是一台机器,使用 pm2 开的 nodejs 的 cluster 模式,所以 ip 和端口号是同一个。我想要明确的调用其中一个是不是做不到?
|
11
jybox 2019-06-11 22:35:23 +08:00
Redis 本身也就 10M 内存,而且集中在 Redis 而不是每个进程存一份的话,应该是更省内存的。
|
13
jybox 2019-06-11 22:47:31 +08:00
确实,但我还是更推荐 Reids,功能多太多了
|
14
version 2019-06-11 22:52:45 +08:00 via iPhone
优先选择 redis,没数据也占用 10m 内存都不到,pm2 集群部署不就是多进程,只能用第三方来处理,而且 1 核的主机开集群,真的会比之前快么,楼主应该不是后端开发吧
|
15
gzlock 2019-06-11 22:54:22 +08:00
用文本文件(json)或者 sqlite 就可以了啊
|
16
kawana 2019-06-11 22:56:37 +08:00
> 有没有办法让指定链接的请求固定只走集群中的一个节点
可以了解一下 nginx 的负载均衡用 **一致性哈希** |
17
joouis 2019-06-11 23:32:04 +08:00 via Android
RPC 或 Redis 吧
|
18
rizon OP @version #14 我是后端开发哈,单点开集群的作用似乎是没啥用。。。。算是为以后多点部署做准备吧。。。
已经换了 memcache 了,docker 版,初始化内存占用 2-3m。就是个分布式共享,memcache 足够了。 |
19
sunmonster 2019-06-12 08:49:01 +08:00
现在所谓的轻量级和重量级都是按功能算的吗。。。
|
20
rizon OP @sunmonster #19 哈哈 本人小白,不专业,见笑哈。这东西应该怎么判断?
|