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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

734
views

Published on

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

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
734
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
2
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Демоны в большом проекте –проблемы и их решенияАлександр ЧистяковМладший системный администратор Cezurityadmin@cezurity.com2013 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 vsPostgreSQL на стульях и швабрах вперерыве)• ORM (расшифровывается как “я не знаюSQL”)• Кэшdev.it-portfolio.net 11
  • 12. Архитектура нетипичного веб-проекта• СУБД? (schemaless document-oriented fastscalable 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? SQLxor NoSQL?)• Очереди• Шардинг• Кэш• BigDatadev.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 toScala” звучат как приговор)– Beanstalkd (кто-нибудь в зале слышал?)• Выбор пал на RabbitMQdev.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 -10000dev.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 кукбуков в Chefdev.it-portfolio.net 32
  • 33. Стоп, а что это все-таки, HBase?• Это такое key-value хранилище• В котором ключи сохраняют отношениепорядка• Потому что используется LSM tree• Позволяет извлекать данные не только поконкретным ключам, но и делать rangescans• На уровне отдельной строки - атомарность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 nodedev.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 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. Лист ненависти• Прочь с моего облака! (с) The Rolling Stones• Node.JS есть? А если найду?• Крокфорда читали?• Node.JS был выбран, «потому что онбыстрый»• Анекдот про скорость печати в 400символов в минуту• Use statically typed languages, Luke!dev.it-portfolio.net 40
  • 41. Выводы• Абсолютное большинство проблем – не всофте, а в голове• Надо только вовремя понять, в чьей (всвоей, или в голове разработчика сервиса)• Если вы берете в проект сервис, вампридется на нем жениться быть готовымподдерживать его код• Очень важно помнить про картинку №1dev.it-portfolio.net 41
  • 42. Пора закругляться• Если погода хорошая – поблагодарить• Если погода плохая – извиниться за то, чтопришлось ее испортить• Вопросы?• Голосуйте за меня на http://devconf.ru/offers• http://twitter.com/noatbaksap• http://github.com/alexcleardev.it-portfolio.net 42

×