1 雾计算/边缘计算的网络服务特点
边缘计算网络服务主要由几个特点:
1)局域网内的请求(可以不用考虑使用SSL)
2)并发量和连接数并不会太大(相对于公网的网络请求,千万的并发请求)
3)数据请求是固定的,并且数据量不大(可以使用短链接)
4)服务器硬件的能力相对有限,没有固定独立的机房。
2 适用的网络框架
http://python.jobbole.com/87666/
3 Gunicorn使用思考
比如在我们的雾计算中心节点服务器的Gunicorn的配置启动Flask服务,如下:
gunicorn -b 0.0.0.0:5555 -k gthread -t 180 --thread=10 --worker-connections=100 gate_webserver:app
参数解析:
3.1 worker type
-k STRING, --worker-class STRING
The type of workers to use. [sync]
指定worker tpe。gunicorn提供了sync,gthread,eventlet, gevent和tornado几种类型。
可以在归结为3类:
- sync:每一个请求由一个process处理。process数量由-w来指定,理论上等同于worker的数量。
---好处:错误隔离高,一个process挂断只会影响该process当下服务的请求,而不会影响其他的请求
---不足:process资源开销大,过多worker对内存和cpu的影响比较大
---适用场景:当需要稳定的系统时,用process处理请求可以保证一个请求的异常导致程序crash不会影响到其他的请求
以下的情况,不建议使用sync,取而代之的为async。
Some examples of behavior requiring asynchronous workers:
- Applications making long blocking calls (Ie, external web services)
- Serving requests directly to the internet
- Streaming requests and responses
- Long polling
- Web sockets
- Comet
- gthread:每一个请求由一个thread处理。一个process可以开的thread数量由--thread来决定。整个系统处理的thread数量就是worker * gthread。
---好处:可处理的上限比process高
---不足:thread数量的提高会造成系统负担
---适用场景:当web服务内大部分都是cpu运算时,用thread可以提供不错的效能
- eventlet,gevent,tarnado利用非同步IO,让一个process在等待IO回应时继续处理下一个请求。
---好处:对IO Bound的场景适合
---不足:CPU Bound场景连接数量降低到worker数量
---适用场景: 当web服务内大部分都是io时,用非同步io可以达到极高的concurrency数量。
gevent说明:http://www.gevent.org/
3.2 Workers Number
Gunicor建议workers数量为(2*num_cores)+1
多个worker需要特别注意的是,会增加memory的消耗
3.3 Threads Number
改参数只有在gthread worker才有效。在实际的使用中,可以多worker,多threads使用,以便达到较好的效果。使用thread可以很好降低内存。
参考文献
觉得文章不错,欢迎按赞。