一般服务是单机Gunicorn + Flask部署api接口即可,单机部署一般针对调用量,并发量要求不高的服务。由于目前单机部署不满足前端那边的并发请求,因此需要后端添加机器。问题来了,如何将多个后台ip及端口链接到一个接口,前端调用该接口之后,然后将请求分发给后台的多台机器上。这类的工具有很多,常用的是Nginx,Tengine等。这里选择常见的Nginx。
# hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'hello world
'
if __name__ == '__main__':
app.run(debug=True)
Python WSGI HTTP Server: 实现了WSGI、uwsgi、http等协议,其作用就是把HTTP协议转化成语言支持的网络协议,用于处理客户端请求,并向客户端返回响应。这里的uwsgi则是uWSGI服务器的独占协议,与WSGI是两种不同的协议。
pip3 install gunicorn
guncorn.py
gunicorn hello:app
cat /proc/version
uname -a
sudo yum install nginx
# centos 7
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm
假如后台有两台机器:
168.xxx.xx.1:5000/hello
;168.xxx.xx.2:5001/hello
;nginx/nginx.conf
编辑配置文件,在http括号中添加
upstream flask{
server 168.xxx.xx.1:5000 weight=2;
server 168.xxx.xx.2:5001;
}
server {
# 监听8080端口
listen 8080;
# 本机
server_name localhost;
# 默认请求的url
location /hello {
#请求转发到gunicorn服务器
proxy_pass http://flask;
#设置请求头,并将头信息传递给服务器端
proxy_set_header Host $host;
}
}
上述配置文件可以通过weight控制权重,比如一个机器性能好,另外一个机器性能差,可以将好性能的机器的权重调高一些;
sudo service nginx reload # 重新加载配置
sudo service nginx restart # 重启 nginx 服务
sudo nginx -s reload # 热更新
下面直接访问 nginx安装的机器IP及端口号 127.0.0.1:8080/hello
就可以将请求分发给后台的两个机器,满足并发的需求。
日志文件可以在这里查看
/var/log/nginx/access.log