20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько кейсов из жизни "больших" проектов", Виталий Гаврилов (технический директор "Ленвендо")
Аннотация
Команда разработчиков «Ленвендо» реализовала сотни проектов, среди которых были сайты и интернет-магазины для компаний: Эльдорадо, Газпромбанк, Связной, SUP media, Эхо Москвы в Петербурге, Банк БФА и другие. Специалисты компании в совершенстве владеют языками программирования от низкоуровневого C++ до высокоуровневых PHP, Perl, Bash и умею разрабатывать проекты с многомиллионной посещаемостью.
В рамках презентации будет рассмотрено несколько интересных кейсов из практики «Ленвендо». Мы поговорим об особенностях построения высоконагруженных проектов с использованием БД PostgreSQL, о резервном копировании и особенностях его организации в высоконагруженных проектах с большими объемами данных. Также остановимся на специфике проектов, размещенных в 2-х и более датацентрах, и тех инструментах, которые мы используем для построения таких проектов (csync2, MySQL Multi-Master Replication и т.д.).
Особое внимание будет уделено теме управляемого статического кеширования, позволяющего существенно (от 30% до нескольких раз) снизить нагрузку на backend-сервера с сохранением актуальности отображаемой на сайте информации (с помощью RabbitMQ, RedisDB, Nginx embedded Perl).
И напоследок - короткое «лирическое» отступление о том, когда и для чего имеет смысл использовать СУБД Oracle.
О компании
Компания «Ленвендо» - профессионал в области разработки, внедрения и технической поддержки высоконагруженных Интернет-решений. Компания была признана одной из лидеров по разработке Highload-систем (рейтинг Best in Digital 2013).
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько кейсов из жизни "больших" проектов", Виталий Гаврилов
1. Несколько кейсов
из жизни "больших" проектов
Виталий Гаврилов
Технический директор «Ленвендо»
info@lenvendo.ru
www.lenvendo.ru
2013 dev.it-portfolio.net
2. «Ленвендо» в приближении
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Профессионал в области разработки сложных Интернет - решений и
высоконагруженных проектов
3. О чем мы сегодня поговорим?
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Управляемое статическое кеширование
√ nginx + embed perl
√ Redis
√ RabbitMQ
Где и когда нужно использовать СУБД Oracle
Хитрости проекта с использованием СУБД PostgreSQL, оптимизированного
под высокие нагрузки
√ pl_proxy
√ embed perl
Резервное копирование высоконагруженного проекта: проблемы и решения
Особенности построения проекта, распределенного на 2 и более
датацентрах,
√ round-robin DNS
√ csync2
√ mysql multimaster replication
√ Memcached
5. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Масштабирование проекта с использованием pl_proxy
в каждой БД - полная копия всех данных
использование встроенной WAL-PITR нативной репликации
всего два кластера master и slave
в кластере master: 2 сервера (можно больше). Основной
сценарий использования: RUN ON ALL
в кластере slave: 4 сервера (можно больше, но должно быть
кратно двум). Основой сценарий использования: RUN ON ANY
Хитрости проекта с использованием СУБД
PostgreSQL
8. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием
СУБД PostgreSQL
9. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием
СУБД PostgreSQL
10. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Доступ к сессии пользователя через embed perl
хранение сессий в memcached
передача ключа сессии через сессию PostgreSQL
доступ в систему полнотекстового поиска Sphinx через mysql интерфейс
непосредственно из plperl
Хитрости проекта с использованием
СУБД PostgreSQL
11. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием СУБД
PostgreSQL
12. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием СУБД
PostgreSQL
13. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости при использовании СУБД
PostgreSQL
15. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Типы контента:
Файлы проекта
Статический контент проекта
База данных проекта
Настройки виртуальных (и хостовых)
машин или образы виртуальных машин
Резервное копирование высоконагруженного
проекта: проблемы и решения
16. Резервное копирование высоконагруженного
проекта: проблемы и решения
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Много задач? Инструмент один – bacula
Файлы сайта:
полная резервная копия - 1 раз в 1-2 недели,
дифференциальная копия - 1 раз/день
Cтатические файлы:
полная резервная копия - 1 раз/месяц,
дифференциальная копия – 1 раз в 3-7 дней,
инкрементальная копия – 1 раз/день
резервная копия БД (бизнес-критичные таблицы) не реже 1
раз/день
полная целостная резервная копия - не реже 1 раз/нед.
(http://www.bacula.org/en/)
17. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Резервная копия БД – о чем надо помнить?
должна выполнятся в наименее загруженное время со slave сервера, на
котором нет продуктивной нагрузки во время снятия копии
должна быть логически целостной
помните, резервная копия - это не спасение
и дублирующий slave сервер тоже
Что можно сделать?
Дублирующий slave сервер с отставанием во времени от 15 минут до
часа (зависит от квалификации службы поддержки)
Резервное копирование высоконагруженного
проекта: проблемы и решения
18. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Полная резервная копия конфигурационных файлов всех узлов
системы
Копия нужна после каждого внесения изменений
Резервное копирование образов виртуальных машин
Обеспечить наличие образов виртуальных машин после каждого
внесения изменений в настройке узлов, желательно сохранять
минимум две последние копии
Резервное копирование высоконагруженного
проекта: проблемы и решения
19. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Наличие резервной копии не гарантирует оперативное
восстановление
Резервное копирование высоконагруженного
проекта: проблемы и решения
необходимо регулярно проводить процедуры
тестового восстановления системы
процедура должна выполняться как минимум
после каждого внесения изменений в
конфигурацию
21. Особенности построения проекта,
распределенного на 2 и более датацентрах
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Причины особенностей
Скорость взаимодействия внутри датацентра гораздо выше, чем
между датацентрами
Если взаимодействие между датацентрами идет по публичным
сетям, трафик должен цифроваться
В общем случае невозможно предугадать в какой из датацентров
придет следующий запрос посетителя, поэтому каждый
датацентр должен содержать достаточно данных для подготовки
ответа, либо запрос должен быть прозрачно проксирован в
датацентр, где есть необходимые данные
22.
23. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Преимущества
встроенная поддержка шифрования
продуманные механизмы определения «кто прав» в случае
конфликтов синхронизации
понятная структура конфигурационного файла
Недостатки
критичен к стабильности соединения (может зависнуть, нужен
контроль)
недостаточно документирован
синхронизация требует большого числа дисковых операций и
достаточно много времени (до 15 минут на 50 Гб данных), при
этом одновременная двусторонняя синхронизация хотя и
возможна, но не рекомендуется
Синхронизация файлов – csync2
24. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Основные настройки
server_id = N
log-bin = <путь к файлу журнала транзакций>
relay-log = <путь к файлу журнала транзакций мастер-сервера>
relay-log-index = <путь к индексному файлу журнала транзакций мастер-
сервера>
auto_increment_increment определяет шаг изменения
AUTO_INCREMENT
auto_increment_offset определяет начальное значение инкремента
log_slave_updates логирует обновления с мастера
slave_net_timeout таймаут получения данных с мастера перед сбросом
соединения
Multimaster репликация MySQL
25. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Основные команды
START SLAVE [IO_THREAD | SQL_THREAD]
STOP SLAVE [IO_THREAD | SQL_THREAD]
SET GLOBAL sql_slave_skip_counter=<N>
CHANGE MASTER TO …
RESET SLAVE
Multimaster репликация MySQL
26. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Где хранить сессии? Конечно, в memcached
Преимущества
общее хранилище для всех виртуальных машин кластера
позволяет получить доступ к сессии
достаточно быстро
Недостатки
требует кастомных инструментов поддержания актуальности
данных между ДЦ
нагружает канал большим числом мелких пакетов
в случае падения службы все сессионные данные могут
оказаться потерянными
Особенности построения проекта,
распределенного на 2 и более датацентрах
http://www.memcached.org/
29. Управляемое статическое кеширование, как способ
снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Способы снижение нагрузки
Разделение контента на полностью динамический и условно
статический контент
Перекомпоновка страниц для оптимального использования AJAX
Статическое кеширование условно-статического контента
30. Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Использование заголовков “Cache-Control” и “Expires”
(дает разрешение браузеру не перезапрашивать содержимое
страницы, не спасает от «скачков» посещаемости)
Использование кеширующего прокси сервера в связке с
заголовками “Cache-Control” и “Expires”
(дает устойчивость к «скачкам» посещаемости, не позволяет
оперативно управлять обновлением кеша)
Использование управляемого статического
кеширования
(решает все поставленные задачи)
32. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Сервера FE
Принимают все входящие подключения
Фактически самое ненагруженное звено в обработке запроса
посетителя
Не обладает информацией о связи запроса с элементом
динамической информации
В большинстве случаев это nginx (www.nginx.ru)
Управляемое статическое кеширование, как
способ снижения нагрузки
33. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Nginx умеет
Сохранять полученный ответ в файлах по заранее
определенному пути (директива proxy_store)
Определять наличие сохраненной копии файла
Отдавать готовые ответы из сохраненных копий
Nginx не умеет
Отслеживать корректность отдаваемых данных
Управляемое статическое кеширование, как
способ снижения нагрузки
34. тел.: +7 (812) 322-95-87 info@lenvendo.ru
За ведение статического кеша отвечает nginx
Из nginx на уровень приложения (в случае если запрос посетителя
обрабатывается приложением, а не берется из закешированной копии,
передается путь к файлу, в который будет сохранен ответ (файл кеша))
На уровне приложения информация о связке информационных
элементов и файла кеша сохраняется в БД (лучше всего подходят
NoSQL базы данных)
При обновлении элемента информации на уровне приложения
отдается команда на удаление файлов кеша по обновленному
информационному элементу (можно делать это как прямой командой в
nginx, который посредством встроенного perl сможет удалять файлы, так и
через диспетчер очереди, в случае нескольких FE серверов)
Управляемое статическое кеширование, как
способ снижения нагрузки
35. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Управляемое статическое кеширование, как
способ снижения нагрузки
36. тел.: +7 (812) 322-95-87 info@lenvendo.ru
А как же поисковые системы?
Весь внешний контент необходимо по максимуму включать в
сохраненные в статическом кеше копии страниц
У копии страницы есть время жизни, после которого она
удаляется (что приводит к перестроению страницы, и,
следовательно, к обновлению данных для поисковых систем)
Необходимо помнить об альтернативных способах передачи
информации в поисковые системы (RSS ленты и т.д.)
Управляемое статическое кеширование, как
способ снижения нагрузки
37. Где и когда нужно использовать
СУБД Oracle?
Раздел 5.
38. Где и когда нужно использовать СУБД
Oracle?
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Требования заказчика по безопасности и надежности
хранения данных (при условии поддержки проекта
квалифицированным DBA)
Специфика проекта, требующая тесного взаимодействия с
внутренними системами заказчика, построенными на
продуктах Oracle
Наличие у заказчика развернутого RAC и команды
администраторов Oracle
39. тел.: +7 (812) 322-95-87 info@lenvendo.ru
Если масштабы проекта не смогут окупить трудозатрат на
его поддержание
Если желание сделать проект на Oracle вызвано тем, что
«Это же круто!», «А почему бы и нет?», «А вот у них
Oracle, а мы что хуже?»
Заказчик не имеет возможности поддержки Oracle и не
представляет во что это выльется
У вас в штате нет ни одного сотрудника, способного
сделать резервную копию БД Oracle
Когда не стоит переходить на Oracle?
40. www.lenvendo.ru
info@lenvendo.ru
тел.: +7 (812) 322-95-87 info@lenvendo.ru
III место в рейтинге Best in digital 2013
в номинации «Разработка Highload систем»
С удовольствием отвечу на ваши вопросы!