Your SlideShare is downloading. ×
0
Демоны в большом проекте –проблемы и их решенияАлександр ЧистяковМладший системный администратор Cezurityadmin@cezurity.co...
Кто я?• Топ-менеджер РАО ЕЭС• Муж певицы Глюк’оZa• Подрабатываю в компании Cezurityсистемным администраторомdev.it-portfol...
Кто вы?• 91.89% - Windows users• 6.94% - OS X users• 1.17% - Linux users• Вы слышали про компьютерные вирусы?• Если не слы...
Отказ от ответственности• Верите презентациям на слово?картинка №1 (очень важная)dev.it-portfolio.net 4
Чем занимается Cezurity?• Создание облачного антивируса• Целевая аудитория – те самые 91.89%• Как мы уже выяснили, Windows...
Что такое высокие нагрузки?• Как установили ученые (британские), ещевикинги занимались созданиемвысоконагруженных сайтов, ...
Как викинги делали сайты?• Методология “Фигак-фигак и в продакшн”• У веб проекта должна быть архитектура!• Со времен викин...
А что такое архитектура?• Веб-проект состоит из квадратиков• Квадратики можно найти в сети и скачать!• Если скачивать все ...
Откуда мы знаем, что скачивать?• “Берите тот дистрибутив Linux, которыйстоит у вашего районного Linux-гуру”• “Никто не был...
Откуда мы знаем, что скачивать?• А мы не знаем• Некоторые квадратики попадают в проект,потому что у команды есть предыдущи...
Архитектура типичного веб-проекта• Сервер приложений (неинтересно)• Reverse-proxy (тривиально)• СУБД (товарищеский матч My...
Архитектура нетипичного веб-проекта• СУБД? (schemaless document-oriented fastscalable fault-tolerant near-realtime web2.0-...
Итого, что нам было нужно• СУБД?! (SQL or NoSQL? SQL and NoSQL? SQLxor NoSQL?)• Очереди• Шардинг• Кэш• BigDatadev.it-portf...
Техническая археология• Проекту больше года, ключевые сервисыуже на своих местах• Попытка осмыслить пути выборасоставляющи...
SQL and NoSQL• Необходимость не только писать данные вбазу, но еще и гарантированно читать ихобратно => старый добрый SQL•...
Очереди• Варианты:– ActiveMQ (мир делится на Java-программистови не Java-программистов, среднего нет)– RabbitMQ (5 баллов ...
Впечатления Java-программиста• Попытка прочесть и понять спецификациюAMQP вызывает судороги• Ни одна клиентская библиотека...
Проблемы• Написан на Erlang – надо знать Erlang• Можно попробовать не знать Erlang, нотогда конфигурация и эксплуатацияRab...
Кто сказал «персистирование»?• У нас уже есть PgQ (SkyTools)• PgQ – это очереди поверх PostgreSQL• Они работают хорошо• Но...
Шардинг• PL/Proxy – проект, позволяющийорганизовать шардинг с использованиемхранимых процедур на PL• (Как вы уже, наверное...
Впечатления Java-программиста• Хранимые процедуры это древнее зло– Их сложно читать и понимать– Их сложно отлаживать– Слож...
Кэш• Варианты:– memcached (в названии есть слово “cache”)– Redis (в названии нет слова “cache”)– MongoDB (“MongoDB is web ...
Memcached• Очевидный выбор• С точки зрения топ-менеджера РАО ЕЭСпредставляет собой slab allocator с lock-freeструктурами д...
Redis• Второй очевидный выбор• Поддерживает списки• Может работать как кэш, а может – как БД• По умолчанию сохраняет данны...
MongoDB• Судя по деталям реализации, быланаписана викингами• У нас отсутствует достаточный запас боевыхмухоморов, чтобы пы...
Неочевидный вариант• MySQL + HandlerSocket• Не рассматривался никем, кроме меня –все-таки, у антивирусной компании потокид...
Итак, Redis• Сначала мы пытались использовать его ещеи как базу (без вытеснения)• Два типа данных – с установленнымexpirat...
Redis – итоговые настройки• Вытеснять все без разбора:– maxmemory-policy allkeys-lru• Ничего не сохранять на диск: #save• ...
Redis – после внедрения• Мы не используем репликацию (нет смыслав силу особенности бизнеса)• Мы храним данные в разных баз...
BigData• Антивирусная компания – это очень многоданных, даже когда клиентов мало• Данные нужно не только записать, но ипро...
BigData• Нельзя просто взять, и сложить все на однумашину• Варианты:– RIAK, Cassandra, MongoDB, ТЫСЯЧИ ИХ(eventually consi...
HBase - развертывание• Раньше я ничего не говорил про это, так какразвертывание Redis, RabbitMQ,memcached, etc - тривиальн...
Стоп, а что это все-таки, HBase?• Это такое key-value хранилище• В котором ключи сохраняют отношениепорядка• Потому что ис...
HBase – эксплуатация• Ручки у HBase везде, и крутить их можно вразные стороны• Мы пока начинаем, и настраивали толькоregio...
Из чего состоит HBase?• ZooKeeper – координатор• HDFS – распределенная файловая система• Сервисы самого HBase поверх HDFS•...
Как обеспечивать устойчивость?• Подстроить сетевые таймауты• Поставить рядом второй кластер и делатьрепликацию данных на н...
Так в ручном или не в ручном?• А что может сломаться на файловойсистеме, когда вышестоящие сервисыобеспечивают strong cons...
Перспективный план• Научиться ломать HBase• Научиться чинить HBase• Научиться редко ломать HBase• Научиться быстро чинить ...
В анонсе было про Node.JS• Каково назначение Node.JS винфраструктуре?• Генерировать непонятные эксепшны вида[2013-04-19 22...
Лист ненависти• Прочь с моего облака! (с) The Rolling Stones• Node.JS есть? А если найду?• Крокфорда читали?• Node.JS был ...
Выводы• Абсолютное большинство проблем – не всофте, а в голове• Надо только вовремя понять, в чьей (всвоей, или в голове р...
Пора закругляться• Если погода хорошая – поблагодарить• Если погода плохая – извиниться за то, чтопришлось ее испортить• В...
Upcoming SlideShare
Loading in...5
×

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

779

Published on

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

Аннотация
Когда команда разработчиков собирается написать новый сервис, у нее, как правило, отсутствует свободное время, но есть необходимый энтузиазм. Из-за нехватки времени многие архитектурные решения приходится принимать, руководствуясь общими соображениями, так как провести всесторонние тесты имеющихся на рынке средств в краткие сроки невозможно. Мы, специалисты компании Cezurity, начали свой проект не вчера, и уже накопили некоторый опыт использования технологий, появившихся сравнительно недавно - таких как Skytools, Node.JS, RabbitMQ и Redis. О том, какие возникли проблемы при внедрении этих средств, и какие их ограничения пришлось преодолевать и учитывать - мой доклад. Кроме того, я расскажу о новом направлении в нашей деятельности - внедрении HBase для хранения большого объема данных.

Биография
Докладчик - узкий специалист широкого профиля, относит себя к виду, называемому в современной англоязычной литературе термином "DevOps". Любит принимать участие в создании сложных систем и постоянно это делает. Никогда не работал в Яндексе, компенсировав это работой в Mail.Ru и некоторых других местах.

Published in: Technology
2 Comments
6 Likes
Statistics
Notes
No Downloads
Views
Total Views
779
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
2
Likes
6
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×