部署 Rails 集群部署问题

flowerwrong · 发布于 2015年04月24日 · 最后由 ywencn 回复于 2015年04月26日 · 1829 次阅读
9442

找了一圈, rails集群部署大多给的是单机的worker模式,然后nginx upstream代理. 这样的部署没有session复制问题. 但是集群部署的就会遇到session复制等等问题.如何解决呢? 另外如果多地区部署(小的比如国内各个城市,大到各国)的时候会遇到其他什么问题呢?以及如何解决?求指教.

共收到 10 条回复
96

Cluster未必一定要用session replication。

简单给你列几个解决方案:

  1. Session sticky: 通过在LB 上设置。 优点: 开销最小,实现简单。 缺点:其中一个node down了,session将会直接丢失。

  2. Session replication: 在不同node上进行session同步。 优点: 效率比较高。 缺点: 当架构中node比较多的时候,session replication所带了的traffic将会是你的噩梦, 而且不易于扩展node,因为session replication 需要节点中的node aware所有的其他node节点,增加一台node需要更新其他所有node配置。

  3. Session centralization: 将session存储到一个server上,所有的node都连接到这个server存取session。 优点:node易于管理,扩展。缺点: 一般session server也需要做一个小的cluster.

De6df3

不知道你们在说什么

9442

#2楼 @huacnlee 问题是: 集群的时候如何保持用户状态同步。ruby-china好像没有做集群,我每次ping到的IP相同。如果是集群,我登录了ruby-china,后台有了session数据,nginx做负载均衡(只考虑七层负载情况)的时候会根据策略走不同node,那么如果开始的session没有做同步处理,我访问不同节点时登录就失效了。 @boyishwei 第一种没见过,二在tomcat见得比较多,三是我觉得比较适合rails的,用redis来保存,cluster也还方便。

De6df3

#3楼 @flowerwrong 谁说不同步的

Ruby China 的 Session 是放 Cookie 的(就算放服务端也是没问题的,Memcached, Redis, 其他任意速度快的内存数据库都能解决问题)

A87c18

一般默认都是放cookie,如果考虑全面一点就放内存数据库,cookie里存放session的key就OK了。

15

1 你的负载均衡软件要做到访问者在相当长时间内只能被分到一台 server 上 不要跳来跳去 2 尽量不要用 server 端存储,如果用到,要放到单独的存储中去,这样个server 都能拿到,比如 asp.net 的 session 可以存到 数据库里。

仅仅是登陆问题,cookie 就基本够了。

10401

rails的session默认存储方式就是cookie,所以不存在sesson不同步的问题

96

@flowerwrong Session Sticky就是让同一个user的request始终talk到同一个back end server,一般在LB 上设置, 比如HAProxy, Nginx或者是AWS的ELB都支持Session Sticky.

另外我还少列了一种,

  1. Store Session in Cookie, Rails 就是这样做的, 这样也可以实现一个non-sharing 的deploy architecture,但是缺点是session数据是存储到客户端cookie中,容易被劫持,cookie也存在大小限制(一般也够用),而且只能存放基础类型的数据,比如字符串什么的(如果我想在一个session中存放某个对象就不行)。

根据你项目的规模跟需求,选择不同的架构方式。比如规模,用户群都还不是很大,直接使用Session Sticky, 简单易用,不需额外的代码更改即可支持。复杂点,系统高性能,高安全性,高可扩展性,绝对不能down机,就用Session Centralization。

9442

#8楼 @boyishwei :plus1: 还有一个问题,怎么处理多地甚至多国服务器呢? 我的想法:

  1. 一个总代理,根据IP判断地区和国籍,再走下一层分代理
  2. DNS层做负载均衡,具体未知
16

#9楼 @flowerwrong DNS智能解析啊,费那么大事干嘛

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册