#Trouter
##项目名称:
Tornado Router
##简称:
Trouter
##功能介绍:
网站已经上线,代码已经写好,忽然远超过预想的流量来了!怎么办?
重新编码?NND,怎么可能来得及?
加服务器?NND,现买哪里来得及?
就是有那么一种网站,95%的时间是空闲的,5%的时间负载远超过处理能力。
如何能够有效的分流请求?
我们考虑了三种情况:
- 切换成异步接收模式,别人虐我千百遍,我待他人如初恋!不管你来多少请求,我们都接纳,但是后台慢慢处理。适合比如投票类的应用。
- 同步异步混合。同一个URL,同一个API,同一个行为。但是不同的参数或者不同的提交内容,区分处理。比如微信服务器推送过来的信息。对于用户消息提问,当然要及时回复;但是对于一些系统事件,能进列队不?后台慢慢处理好不好?答案是可以!
- 我的同步业务不能影响噢~ 没问题!
无需修改任何代码,对程序员完全透明!!!
这就是我们的trouter的作用!
##启动命令示例: python trouter.py --conn=1000 --apps=127.0.0.1:9999 --port=8000 --threshold=5 --sync_threshold=4 --enable_zmq=1 --zmq_device=tcp://127.0.0.1:55555
##参数说明:
conn 最大连接数,默认是5000
apps 后台应用服务器的地址,多个应用服务器用英文逗号分隔
port 监听的端口号,默认是12345
threshold 阈值,默认是500 当达到阈值的时候,自动阻塞请求不再向后转发
sync_threshold 同步请求阈值,默认300 保证在转发中有300个用于同步转发
logging 错误等级,默认是info 可选参数debug|info|warning|error|none
enable_zmq 是否开启zmq存储请求,默认是0 设置大于0的整数,表示开启
zmq_device zeroMQ设备地址,例如:tcp://127.0.0.1:55555
security_device zeroMQ security device 设备地址,例如:tcp://127.0.0.1:55557
#0mq工作设置
启动zeromq/device.py 默认监听55555 55556端口
#http client worker设置
启动zeromq/worker.py 根据你后台应用服务器的处理能力,启动相应数量的实例
#是否可以指定device和worker的端口呢?当然可以!
使用方法:
zeromq/device.py --frontend_port=10000 --backend_port=20000
zeromq/worker.py --backend_port=20000
frontend_port指的是队列监听的端口
backend_port指的是worker监听的端口
#没有队列怎么办?
采用队列可以提高性能,但是没有?也可以工作!启动enable_zmq不设置即可,默认是0噢~
同样是实现上面的全部功能,只是性能……确实要差一点,没办法你懂的,处理的太多trouter也会累的嘛!
##Nginx转发设置:
upstream test {
proxy_set_header __NODELAY__ 1;
server 192.168.56.1:8000;
server 192.168.56.1:8000;
}
location / {
root html;
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header __NODELAY__ 1;
proxy_pass http://test;
}
__NODELAY__表示直接返回成功{"ok":1},无延迟返回,后续将根据应用服务器的量平缓处理
__BLACKLIST__表示直接返回503 跟着要过滤的内容多个关键词用英文逗号分隔,支持中英文
__ASYNCLIST__表示对于包含给定关键词的内容(多个关键词用英文逗号分隔),切换到异步模式处理,并直接返回成功{"ok":1},无延迟返回。支持通配符:比如abc.*def可以匹配如下内容:abc1234567890def
__ASYNC_RESULT__定义异步操作的返回结果,默认值是{"ok":1},建议urlencode编码
__ENABLE_DEBUG__当开启异步模式时,通过该参数开启调试模式查看同步的效果
__CONTENT_TYPE__当指定返回值的mime类型
__JSONP_CALLBACK_VARNAME__当使用jsonp访问时,可以指定获取jsonpcallback的变量名,默认支持jquery的变量名为:jsonpcallback