Rails Unicorn fork 的多个进程之间数据是否可以共享

xiongmaojames · 2015年10月07日 · 最后由 est 回复于 2015年10月08日 · 3610 次阅读

1、我了解到进程之间都是独立的,unicorn fork 的 多个进程 数据共享是如何解决的 2、之前是做 java /c# 的,服务端是多线程的模型,数据都是共用 的,我们只需要关注并发带来的问题 3、这样的问题,我搜了很久,无果!如果你愿意告诉我你解决搜索资料的方法,我非常感谢!

感谢! 这类的讨论和资料我看了一些!仍然有一些困惑,我慢慢道来哈!一、假如我的应用中需要用到验证码,那么我申请一个 hash 对象把验证码都存起来,那会不会 出现 申请的时候,在一个进程里面执行,验证的时候在另一个进程里面执行?
如果是,那就是你说的,需要借助数据库或者文件之类的办法,共享!

那上次我提到的 session 实际上并不是 unicorn 维护的,应该是 rack 在维护 session,所以 session,我写 rails 程序的时候并不需要关心对吧?

感谢,感谢!

验证码问题跟 Session 问题其实可以归类为一个问题,因为 Web 服务基于请求响应模式,在两次请求之间通过 Session 去保存临时状态,所以你的验证码状态可以通过 Session 来保存,而 Rails 为了可以水平扩张,默认使用 Cookie based 的 Session 保存机制,也就是说,Session 存储在 Cookie 中,Cookie 存储在客户端,客户端每次请求的 request 都会附带 Cookie 信息,在 server 端收到 cookie 然后还原出完整的 session,取得前一次请求中的验证码状态,这个机制刚刚好解决了你提出的验证码问题。

关于其他需要共享的状态信息,一般通过数据库或者其他持久化机制去保存。

哦 cookie based

  1. 通过数据共享组件,比如 db,redis 等解决
  2. “服务端是多线程的模型,数据都是共用 的” —— 这就不要吹嘘什么并发了吧。单机都抗住了,都没跨机器。
需要 登录 后方可回复, 如果你还没有账号请 注册新账号