В прошлом вопросе (Вопрос) я выяснил , что для запроса погоды мне нужен прокси сервер, который будет кэшировать данные с погодного сервера. Писать сервер придется мне самому, но до этого ни с чем подобным не сталкивался (серверной частью). Писать решил на python 3. Можете ли ткнуть в литературу или дать ссылки как можно реализовать такой кэширующий сервер, и правильно ли я вообще выбрал python?
Ответ
«По-науке» эта конструкция называется «Обратный прокси» (reverse proxy).
У вас есть некоторый backend-сервер, который генерирует какие-то полезные данные, и есть frontend-сервер, который кеширует на себе редкоизменяемые данные. Такая схема чаще используется, для кеширования локальных ресурсов какого-нибудь сайта, чтобы не гонять данные лишний раз, через основной backend-сервер.
В вашем случае backend-сервером будет погодный сервер.
Если, логику формирования запросов клиенты возьмут на себя, то проще будет использовать некий уже готовый и отлаженный web-сервер. В принципе, тут подойдет любой (nginx, lighttpd, apache, Ваш собственный).
Чаще всего для таких целей используют nginx. Он весьма шустр и достаточно прост в настройке.
Вот, например, настройки для nginx
http://reviewsignal.com/blog/2013/08/29/reverse-proxy-and-cache-server-with-nginx/
http://ashep.org/2011/nginx-obratnyj-proksi-server/#.V6ECut_XfmE
Официальная документация:
https://www.nginx.com/blog/nginx-caching-guide/
В итоге у вас получится что-то вроде:
events {
worker_connections 8096;
multi_accept on;
use epoll;
}
http {
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:60m max_size=1G;
server {
listen 80;
server_name your-proxy-server-name.com;
location / {
proxy_pass http://any-weather-server.com;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating \
http_500 http_502 http_503 http_504;
}
}
}
Тут надо будет внимательно отнестись к заголовкам, которые ожидает сервер погоды от вас. Вероятно, вам придется немножко поколдовать с
proxy_ignore_headers
proxy_hide_headers
proxy_set_headers
Подобную проблему обсуждают тут:
https://stackoverflow.com/questions/9230812/nginx-as-cache-proxy-not-caching-anything
Заголовки, вам придется настраивать в любом случае, в том числе и если frontend-сервер будете писать сами.
Если писать самому, я думаю, было бы проще найти некоторое готовое решение, и его переиспользовать.
Например, достаточно просто это сделать с помощью tornado.
А в качестве кеша использовать наример memcached или redis
https://stackoverflow.com/questions/16524545/how-to-write-a-web-proxy-in-python
Комментариев нет:
Отправить комментарий