SlideShare a Scribd company logo
Демоны в большом проекте –
         проблемы и их решения
                    Александр Чистяков
         Младший системный администратор 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

More Related Content

What's hot

Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Николай Лавлинский
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Ontico
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Ontico
 
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
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
Ontico
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Ontico
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Oleg Tsarev
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
Nikolay Sivko
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
Oleg Tsarev
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
Alex Chistyakov
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
Ontico
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
Ontico
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
Daniel Podolsky
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
IT-Portfolio
 
Ryazan
RyazanRyazan
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 

What's hot (20)

Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
 
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
Приключения проекта от компьютера разработчика до серьезных нагрузок / Андрей...
 
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
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
Хайлоад и безопасность в мире DevOps: совместимы ли? / Юрий Колесов (security...
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)RTB DSP на языке Go укрощение buzzwords /  Даниил Подольский (Qmobi.Com)
RTB DSP на языке Go укрощение buzzwords / Даниил Подольский (Qmobi.Com)
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
RTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwordsRTB DSP на языке Go: укрощение buzzwords
RTB DSP на языке Go: укрощение buzzwords
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Ryazan
RyazanRyazan
Ryazan
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 

Viewers also liked

20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
IT-Portfolio
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Ontico
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Lenvendo
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Fuenteovejuna
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Ontico
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
Ruslan Safin
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительностьOpenStackRU
 
Рецепты RabbitMQ
Рецепты RabbitMQ Рецепты RabbitMQ
Рецепты RabbitMQ
Alexandre Kalendarev
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!
Ivan Tsyganov
 
Построение распределенной системы сбора данных с помощью 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
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
AvitoTech
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
AvitoTech
 

Viewers also liked (15)

20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
 
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 ...
 
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
Как разработать вычислительную инфраструктуру для большого кластера (Евгений ...
 
RabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работаетRabbitMQ - обмен сообщениями, который просто работает
RabbitMQ - обмен сообщениями, который просто работает
 
Отказоустойчивость и производительность
Отказоустойчивость и производительностьОтказоустойчивость и производительность
Отказоустойчивость и производительность
 
Рецепты 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)
 

Similar to Daemons In Web on #devrus

Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
GeeksLab Odessa
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
Ontico
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
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
Alex Chistyakov
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
Vladd Ev
 
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
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеit-people
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
Nikolay Samokhvalov
 
Устройство современного распределенного 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++ 2014
Alex Chistyakov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPI
Leonid Yuriev
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
Roman Dvornov
 

Similar to Daemons In Web on #devrus (20)

Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
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
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
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)
 
ekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилищеekbpy'2012 - Данила Штань - Распределенное хранилище
ekbpy'2012 - Данила Штань - Распределенное хранилище
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Sivko
SivkoSivko
Sivko
 
Устройство современного распределенного 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
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Highload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPIHighload++2013: TopGun - архитектура терабитной платформы DPI
Highload++2013: TopGun - архитектура терабитной платформы DPI
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 

More from Alex Chistyakov

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
Alex Chistyakov
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
Alex Chistyakov
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
Alex Chistyakov
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
Alex Chistyakov
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
Alex Chistyakov
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
Alex Chistyakov
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
Alex Chistyakov
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
Alex Chistyakov
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
Alex Chistyakov
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
Alex Chistyakov
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
Alex Chistyakov
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
Alex Chistyakov
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
Alex Chistyakov
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
Alex Chistyakov
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
Alex Chistyakov
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
Alex Chistyakov
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
Alex Chistyakov
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
Alex Chistyakov
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
Alex Chistyakov
 

More from Alex Chistyakov (20)

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 

Daemons In Web on #devrus

  • 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