Я пытаюсь создать REST-API, используя Nginx и Flask. Дело в том, что я не уверен, как это сделать правильно. Я не нашел подходящих гидов. Что у меня сейчас: /etc/nginx/conf.d/myservice.conf:
upstream myapp1 {
least_conn;
server 127.0.0.1:4100;
server 127.0.0.1:4101;
server 127.0.0.1:4102;
}
server {
listen 1335;
location / {
proxy_pass http://myapp1;
}
}
Если я правильно понимаю, он перехватывает запросы с 1335 и переадресует его на 4101-4102. less_conn должен сделать его более эффективным, верно? Мое главное требование: если все серверы заняты, Nginx должен немного подождать и повторить попытку. Если это слишком сложно и требует что-то вроде сельдерея, то я согласен: пользователь должен получить код ошибки 418 (например).
Мои основные проблемы, связанные с приложением Flask. Мой код api.py: Внимание на «состояние». Я хочу, чтобы он загружался только один раз при запуске приложения, а не каждый раз, когда принимается запрос. Если я запускаю 3 потока с 3 * 6 = 18 ГБ данных в ОЗУ - это нормально для меня.
import everything_i_need
some_other_commands
app = Flask(__name__)
app.url_map.strict_slashes = False
state = *some_code_here* #6GB of data. Model for a neural network.
@app.route('/api/v1/something/', methods=['POST'])
def do_it:
request_str = request.get_data().decode('utf-8').strip()
response = some_program.some_method(state, request_str)
return response, 200
if __name__ == '__main__':
app.run(host='0.0.0.0',port=4100, threaded=True)
app.run(host='0.0.0.0',port=4101, threaded=True)
app.run(host='0.0.0.0',port=4102, threaded=True)
Я почти уверен, что делаю с этим что-то совершенно не так. Есть ли правильный способ сделать N экземпляров "состояния" и N портов?
Я называю api.py в качестве службы (у меня для этого есть конфигурация systemd).