Базы данных/Лабораторная работа 6

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Цель лабораторной работы: создать высоконагруженный счётчик посещения ссылок.

Установка

окружение для сборки

 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

Задание

  1. Воспроизвести аналогичную систему.
  2. Настроить её так, чтобы в Redis записывалось каждое посещение страницы (ключ - url страницы, например "/my/awesome/page.html")
  3. Разобраться и понимать в архитектуру и работе стенда.
  4. Провести тестирование с помощью Apache Benchmark ("ab")
  5. Убедиться, что все показы записались в базу (например с помощью "redis-cli").

Расширенное задание

Cамостоятельно доработать данный стенд:

  • используя Python/Flask
  • подключить код к NginX через "uwsgi"
  • который будет (речь идёт про код)
    • выводить список всех ключей Redis (отвечать по адресу: "/admin/all_keys")
    • выводить значение конкретного счётчика (пример: "/admin/key2value/some/url"; в данному случае должно быть отображено кол-во посещений адреса "/some/url")
    • удалять конкретный счётчик из базы (пример: "/admin/key2flush/some/url2/")