SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Несколько кейсов
из жизни "больших" проектов
Виталий Гаврилов
Технический директор «Ленвендо»
info@lenvendo.ru
www.lenvendo.ru
2013 dev.it-portfolio.net
«Ленвендо» в приближении
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Профессионал в области разработки сложных Интернет - решений и
высоконагруженных проектов
О чем мы сегодня поговорим?
тел.: +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
Хитрости проекта с
использованием СУБД
PostgreSQL,
оптимизированного под
высокие нагрузки
Раздел 1.
тел.: +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
Хитрости проекта с использованием
СУБД PostgreSQL
Хитрости проекта с использованием
СУБД PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием
СУБД PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием
СУБД PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Доступ к сессии пользователя через embed perl
 хранение сессий в memcached
 передача ключа сессии через сессию PostgreSQL
 доступ в систему полнотекстового поиска Sphinx через mysql интерфейс
непосредственно из plperl
Хитрости проекта с использованием
СУБД PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием СУБД
PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости проекта с использованием СУБД
PostgreSQL
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Хитрости при использовании СУБД
PostgreSQL
Резервное копирование
высоконагруженного проекта:
проблемы и решения
Раздел 2.
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Типы контента:
 Файлы проекта
 Статический контент проекта
 База данных проекта
 Настройки виртуальных (и хостовых)
машин или образы виртуальных машин
Резервное копирование высоконагруженного
проекта: проблемы и решения
Резервное копирование высоконагруженного
проекта: проблемы и решения
тел.: +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/)
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Резервная копия БД – о чем надо помнить?
 должна выполнятся в наименее загруженное время со slave сервера, на
котором нет продуктивной нагрузки во время снятия копии
 должна быть логически целостной
 помните, резервная копия - это не спасение
 и дублирующий slave сервер тоже
Что можно сделать?
 Дублирующий slave сервер с отставанием во времени от 15 минут до
часа (зависит от квалификации службы поддержки)
Резервное копирование высоконагруженного
проекта: проблемы и решения
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Полная резервная копия конфигурационных файлов всех узлов
системы
 Копия нужна после каждого внесения изменений
Резервное копирование образов виртуальных машин
 Обеспечить наличие образов виртуальных машин после каждого
внесения изменений в настройке узлов, желательно сохранять
минимум две последние копии
Резервное копирование высоконагруженного
проекта: проблемы и решения
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Наличие резервной копии не гарантирует оперативное
восстановление
Резервное копирование высоконагруженного
проекта: проблемы и решения
 необходимо регулярно проводить процедуры
тестового восстановления системы
 процедура должна выполняться как минимум
после каждого внесения изменений в
конфигурацию
Особенности построения
проекта, распределенного на 2
и более датацентрах
Раздел 3.
Особенности построения проекта,
распределенного на 2 и более датацентрах
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Причины особенностей
 Скорость взаимодействия внутри датацентра гораздо выше, чем
между датацентрами
 Если взаимодействие между датацентрами идет по публичным
сетям, трафик должен цифроваться
 В общем случае невозможно предугадать в какой из датацентров
придет следующий запрос посетителя, поэтому каждый
датацентр должен содержать достаточно данных для подготовки
ответа, либо запрос должен быть прозрачно проксирован в
датацентр, где есть необходимые данные
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Преимущества
 встроенная поддержка шифрования
 продуманные механизмы определения «кто прав» в случае
конфликтов синхронизации
 понятная структура конфигурационного файла
Недостатки
 критичен к стабильности соединения (может зависнуть, нужен
контроль)
 недостаточно документирован
 синхронизация требует большого числа дисковых операций и
достаточно много времени (до 15 минут на 50 Гб данных), при
этом одновременная двусторонняя синхронизация хотя и
возможна, но не рекомендуется
Синхронизация файлов – csync2
тел.: +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
тел.: +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
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Где хранить сессии? Конечно, в memcached
Преимущества
 общее хранилище для всех виртуальных машин кластера
 позволяет получить доступ к сессии
 достаточно быстро
Недостатки
 требует кастомных инструментов поддержания актуальности
данных между ДЦ
 нагружает канал большим числом мелких пакетов
 в случае падения службы все сессионные данные могут
оказаться потерянными
Особенности построения проекта,
распределенного на 2 и более датацентрах
http://www.memcached.org/
Управляемое статическое
кеширование, как
способ снижения нагрузки
Раздел 4.
Управляемое статическое кеширование, как
способ снижения нагрузки
Управляемое статическое кеширование, как способ
снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Способы снижение нагрузки
 Разделение контента на полностью динамический и условно
статический контент
 Перекомпоновка страниц для оптимального использования AJAX
 Статическое кеширование условно-статического контента
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Использование заголовков “Cache-Control” и “Expires”
(дает разрешение браузеру не перезапрашивать содержимое
страницы, не спасает от «скачков» посещаемости)
Использование кеширующего прокси сервера в связке с
заголовками “Cache-Control” и “Expires”
(дает устойчивость к «скачкам» посещаемости, не позволяет
оперативно управлять обновлением кеша)
Использование управляемого статического
кеширования
(решает все поставленные задачи)
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Сервера FE
 Принимают все входящие подключения
 Фактически самое ненагруженное звено в обработке запроса
посетителя
 Не обладает информацией о связи запроса с элементом
динамической информации
 В большинстве случаев это nginx (www.nginx.ru)
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Nginx умеет
 Сохранять полученный ответ в файлах по заранее
определенному пути (директива proxy_store)
 Определять наличие сохраненной копии файла
 Отдавать готовые ответы из сохраненных копий
Nginx не умеет
 Отслеживать корректность отдаваемых данных
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
За ведение статического кеша отвечает nginx
Из nginx на уровень приложения (в случае если запрос посетителя
обрабатывается приложением, а не берется из закешированной копии,
передается путь к файлу, в который будет сохранен ответ (файл кеша))
На уровне приложения информация о связке информационных
элементов и файла кеша сохраняется в БД (лучше всего подходят
NoSQL базы данных)
При обновлении элемента информации на уровне приложения
отдается команда на удаление файлов кеша по обновленному
информационному элементу (можно делать это как прямой командой в
nginx, который посредством встроенного perl сможет удалять файлы, так и
через диспетчер очереди, в случае нескольких FE серверов)
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
Управляемое статическое кеширование, как
способ снижения нагрузки
тел.: +7 (812) 322-95-87 info@lenvendo.ru
А как же поисковые системы?
 Весь внешний контент необходимо по максимуму включать в
сохраненные в статическом кеше копии страниц
 У копии страницы есть время жизни, после которого она
удаляется (что приводит к перестроению страницы, и,
следовательно, к обновлению данных для поисковых систем)
 Необходимо помнить об альтернативных способах передачи
информации в поисковые системы (RSS ленты и т.д.)
Управляемое статическое кеширование, как
способ снижения нагрузки
Где и когда нужно использовать
СУБД Oracle?
Раздел 5.
Где и когда нужно использовать СУБД
Oracle?
тел.: +7 (812) 322-95-87 info@lenvendo.ru
 Требования заказчика по безопасности и надежности
хранения данных (при условии поддержки проекта
квалифицированным DBA)
 Специфика проекта, требующая тесного взаимодействия с
внутренними системами заказчика, построенными на
продуктах Oracle
 Наличие у заказчика развернутого RAC и команды
администраторов Oracle
тел.: +7 (812) 322-95-87 info@lenvendo.ru
 Если масштабы проекта не смогут окупить трудозатрат на
его поддержание
 Если желание сделать проект на Oracle вызвано тем, что
«Это же круто!», «А почему бы и нет?», «А вот у них
Oracle, а мы что хуже?»
 Заказчик не имеет возможности поддержки Oracle и не
представляет во что это выльется
 У вас в штате нет ни одного сотрудника, способного
сделать резервную копию БД Oracle
Когда не стоит переходить на Oracle?
www.lenvendo.ru
info@lenvendo.ru
тел.: +7 (812) 322-95-87 info@lenvendo.ru
III место в рейтинге Best in digital 2013
в номинации «Разработка Highload систем»
С удовольствием отвечу на ваши вопросы!

Weitere ähnliche Inhalte

Was ist angesagt?

Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)
Ontico
 
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Ontico
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
Andrew Avdeev
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Ontico
 

Was ist angesagt? (20)

Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016
 
Backup commvault data_line
Backup commvault data_lineBackup commvault data_line
Backup commvault data_line
 
Резервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данныхРезервное копирование и оптимизация хранения данных
Резервное копирование и оптимизация хранения данных
 
Геннадий Карпов, De Novo: "Облако De Novo 2015-2016: история прошедшего года ...
Геннадий Карпов, De Novo: "Облако De Novo 2015-2016: история прошедшего года ...Геннадий Карпов, De Novo: "Облако De Novo 2015-2016: история прошедшего года ...
Геннадий Карпов, De Novo: "Облако De Novo 2015-2016: история прошедшего года ...
 
Big data moscow meetup
Big data moscow meetup Big data moscow meetup
Big data moscow meetup
 
Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)Тестирование аварий / Андрей Губа (Одноклассники)
Тестирование аварий / Андрей Губа (Одноклассники)
 
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдераHighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
HighLoad Junior '16 Как сравнить и выбрать хостинг-провайдера
 
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
Как подготовиться к гигабитной DDoS-атаке при помощи машинного обучения / Игн...
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Highload++ 2015
Highload++ 2015Highload++ 2015
Highload++ 2015
 
Mmx cvk-2015
Mmx cvk-2015Mmx cvk-2015
Mmx cvk-2015
 
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
3rd Moscow cassandra meetup (Fast In-memory Analytics Over Cassandra Data )
 
Kubernetes is not needed to 90 percents of the companies.rus
Kubernetes is not needed to 90 percents of the companies.rusKubernetes is not needed to 90 percents of the companies.rus
Kubernetes is not needed to 90 percents of the companies.rus
 
DDoS: Survival Guide
DDoS: Survival GuideDDoS: Survival Guide
DDoS: Survival Guide
 
Ddos
DdosDdos
Ddos
 
HPE adaptive backup and recovery
HPE adaptive backup and recoveryHPE adaptive backup and recovery
HPE adaptive backup and recovery
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
DDoS: Survival Guide
DDoS: Survival GuideDDoS: Survival Guide
DDoS: Survival Guide
 
Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)Масштабирование баз данных. (Database Scalability)
Масштабирование баз данных. (Database Scalability)
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 

Andere mochten auch

Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Fuenteovejuna
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Ontico
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Ontico
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
Ruslan Safin
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительность
OpenStackRU
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
IT-Portfolio
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Ontico
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
AvitoTech
 

Andere mochten auch (16)

Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительность
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Рецепты RabbitMQ
Рецепты RabbitMQ Рецепты RabbitMQ
Рецепты RabbitMQ
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
 
Wargaming web
Wargaming webWargaming web
Wargaming web
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 

Ähnlich wie 20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько кейсов из жизни "больших" проектов", Виталий Гаврилов

ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
Media Gorod
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 

Ähnlich wie 20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько кейсов из жизни "больших" проектов", Виталий Гаврилов (20)

Решения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов храненияРешения Dell для защиты данных и оптимизации ресурсов хранения
Решения Dell для защиты данных и оптимизации ресурсов хранения
 
SimpliVity
SimpliVitySimpliVity
SimpliVity
 
Защита данных от Dell Software: краткий обзор и планы развития продуктов
Защита данных от Dell Software: краткий обзор и планы  развития продуктов   Защита данных от Dell Software: краткий обзор и планы  развития продуктов
Защита данных от Dell Software: краткий обзор и планы развития продуктов
 
Технология плоского_прямого резервного копирования
Технология плоского_прямого резервного копированияТехнология плоского_прямого резервного копирования
Технология плоского_прямого резервного копирования
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Повышаем отказоустойчивость без дорогих решений
Повышаем отказоустойчивость без дорогих решенийПовышаем отказоустойчивость без дорогих решений
Повышаем отказоустойчивость без дорогих решений
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Highload 2011-demona
Highload 2011-demonaHighload 2011-demona
Highload 2011-demona
 
Magento performance
Magento performanceMagento performance
Magento performance
 
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
Symantec Backup Exec 2014 vs. Acronis Backup And Recovery 11.5
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Защита данных от Dell Software
Защита данных от Dell SoftwareЗащита данных от Dell Software
Защита данных от Dell Software
 
Защита данных от Dell Software
Защита данных от Dell SoftwareЗащита данных от Dell Software
Защита данных от Dell Software
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Дедупликацию в каждый ЦОД
Дедупликацию в каждый ЦОДДедупликацию в каждый ЦОД
Дедупликацию в каждый ЦОД
 

Mehr von IT-Portfolio

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
 

Mehr von IT-Portfolio (12)

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
 

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
  • 4. Хитрости проекта с использованием СУБД PostgreSQL, оптимизированного под высокие нагрузки Раздел 1.
  • 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
  • 6. Хитрости проекта с использованием СУБД PostgreSQL
  • 7. Хитрости проекта с использованием СУБД 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 Наличие резервной копии не гарантирует оперативное восстановление Резервное копирование высоконагруженного проекта: проблемы и решения  необходимо регулярно проводить процедуры тестового восстановления системы  процедура должна выполняться как минимум после каждого внесения изменений в конфигурацию
  • 20. Особенности построения проекта, распределенного на 2 и более датацентрах Раздел 3.
  • 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/
  • 28. Управляемое статическое кеширование, как способ снижения нагрузки
  • 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” (дает устойчивость к «скачкам» посещаемости, не позволяет оперативно управлять обновлением кеша) Использование управляемого статического кеширования (решает все поставленные задачи)
  • 31. Управляемое статическое кеширование, как способ снижения нагрузки тел.: +7 (812) 322-95-87 info@lenvendo.ru
  • 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 систем» С удовольствием отвечу на ваши вопросы!