1
Livid MOD 启动至少两个 instance,在不同的端口。绑定 80 的那个用于所有读操作,另外一个用于这样的耗时操作。
通过 queue 去 call 另外一个。 |
3
Livid MOD @yaotian 这就是为什么要在两个端口启动 _至少_ 两个 instance 的原因。
我的某个项目中,Tornado 框架,12 个读 instance,12 个写 instance,通过 least connection 方式做 load balance。 |
4
yaotian OP @Livid 之前没考虑过起多个instance的方法。django支持这样的least connection方式吗?你的这个项目架构有分享吗?想读一读
|
5
Livid MOD @yaotian 我是这样做的:
1. 通过 supervisord 管理启动的 instances,每个一个端口,比如 30000-30009 是前段端口,30010-30019 是后端端口。 2. 在 nginx 里把 30000-30009 做成前端的 upstream,30010-30019 是后端的 upstream。nginx 支持 least_conn 方式的负载均衡。 3. 然后通过 nginx 的 allow/deny 规则让后端 upstream 只能通过 127.0.0.1 访问。 4. 在 Tornado 里通过 rq 去 call 后端的那个域名。 |
6
adamwen 2012-12-04 08:38:24 +08:00
也许你可以试试celery
反正这种东西还是扔到队列里比较好吧 |
7
Livid MOD |
8
adamwen 2012-12-04 09:21:14 +08:00
@Livid 是个不错的主意
通过nginx的load balance的request队列 避免了自己再去写队列 PS: 你那个前端接口和后端接口只是为了做load balance么 如果是楼主的问题的话 可以分出一个instance就行 把不断的去call 后端域名 |
9
yaotian OP @Livid 感谢。写的非常清楚。已经了解大体思路。
多说几句为长操作起的10个instance: 起那么多instance的原因是当其中一个instance还在执行那个长操作的时候, nginx的upstream可以将后来的request分配到其它的instance, 举个例子同时来了十个request, 他们会被分配到不同的instance上, 第11个就得等待了。 我的理解对吧? |
10
adamwen 2012-12-04 12:28:10 +08:00
|
11
BigZ 2012-12-04 15:23:47 +08:00
分成两个请求,view.py用于展示页面,较慢的计算过程用ajax返回数据更新页面,
|
12
ipconfiger 2012-12-04 16:01:54 +08:00
老老实实的用队列放后端吧,一切不用队列的说法都是异端
|
13
yaozhifeng 2012-12-04 16:15:41 +08:00
原来Supervisor可以这样用,太精彩了。学习
|
14
cabbala 2012-12-04 16:47:06 +08:00
Tornado的话搞成异步操作最好了
|
15
yxlwfds 2013-03-02 19:44:09 +08:00
1.5中新增了一个关于这个的,可以看下。
|