Базы данных/Лабораторная работа 6 — различия между версиями
Материал из Wiki - Факультет компьютерных наук
м |
Mir (обсуждение | вклад) |
||
(не показано 11 промежуточных версии 2 участников) | |||
Строка 10: | Строка 10: | ||
sudo apt-get install --yes redis-server redis-tools | sudo apt-get install --yes redis-server redis-tools | ||
+ | echo 'ULIMIT=65536' >> /etc/default/redis-server | ||
+ | service redis-server restart | ||
+ | |||
+ | [http://redis.io/topics/quickstart Ссылка] на quick start | ||
== NginX + redis2_module == | == NginX + redis2_module == | ||
Строка 16: | Строка 20: | ||
mkdir -p /opt/{nginx-build,nginx,redis2}/ | mkdir -p /opt/{nginx-build,nginx,redis2}/ | ||
− | cd redis2 | + | cd /opt/redis2 |
wget 'https://github.com/openresty/redis2-nginx-module/archive/v0.13.tar.gz' | wget 'https://github.com/openresty/redis2-nginx-module/archive/v0.13.tar.gz' | ||
tar xf v0.13.tar.gz | tar xf v0.13.tar.gz | ||
Строка 50: | Строка 54: | ||
} | } | ||
} | } | ||
+ | |||
+ | cp -a nginx.conf.tpl nginx.conf | ||
+ | vim nginx.conf # FIX CONFIG HERE | ||
= Управление NginX'ом = | = Управление NginX'ом = | ||
Строка 55: | Строка 62: | ||
Запуск: | Запуск: | ||
cd /opt/nginx/ | cd /opt/nginx/ | ||
+ | ulimit -n 65536 | ||
./sbin/nginx -c nginx.conf | ./sbin/nginx -c nginx.conf | ||
Строка 68: | Строка 76: | ||
Запуск: | Запуск: | ||
− | ab | + | ulimit -n 65536 |
+ | ab -n 10000 -kc 500 http://server:8000/url1 | ||
= Задание = | = Задание = | ||
Строка 77: | Строка 86: | ||
# Провести тестирование с помощью Apache Benchmark ("ab") | # Провести тестирование с помощью Apache Benchmark ("ab") | ||
# Убедиться, что все показы записались в базу (например с помощью "redis-cli"). | # Убедиться, что все показы записались в базу (например с помощью "redis-cli"). | ||
+ | |||
+ | = Расширенное задание = | ||
+ | |||
+ | '''Cамостоятельно''' доработать данный стенд: | ||
+ | * используя Python/Flask | ||
+ | * подключить код к NginX через "uwsgi" | ||
+ | * который будет (речь идёт про код) | ||
+ | ** выводить список всех ключей Redis (отвечать по адресу: "/admin/all_keys") | ||
+ | ** выводить значение конкретного счётчика (пример: "/admin/key2value/some/url"; в данному случае должно быть отображено кол-во посещений адреса "/some/url") | ||
+ | ** удалять конкретный счётчик из базы (пример: "/admin/key2flush/some/url2/") |
Текущая версия на 12:25, 18 июня 2016
Цель лабораторной работы: создать высоконагруженный счётчик посещения ссылок.
Содержание
Установка
окружение для сборки
sudo apt-get install --yes libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential
Redis
sudo apt-get install --yes redis-server redis-tools echo 'ULIMIT=65536' >> /etc/default/redis-server service redis-server restart
Ссылка на quick start
NginX + redis2_module
sudo -i mkdir -p /opt/{nginx-build,nginx,redis2}/ cd /opt/redis2 wget 'https://github.com/openresty/redis2-nginx-module/archive/v0.13.tar.gz' tar xf v0.13.tar.gz cd - cd /opt/nginx-build/ wget 'http://nginx.org/download/nginx-1.9.15.tar.gz' tar -xzvf nginx-1.9.15.tar.gz cd nginx-1.9.15/ ./configure --prefix=/opt/nginx --add-module=/opt/redis2/redis2-nginx-module-0.13/ make -j2 make install
Настройка
sudo -i cd /opt/nginx/ cat <<EOF > nginx.conf.tpl events { worker_connections 4096; } http { server { listen 8000; location / { # $uri variable holds part of url after "address:port" # Redis Server is available via 6379 port on localhost ## DO YOUR WORK HERE ## # docs: https://github.com/openresty/redis2-nginx-module } } } cp -a nginx.conf.tpl nginx.conf vim nginx.conf # FIX CONFIG HERE
Управление NginX'ом
Запуск:
cd /opt/nginx/ ulimit -n 65536 ./sbin/nginx -c nginx.conf
Остановка:
pkill nginx # останавливает все nginx-процессы в системе
Тестирование
Apache Benchmark
Установка:
sudo apt-get install -y apache2-utils
Запуск:
ulimit -n 65536 ab -n 10000 -kc 500 http://server:8000/url1
Задание
- Воспроизвести аналогичную систему.
- Настроить её так, чтобы в Redis записывалось каждое посещение страницы (ключ - url страницы, например "/my/awesome/page.html")
- Разобраться и понимать в архитектуру и работе стенда.
- Провести тестирование с помощью Apache Benchmark ("ab")
- Убедиться, что все показы записались в базу (например с помощью "redis-cli").
Расширенное задание
Cамостоятельно доработать данный стенд:
- используя Python/Flask
- подключить код к NginX через "uwsgi"
- который будет (речь идёт про код)
- выводить список всех ключей Redis (отвечать по адресу: "/admin/all_keys")
- выводить значение конкретного счётчика (пример: "/admin/key2value/some/url"; в данному случае должно быть отображено кол-во посещений адреса "/some/url")
- удалять конкретный счётчик из базы (пример: "/admin/key2flush/some/url2/")