Skip to content

shanghaiyangming/trouter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#Trouter ##项目名称:
Tornado Router

##简称: Trouter

##功能介绍: 网站已经上线,代码已经写好,忽然远超过预想的流量来了!怎么办?

重新编码?NND,怎么可能来得及?

加服务器?NND,现买哪里来得及?

就是有那么一种网站,95%的时间是空闲的,5%的时间负载远超过处理能力。

如何能够有效的分流请求?

我们考虑了三种情况:

  1. 切换成异步接收模式,别人虐我千百遍,我待他人如初恋!不管你来多少请求,我们都接纳,但是后台慢慢处理。适合比如投票类的应用。

  2. 同步异步混合。同一个URL,同一个API,同一个行为。但是不同的参数或者不同的提交内容,区分处理。比如微信服务器推送过来的信息。对于用户消息提问,当然要及时回复;但是对于一些系统事件,能进列队不?后台慢慢处理好不好?答案是可以!

  3. 我的同步业务不能影响噢~ 没问题!

    无需修改任何代码,对程序员完全透明!!!

    这就是我们的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

About

tornado router

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published