SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Демоны в большом проекте –
проблемы и их решения
Александр Чистяков
Младший системный администратор Cezurity
admin@cezurity.com
2013 dev.it-portfolio.net
Кто я?
• Топ-менеджер РАО ЕЭС
• Муж певицы Глюк’оZa
• Подрабатываю в компании Cezurity
системным администратором
dev.it-portfolio.net 2
Кто вы?
• 91.89% - Windows users
• 6.94% - OS X users
• 1.17% - Linux users
• Вы слышали про компьютерные вирусы?
• Если не слышали, вирус – это такая
программа для устаревших операционных
систем, несанкционированно
модифицирующая их работу
dev.it-portfolio.net 3
Отказ от ответственности
• Верите презентациям на слово?
картинка №1 (очень важная)
dev.it-portfolio.net 4
Чем занимается Cezurity?
• Создание облачного антивируса
• Целевая аудитория – те самые 91.89%
• Как мы уже выяснили, Windows в зале ни у
кого нет, поэтому речь пойдет не об
антивирусе, а о
• ВЫСОКИХ НАГРУЗКАХ
dev.it-portfolio.net 5
Что такое высокие нагрузки?
• Как установили ученые (британские), еще
викинги занимались созданием
высоконагруженных сайтов, они просто не
знали, что это – высоконагруженные сайты
• Высокие нагрузки – это когда вам
позвонили среди ночи, сообщить о том, что
все упало
• Где нагрузка выше: VK или Одоклассники?
dev.it-portfolio.net 6
Как викинги делали сайты?
• Методология “Фигак-фигак и в продакшн”
• У веб проекта должна быть архитектура!
• Со времен викингов проще жить не стало
dev.it-portfolio.net 7
А что такое архитектура?
• Веб-проект состоит из квадратиков
• Квадратики можно найти в сети и скачать!
• Если скачивать все найденные в сети
квадратики, к окончанию проекта успеете
• Многообразие квадратиков порождает
комбинаторный взрыв, следовательно
• Нужно знать, какие квадратики скачать!
dev.it-portfolio.net 8
Откуда мы знаем, что скачивать?
• “Берите тот дистрибутив Linux, который
стоит у вашего районного Linux-гуру”
• “Никто не был уволен за покупку Cisco”
• “Вся бытовая техника в доме должна быть
одного производителя”
• …и тому подобная чушь
dev.it-portfolio.net 9
Откуда мы знаем, что скачивать?
• А мы не знаем
• Некоторые квадратики попадают в проект,
потому что у команды есть предыдущий
опыт с ними (или языком/платформой)
• Некоторые квадратики попадают в проект
после сравнения свойств нескольких
кандидатов и выбора наиболее
подходящего
dev.it-portfolio.net 10
Архитектура типичного веб-проекта
• Сервер приложений (неинтересно)
• Reverse-proxy (тривиально)
• СУБД (товарищеский матч MySQL vs
PostgreSQL на стульях и швабрах в
перерыве)
• ORM (расшифровывается как “я не знаю
SQL”)
• Кэш
dev.it-portfolio.net 11
Архитектура нетипичного веб-проекта
• СУБД? (schemaless document-oriented fast
scalable fault-tolerant near-realtime web2.0-
ready modern not-only-SQL storage)
• Очереди
• Шардинг
• BigData
– Аналитика
dev.it-portfolio.net 12
Итого, что нам было нужно
• СУБД?! (SQL or NoSQL? SQL and NoSQL? SQL
xor NoSQL?)
• Очереди
• Шардинг
• Кэш
• BigData
dev.it-portfolio.net 13
Техническая археология
• Проекту больше года, ключевые сервисы
уже на своих местах
• Попытка осмыслить пути выбора
составляющих архитектуры и оценить
достоинства и недостатки
dev.it-portfolio.net 14
SQL and NoSQL
• Необходимость не только писать данные в
базу, но еще и гарантированно читать их
обратно => старый добрый SQL
• Необходимость не просто читать данные,
но делать это быстро => рассмотрение
современных NoSQL решений
• Необходимость хранить данных больше,
чем влезает на один сервер (и на 2, и на 3)
dev.it-portfolio.net 15
Очереди
• Варианты:
– ActiveMQ (мир делится на Java-программистов
и не Java-программистов, среднего нет)
– RabbitMQ (5 баллов за маркетинг)
– ZeroMQ (не сервис, а библиотека)
– Kestrel (слова “a port of Starling from Ruby to
Scala” звучат как приговор)
– Beanstalkd (кто-нибудь в зале слышал?)
• Выбор пал на RabbitMQ
dev.it-portfolio.net 16
Впечатления Java-программиста
• Попытка прочесть и понять спецификацию
AMQP вызывает судороги
• Ни одна клиентская библиотека толком не
реализует поддержку AMQP keepalive
• Большая часть клиентских библиотек
похожа на студенческие курсовые
• Erlang – очень простой язык
• RabbitMQ чаще работает, чем не работает
dev.it-portfolio.net 17
Проблемы
• Написан на Erlang – надо знать Erlang
• Можно попробовать не знать Erlang, но
тогда конфигурация и эксплуатация
RabbitMQ будет вызывать неприятие
• Не можете понять Erlang – картинка №1!
• Очереди в памяти – при падении данные
теряются
• Памяти не хватает – все встает
dev.it-portfolio.net 18
Кто сказал «персистирование»?
• У нас уже есть PgQ (SkyTools)
• PgQ – это очереди поверх PostgreSQL
• Они работают хорошо
• Но дисковая подсистема на машинах, где
они развернуты, начинает работать плохо
• В RabbitMQ - диск лучше? Картинка №1!
• Большая часть наших сообщений живут
миллисекунды – зачем их персистировать?
dev.it-portfolio.net 19
Шардинг
• PL/Proxy – проект, позволяющий
организовать шардинг с использованием
хранимых процедур на PL
• (Как вы уже, наверное, догадались, мы
используем PostgreSQL)
dev.it-portfolio.net 20
Впечатления Java-программиста
• Хранимые процедуры это древнее зло
– Их сложно читать и понимать
– Их сложно отлаживать
– Сложно анализировать slow query log, так как
там не запросы, а вызовы хранимок
• К счастью, шардинг с помощью PL/Proxy
(пока) работает как часы
• (Кстати, PL/Proxy используется в Skype)
dev.it-portfolio.net 21
Кэш
• Варианты:
– memcached (в названии есть слово “cache”)
– Redis (в названии нет слова “cache”)
– MongoDB (“MongoDB is web scale!”)
– Membase/Couchbase (в названии все время
разные слова, И ЭТО НЕСПРОСТА, все мои
попытки внедрить Membase заканчивались
срочной эвакуацией с него)
dev.it-portfolio.net 22
Memcached
• Очевидный выбор
• С точки зрения топ-менеджера РАО ЕЭС
представляет собой slab allocator с lock-free
структурами данных, MVCC и evented I/O
• Просто работает, причем, у многих
• Не поддерживает объединение ключей в
множества (тегирование ключей, списки)
dev.it-portfolio.net 23
Redis
• Второй очевидный выбор
• Поддерживает списки
• Может работать как кэш, а может – как БД
• По умолчанию сохраняет данные на диск
dev.it-portfolio.net 24
MongoDB
• Судя по деталям реализации, была
написана викингами
• У нас отсутствует достаточный запас боевых
мухоморов, чтобы пытаться внедрить
продукт, технические решения в котором
долгое время противоречили здравому
смыслу (no WAL, global lock, random crashes
и другие атрибуты web2.0-ready решения)
dev.it-portfolio.net 25
Неочевидный вариант
• MySQL + HandlerSocket
• Не рассматривался никем, кроме меня –
все-таки, у антивирусной компании потоки
данных совсем не такие, как у типичного
веб-проекта
• Поэтому писать на диск данные из кэша
нам не надо – «горячие» данные все время
разные
dev.it-portfolio.net 26
Итак, Redis
• Сначала мы пытались использовать его еще
и как базу (без вытеснения)
• Два типа данных – с установленным
expiration date и персистентные
• Когда место в памяти заканчивается, Redis
перестает записывать данные
• Почему заканчивается место в памяти?
• Redis ведет slow log (у нас до 400-600 Mb)
dev.it-portfolio.net 27
Redis – итоговые настройки
• Вытеснять все без разбора:
– maxmemory-policy allkeys-lru
• Ничего не сохранять на диск: #save
• (Кстати, Redis долго читает состояние с
диска при рестартах, если оно есть)
• Если сохранение на диск было отключено
не сразу, надо стереть дамп
• slowlog-log-slower-than -10000
dev.it-portfolio.net 28
Redis – после внедрения
• Мы не используем репликацию (нет смысла
в силу особенности бизнеса)
• Мы храним данные в разных базах одного
инстанса и в нескольких разных инстансах
• Активно используем списки
• Мы не сразу нашли, куда расходуется
память, и даже хотели ее профайлить
• В целом, мы довольны
dev.it-portfolio.net 29
BigData
• Антивирусная компания – это очень много
данных, даже когда клиентов мало
• Данные нужно не только записать, но и
прочитать
• И не только прочитать, но и обработать
• Например, если в файле обнаружен новый
вирус, нужно сообщить всем клиентам, у
которых был такой файл
dev.it-portfolio.net 30
BigData
• Нельзя просто взять, и сложить все на одну
машину
• Варианты:
– RIAK, Cassandra, MongoDB, ТЫСЯЧИ ИХ
(eventually consistent == eventually inconsistent)
– HBase (strongly consistent)
– Vertica (стоит денег)
– Greenplum (стоит денег)
dev.it-portfolio.net 31
HBase - развертывание
• Раньше я ничего не говорил про это, так как
развертывание Redis, RabbitMQ,
memcached, etc - тривиально
• HBase развернуть тоже несложно – сначала
нужен ZooKeeper cluster
• Стойте, как я сказал, «несложно»?
• 5 сервисов на мастер-ноде, по 3 на слейвах
• 8 кукбуков в Chef
dev.it-portfolio.net 32
Стоп, а что это все-таки, HBase?
• Это такое key-value хранилище
• В котором ключи сохраняют отношение
порядка
• Потому что используется LSM tree
• Позволяет извлекать данные не только по
конкретным ключам, но и делать range
scans
• На уровне отдельной строки - атомарность
dev.it-portfolio.net 33
HBase – эксплуатация
• Ручки у HBase везде, и крутить их можно в
разные стороны
• Мы пока начинаем, и настраивали только
region size и max KeyValue size в сторону
увеличения
• Клиенты у нас на Python, работают через
Thrift
• Thrift-сервер требует больше памяти, чем
мог бы (Java-программист во мне смеется)
dev.it-portfolio.net 34
Из чего состоит HBase?
• ZooKeeper – координатор
• HDFS – распределенная файловая система
• Сервисы самого HBase поверх HDFS
• Сломаться может везде:
– ZooKeeper может потерять кворум из-за
задержек ответа нод
– Файловая система может потребовать
проверки
– master node может умереть
dev.it-portfolio.net 35
Как обеспечивать устойчивость?
• Подстроить сетевые таймауты
• Поставить рядом второй кластер и делать
репликацию данных на него
• Либо быть готовым к проверке файловой
системы в ручном автоматическом режиме
• Дублировать master node
dev.it-portfolio.net 36
Так в ручном или не в ручном?
• А что может сломаться на файловой
системе, когда вышестоящие сервисы
обеспечивают strong consistency?
• Write-ahead logs
• Что-то потеряли в WALs?
– Картинка №1!
• Автоматическая проверка – хорошо, но
может быть долго
dev.it-portfolio.net 37
Перспективный план
• Научиться ломать HBase
• Научиться чинить HBase
• Научиться редко ломать HBase
• Научиться быстро чинить HBase
• ????????
• В октябре прочитать про это большой
доклад
dev.it-portfolio.net 38
В анонсе было про Node.JS
• Каково назначение Node.JS в
инфраструктуре?
• Генерировать непонятные эксепшны вида
[2013-04-19 22:21:41.987] [FATAL] daemon - !! Unhandled exception !! TypeError: Object [object Object] has no method 'destroy'
at onclose (stream.js:74:10)
at EventEmitter.emit (events.js:115:20)
at RequestStream.destroy (/opt/node-server/lib/http_server.js:220:7)
at IncomingMessage.onclose (stream.js:74:10)
at IncomingMessage.EventEmitter.emit (events.js:115:20)
at abortIncoming (http.js:1649:11)
at CleartextStream.serverSocketCloseListener (http.js:1659:5)
at CleartextStream.EventEmitter.emit (events.js:115:20)
at SecurePair.destroy (tls.js:907:22)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
dev.it-portfolio.net 39
Лист ненависти
• Прочь с моего облака! (с) The Rolling Stones
• Node.JS есть? А если найду?
• Крокфорда читали?
• Node.JS был выбран, «потому что он
быстрый»
• Анекдот про скорость печати в 400
символов в минуту
• Use statically typed languages, Luke!
dev.it-portfolio.net 40
Выводы
• Абсолютное большинство проблем – не в
софте, а в голове
• Надо только вовремя понять, в чьей (в
своей, или в голове разработчика сервиса)
• Если вы берете в проект сервис, вам
придется на нем жениться быть готовым
поддерживать его код
• Очень важно помнить про картинку №1
dev.it-portfolio.net 41
Пора закругляться
• Если погода хорошая – поблагодарить
• Если погода плохая – извиниться за то, что
пришлось ее испортить
• Вопросы?
• Голосуйте за меня на http://devconf.ru/offers
• http://twitter.com/noatbaksap
• http://github.com/alexclear
dev.it-portfolio.net 42

Weitere ähnliche Inhalte

Was ist angesagt?

NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)Ontico
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Ontico
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Ontico
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)Ontico
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущегоAlex Chistyakov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014Alex Chistyakov
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)Ontico
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsDaniel Podolsky
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQLAlex Chistyakov
 

Was ist angesagt? (20)

NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущего
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQL
 

Andere mochten auch

Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАндрей Федоровский
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Ontico
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 
презентация по очередям
презентация по очередямпрезентация по очередям
презентация по очередямCyrill Abramov
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Ontico
 

Andere mochten auch (6)

Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, Comet
 
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
презентация по очередям
презентация по очередямпрезентация по очередям
презентация по очередям
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
 

Ähnlich wie 20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков

Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...GeeksLab Odessa
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...Mail.ru Group
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 

Ähnlich wie 20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков (20)

Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Sivko
SivkoSivko
Sivko
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 

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 веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {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
 
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
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...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 веб-разработке, "Шардинг в...
 
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 веб-разработке. "Архитектура п...
 

20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков

  • 1. Демоны в большом проекте – проблемы и их решения Александр Чистяков Младший системный администратор Cezurity admin@cezurity.com 2013 dev.it-portfolio.net
  • 2. Кто я? • Топ-менеджер РАО ЕЭС • Муж певицы Глюк’оZa • Подрабатываю в компании Cezurity системным администратором dev.it-portfolio.net 2
  • 3. Кто вы? • 91.89% - Windows users • 6.94% - OS X users • 1.17% - Linux users • Вы слышали про компьютерные вирусы? • Если не слышали, вирус – это такая программа для устаревших операционных систем, несанкционированно модифицирующая их работу dev.it-portfolio.net 3
  • 4. Отказ от ответственности • Верите презентациям на слово? картинка №1 (очень важная) dev.it-portfolio.net 4
  • 5. Чем занимается Cezurity? • Создание облачного антивируса • Целевая аудитория – те самые 91.89% • Как мы уже выяснили, Windows в зале ни у кого нет, поэтому речь пойдет не об антивирусе, а о • ВЫСОКИХ НАГРУЗКАХ dev.it-portfolio.net 5
  • 6. Что такое высокие нагрузки? • Как установили ученые (британские), еще викинги занимались созданием высоконагруженных сайтов, они просто не знали, что это – высоконагруженные сайты • Высокие нагрузки – это когда вам позвонили среди ночи, сообщить о том, что все упало • Где нагрузка выше: VK или Одоклассники? dev.it-portfolio.net 6
  • 7. Как викинги делали сайты? • Методология “Фигак-фигак и в продакшн” • У веб проекта должна быть архитектура! • Со времен викингов проще жить не стало dev.it-portfolio.net 7
  • 8. А что такое архитектура? • Веб-проект состоит из квадратиков • Квадратики можно найти в сети и скачать! • Если скачивать все найденные в сети квадратики, к окончанию проекта успеете • Многообразие квадратиков порождает комбинаторный взрыв, следовательно • Нужно знать, какие квадратики скачать! dev.it-portfolio.net 8
  • 9. Откуда мы знаем, что скачивать? • “Берите тот дистрибутив Linux, который стоит у вашего районного Linux-гуру” • “Никто не был уволен за покупку Cisco” • “Вся бытовая техника в доме должна быть одного производителя” • …и тому подобная чушь dev.it-portfolio.net 9
  • 10. Откуда мы знаем, что скачивать? • А мы не знаем • Некоторые квадратики попадают в проект, потому что у команды есть предыдущий опыт с ними (или языком/платформой) • Некоторые квадратики попадают в проект после сравнения свойств нескольких кандидатов и выбора наиболее подходящего dev.it-portfolio.net 10
  • 11. Архитектура типичного веб-проекта • Сервер приложений (неинтересно) • Reverse-proxy (тривиально) • СУБД (товарищеский матч MySQL vs PostgreSQL на стульях и швабрах в перерыве) • ORM (расшифровывается как “я не знаю SQL”) • Кэш dev.it-portfolio.net 11
  • 12. Архитектура нетипичного веб-проекта • СУБД? (schemaless document-oriented fast scalable fault-tolerant near-realtime web2.0- ready modern not-only-SQL storage) • Очереди • Шардинг • BigData – Аналитика dev.it-portfolio.net 12
  • 13. Итого, что нам было нужно • СУБД?! (SQL or NoSQL? SQL and NoSQL? SQL xor NoSQL?) • Очереди • Шардинг • Кэш • BigData dev.it-portfolio.net 13
  • 14. Техническая археология • Проекту больше года, ключевые сервисы уже на своих местах • Попытка осмыслить пути выбора составляющих архитектуры и оценить достоинства и недостатки dev.it-portfolio.net 14
  • 15. SQL and NoSQL • Необходимость не только писать данные в базу, но еще и гарантированно читать их обратно => старый добрый SQL • Необходимость не просто читать данные, но делать это быстро => рассмотрение современных NoSQL решений • Необходимость хранить данных больше, чем влезает на один сервер (и на 2, и на 3) dev.it-portfolio.net 15
  • 16. Очереди • Варианты: – ActiveMQ (мир делится на Java-программистов и не Java-программистов, среднего нет) – RabbitMQ (5 баллов за маркетинг) – ZeroMQ (не сервис, а библиотека) – Kestrel (слова “a port of Starling from Ruby to Scala” звучат как приговор) – Beanstalkd (кто-нибудь в зале слышал?) • Выбор пал на RabbitMQ dev.it-portfolio.net 16
  • 17. Впечатления Java-программиста • Попытка прочесть и понять спецификацию AMQP вызывает судороги • Ни одна клиентская библиотека толком не реализует поддержку AMQP keepalive • Большая часть клиентских библиотек похожа на студенческие курсовые • Erlang – очень простой язык • RabbitMQ чаще работает, чем не работает dev.it-portfolio.net 17
  • 18. Проблемы • Написан на Erlang – надо знать Erlang • Можно попробовать не знать Erlang, но тогда конфигурация и эксплуатация RabbitMQ будет вызывать неприятие • Не можете понять Erlang – картинка №1! • Очереди в памяти – при падении данные теряются • Памяти не хватает – все встает dev.it-portfolio.net 18
  • 19. Кто сказал «персистирование»? • У нас уже есть PgQ (SkyTools) • PgQ – это очереди поверх PostgreSQL • Они работают хорошо • Но дисковая подсистема на машинах, где они развернуты, начинает работать плохо • В RabbitMQ - диск лучше? Картинка №1! • Большая часть наших сообщений живут миллисекунды – зачем их персистировать? dev.it-portfolio.net 19
  • 20. Шардинг • PL/Proxy – проект, позволяющий организовать шардинг с использованием хранимых процедур на PL • (Как вы уже, наверное, догадались, мы используем PostgreSQL) dev.it-portfolio.net 20
  • 21. Впечатления Java-программиста • Хранимые процедуры это древнее зло – Их сложно читать и понимать – Их сложно отлаживать – Сложно анализировать slow query log, так как там не запросы, а вызовы хранимок • К счастью, шардинг с помощью PL/Proxy (пока) работает как часы • (Кстати, PL/Proxy используется в Skype) dev.it-portfolio.net 21
  • 22. Кэш • Варианты: – memcached (в названии есть слово “cache”) – Redis (в названии нет слова “cache”) – MongoDB (“MongoDB is web scale!”) – Membase/Couchbase (в названии все время разные слова, И ЭТО НЕСПРОСТА, все мои попытки внедрить Membase заканчивались срочной эвакуацией с него) dev.it-portfolio.net 22
  • 23. Memcached • Очевидный выбор • С точки зрения топ-менеджера РАО ЕЭС представляет собой slab allocator с lock-free структурами данных, MVCC и evented I/O • Просто работает, причем, у многих • Не поддерживает объединение ключей в множества (тегирование ключей, списки) dev.it-portfolio.net 23
  • 24. Redis • Второй очевидный выбор • Поддерживает списки • Может работать как кэш, а может – как БД • По умолчанию сохраняет данные на диск dev.it-portfolio.net 24
  • 25. MongoDB • Судя по деталям реализации, была написана викингами • У нас отсутствует достаточный запас боевых мухоморов, чтобы пытаться внедрить продукт, технические решения в котором долгое время противоречили здравому смыслу (no WAL, global lock, random crashes и другие атрибуты web2.0-ready решения) dev.it-portfolio.net 25
  • 26. Неочевидный вариант • MySQL + HandlerSocket • Не рассматривался никем, кроме меня – все-таки, у антивирусной компании потоки данных совсем не такие, как у типичного веб-проекта • Поэтому писать на диск данные из кэша нам не надо – «горячие» данные все время разные dev.it-portfolio.net 26
  • 27. Итак, Redis • Сначала мы пытались использовать его еще и как базу (без вытеснения) • Два типа данных – с установленным expiration date и персистентные • Когда место в памяти заканчивается, Redis перестает записывать данные • Почему заканчивается место в памяти? • Redis ведет slow log (у нас до 400-600 Mb) dev.it-portfolio.net 27
  • 28. Redis – итоговые настройки • Вытеснять все без разбора: – maxmemory-policy allkeys-lru • Ничего не сохранять на диск: #save • (Кстати, Redis долго читает состояние с диска при рестартах, если оно есть) • Если сохранение на диск было отключено не сразу, надо стереть дамп • slowlog-log-slower-than -10000 dev.it-portfolio.net 28
  • 29. Redis – после внедрения • Мы не используем репликацию (нет смысла в силу особенности бизнеса) • Мы храним данные в разных базах одного инстанса и в нескольких разных инстансах • Активно используем списки • Мы не сразу нашли, куда расходуется память, и даже хотели ее профайлить • В целом, мы довольны dev.it-portfolio.net 29
  • 30. BigData • Антивирусная компания – это очень много данных, даже когда клиентов мало • Данные нужно не только записать, но и прочитать • И не только прочитать, но и обработать • Например, если в файле обнаружен новый вирус, нужно сообщить всем клиентам, у которых был такой файл dev.it-portfolio.net 30
  • 31. BigData • Нельзя просто взять, и сложить все на одну машину • Варианты: – RIAK, Cassandra, MongoDB, ТЫСЯЧИ ИХ (eventually consistent == eventually inconsistent) – HBase (strongly consistent) – Vertica (стоит денег) – Greenplum (стоит денег) dev.it-portfolio.net 31
  • 32. HBase - развертывание • Раньше я ничего не говорил про это, так как развертывание Redis, RabbitMQ, memcached, etc - тривиально • HBase развернуть тоже несложно – сначала нужен ZooKeeper cluster • Стойте, как я сказал, «несложно»? • 5 сервисов на мастер-ноде, по 3 на слейвах • 8 кукбуков в Chef dev.it-portfolio.net 32
  • 33. Стоп, а что это все-таки, HBase? • Это такое key-value хранилище • В котором ключи сохраняют отношение порядка • Потому что используется LSM tree • Позволяет извлекать данные не только по конкретным ключам, но и делать range scans • На уровне отдельной строки - атомарность dev.it-portfolio.net 33
  • 34. HBase – эксплуатация • Ручки у HBase везде, и крутить их можно в разные стороны • Мы пока начинаем, и настраивали только region size и max KeyValue size в сторону увеличения • Клиенты у нас на Python, работают через Thrift • Thrift-сервер требует больше памяти, чем мог бы (Java-программист во мне смеется) dev.it-portfolio.net 34
  • 35. Из чего состоит HBase? • ZooKeeper – координатор • HDFS – распределенная файловая система • Сервисы самого HBase поверх HDFS • Сломаться может везде: – ZooKeeper может потерять кворум из-за задержек ответа нод – Файловая система может потребовать проверки – master node может умереть dev.it-portfolio.net 35
  • 36. Как обеспечивать устойчивость? • Подстроить сетевые таймауты • Поставить рядом второй кластер и делать репликацию данных на него • Либо быть готовым к проверке файловой системы в ручном автоматическом режиме • Дублировать master node dev.it-portfolio.net 36
  • 37. Так в ручном или не в ручном? • А что может сломаться на файловой системе, когда вышестоящие сервисы обеспечивают strong consistency? • Write-ahead logs • Что-то потеряли в WALs? – Картинка №1! • Автоматическая проверка – хорошо, но может быть долго dev.it-portfolio.net 37
  • 38. Перспективный план • Научиться ломать HBase • Научиться чинить HBase • Научиться редко ломать HBase • Научиться быстро чинить HBase • ???????? • В октябре прочитать про это большой доклад dev.it-portfolio.net 38
  • 39. В анонсе было про Node.JS • Каково назначение Node.JS в инфраструктуре? • Генерировать непонятные эксепшны вида [2013-04-19 22:21:41.987] [FATAL] daemon - !! Unhandled exception !! TypeError: Object [object Object] has no method 'destroy' at onclose (stream.js:74:10) at EventEmitter.emit (events.js:115:20) at RequestStream.destroy (/opt/node-server/lib/http_server.js:220:7) at IncomingMessage.onclose (stream.js:74:10) at IncomingMessage.EventEmitter.emit (events.js:115:20) at abortIncoming (http.js:1649:11) at CleartextStream.serverSocketCloseListener (http.js:1659:5) at CleartextStream.EventEmitter.emit (events.js:115:20) at SecurePair.destroy (tls.js:907:22) at process.startup.processNextTick.process._tickCallback (node.js:244:9) dev.it-portfolio.net 39
  • 40. Лист ненависти • Прочь с моего облака! (с) The Rolling Stones • Node.JS есть? А если найду? • Крокфорда читали? • Node.JS был выбран, «потому что он быстрый» • Анекдот про скорость печати в 400 символов в минуту • Use statically typed languages, Luke! dev.it-portfolio.net 40
  • 41. Выводы • Абсолютное большинство проблем – не в софте, а в голове • Надо только вовремя понять, в чьей (в своей, или в голове разработчика сервиса) • Если вы берете в проект сервис, вам придется на нем жениться быть готовым поддерживать его код • Очень важно помнить про картинку №1 dev.it-portfolio.net 41
  • 42. Пора закругляться • Если погода хорошая – поблагодарить • Если погода плохая – извиниться за то, что пришлось ее испортить • Вопросы? • Голосуйте за меня на http://devconf.ru/offers • http://twitter.com/noatbaksap • http://github.com/alexclear dev.it-portfolio.net 42