Gunicorn在雾计算/边缘计算中的实际应用

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可以很好降低内存。

参考文献

【1】https://medium.com/@genchilu/%E6%B7%BA%E8%AB%87-gunicorn-%E5%90%84%E5%80%8B-worker-type-%E9%81%A9%E5%90%88%E7%9A%84%E6%83%85%E5%A2%83-490b20707f28

觉得文章不错,欢迎按赞。

猜你喜欢

转载自blog.csdn.net/putiancaijunyu/article/details/88052521