«Стачка-2017»: подводим итоги международной ИТ-конференции
По итогам мероприятия Денис Черносов подготовил небольшой отчет о некоторых докладах, которые показались ему наиболее интересными.
В докладе Антона Степаненко (Lazada) "Нагрузочное тестирование по-живому" слушателям рассказали, что можно проводить нагрузочное тестирование на продуктовом сервере, если соблюдать некоторые правила, из которых особо примечательны следующие:
- В сервисы встраиваются нагрузочные "предохранители", т.е. сервис обрабатывает клиентов до заданного в конфигураторе лимита одновременных подключений, а всех, кто свыше, сразу обламывает. Это уменьшает вероятность прихода системы в неконсистентное состояние.
- График запуска нагрузочных тестов согласовывается с известными и предполагаемыми пиками пользовательской активности. Обычно запускают ночью, в выходные дни и т.п.
- На данный момент тестируются GET-роуты (не модифицирующие данные). Для того, чтобы проверять остальной функционал, нужна поддержка маркеров фейкового-трафика (заголовки, куки и т.п.), чтобы в нужных местах только имитировать активность.
- При анализе графики совмещаются с логами активности систем тестирования (т.е. можно видеть, например, метки начала/конца нагрузочного тестирования и соотносить их с изменениями на графике). Такая практика называется "End-to-End Tracing" (сквозные id для событий в разных системах, связанных с одной задачей).
В ходе доклада Алексея Палажченко "Профилирование и оптимизация программ на Go" наш коллега Денис сделал некоторые пометки, хотя пока на этом языке программирования не пишет:
- В Go нет виртуальной машины, поэтому отладка и профилирование приложений достаточно нетривиальный процесс (забавный факт, но на другом докладе было озвучено, что в Go с отладкой всё отлично) и профилировать нужно с самого начала, когда ваше приложение ещё небольшое. И, в основном, сравнивать отчёты между "коммитами".
- При написании тестов нужно быть очень внимательным, потому что компилятор не дремлет и может выпилить из вашего теста всю суть и смысл, если посчитает, что результаты вычислений никому не нужны.
- При отладке параллельных вычислений обвязка для эмуляции параллельности вполне может работать дольше полезного кода.
- Как это ни печально, но лучше не запускать профилировочные тесты в виртуальных машинах. Нужно выключить АУП (автоматическое управление питанием), чтобы ОС не пыталась включать/отключать процессоры. Не нужно ничего делать на машине во время тестов - это может сильно повлиять на результаты.
- Помимо собственных инструментов профилирования, можно использовать родные Линуксовые.
Докладчик также приводит цитату о полезности учёта тонкостей задачи при применении оптимизаций (Rob Pike's 5 Rules of Programming):
"Fancy algorithms are slow when n is small, and n is usually small."
Что означает: сложные алгоритмы медленны, при малых n, а n часто бывает мало.
Александр Макаров (Соавтор и разработчик, Yii Framework) с темой "OpenSource изнутри" рассказал, что OpenSource - это очень круто по многим параметрам, но кроме денег. А в тех схемах, в которых деньги есть (например, консалтинг или приглашение на высокооплачиваемую работу на full time, как следствие известности по активности в OpenSource), появляется конфликт бизнес-интересов с задачами собственно OpenSource-проекта и могут всплывать дополнительные риски (например, для лицензионной чистоты подписывается соглашение разработчика с компанией, что ВЕСЬ код, который будет написан в период работы в компании - станет её собственностью).
Доклад генерального директора Postgres Professional Олега Бартунова на тему "Postgres как NoSQL-база данных" собрал в зале около 300 человек. В ходе доклада Олег рассказал, что Postgres Pro вскоре предоставит улучшения, которые попозже появятся и в стандартной версии. Но самой неожиданной в рамках доклада была информация, что JSONB - это часть нового стандарта SQL-2016. И реализация уже тоже сделана. Так что теперь ждём улучшений в PostgresPro 10 в этом году и в PostgreSQL 11. И, кстати, всех заинтересованных приглашают к тестированию и отправки баг-реквестов. Очень помогут тестовые наборы данных.
Дмитрий Иванов (Developer, Postgres Professional) с докладом "Секционирование и шардинг в PostgreSQL при помощи pg_pathman" представил крутые экстеншены для облегчения задач партиционирования и шардирования. А также для оптимизации запросов к партиционированным и шардированным данным. Причём, настолько минимальными вмешательствами, что можно только аплодировать. А на другой день ещё провели мастер-класс по этим возможностям.
К сожалению, пока решение не вполне интегрировано с другой свежей фишкой: HA claster (multimaster), хотя цели такие есть.
Расширение можно собрать для версий 9.5+, готовятся прекомпилированные сборки и образы docker для желающих поэкспериментировать. В PostgresPro появится из коробки в 10-й версии. В стандартной версии, видимо, уже с 11-й, но это не точно.
Дмитрий Еманов (Ведущий разработчик, FirebirdSQL Project) в докладе "Механизмы резервирования и обеспечения высокой доступности в Firebird" рассказал о том, как их проект постепенно набирает обороты, укорачивает релизы и внедряет давно востребованные фичи. В этот раз речь шла о сложностях, связанных с бэкапами, репликами, кластерами и прочими насущными проблемами больших проектов. Например, ребятам пока не даётся тема с мультимастером, кластерные возможности в основном на внешних инструментах работают - но это совершенно нормальный ход событий.
Зато и бинарная, и логическая репликации поддерживаются из коробки (или будут в ближайшей версии), а это уже покрывает значительный объём кейсов.
Наш коллега Денис Черносов на этом докладе узнал несколько интересных трюков. Например, нужно получить "горячее" резервирование (когда слэйв может в любой момент стать мастером, без потери данных), но с минимизацией потерь на синхронность внесения изменений в мастер и реплику. Делаем репликацию синхронной, но запись в ФС на мастере - асинхронной. Т.е. окончательно записываются изменения сначала на слэйве, а уже потом на мастере. И, в случае отказа мастера, слэйв содержит самые свежие данные.
Иван Панченко (заместитель генерального директора, Postgres Professional) представил очень мощный доклад "Кластеры в Postgres или Postgres в кластерах". Иван сделал обзор задач кластеризации и различных вариантов реализации HA claster (multimaster) на форках Postgres. Всё либо слабовато по возможностям, либо тухловато, либо рискованно ввиду отставания форка по релизам. С некоторыми просто туман - то ли есть они, то ли уже загнулись.
Но теперь есть классический отказоустойчивый кластер Gorynych, который будет продвигаться в основную ветку Postgres. В системе отсутствуют единые точки отказа, исключена ситуация SplitBrain и при этом довольно низкие накладные расходы на обеспечение отказоустойчивой репликации, что Иван и продемонстрировал в конце доклада на своём ноутбуке. Это весьма и весьма впечатляющие результаты.
Очень интересный доклад Ивана Евтуховича (Генеральный директор, Express42) на тему "Ключевые DevOps-практики" о том, что такое DevOps и почему его нужно внедрять во все слои и закоулки организации. Иван во время доклада упомянул закон Конвея, процитировал, что "самая твёрдая часть software - это люди", а решать, что с этим делать - вопрос за рамками IT. Кроме того, докладчик отрекламировал переводную книгу "Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему". Книга из серии must read для каждого, кто умеет читать!
Еще один интересный и необычный доклад был от Алексея Вахова (Технический директор, Учи.ру) на тему "DevOps или искусство выживания в растущей компании" о том, какой профит растущая фирма может получать от перемещения в облака, автоматизации всех процессов с постоянным их "выпрямлением" и предельно возможным упрощением, непрерывного мониторинга и т.п. Кроме того, Алексей рассказал про первичный вариант масштабирования приложения, написанного на медленном языке (Ruby). Основной совет - не жалейте серверов. Это зачастую дешевле, чем тонкие оптимизации.
Докладчик также подметил некоторые нюансы конфигурирования докера при пробросе портов, чтобы случайно не выкинуть на внешние интерфейсы внутренние приложения, отметил, что в конфигах нередко копипаст предпочтительнее, чем навороченная логика параметризации и наследования, потому что опять же "выпрямляет" процессы и делает их более изолированными.
Алексей еще упомянул, что для уверенности в целостности бэкапов, нужно заставить их работать: например поднимать реплики и тестовые окружения и что, когда команды разработки допущены до продуктовых серверов, это повышает их осведомлённость и ответственность.
"Человеческого фактора не существует. Человек всегда действует наилучшим образом, исходя из своего понимания ситуации. Если он серьезно ошибся — значит, неправильно понял ситуацию. В случае с компьютерными интерфейсами виновата в этом система, не человек." (https://antonz.ru/human-factor/)
Красной нитью через рассказ проходит идея о том, что вынос инфраструктурных проблем в облака позволяет высвободить силы для собственно бизнеса, его предметной области.
Про ещё один опыт разработки в облаке (AWS) и DevOps силами разработчиков (а далее и менеджеров) рассказал Илья Жиленков (Castle) в докладе Docker in Production: Successes, Frustrations and Lessons Learned.
Главная информация, которую можно выделить - это критерии, по которым можно понять, стоит какой-то сервис помещать в Docker или нет:
- время жизни - чем более сервис долгоживущий (долго исполняет отдельную операцию), тем меньше причин использовать docker.
- состояние - statefull-контейнеры доставляют боль.
Таким образом:
++ web-server, application server (stateless, short life)
+- background Jobs, Integration (statefull, shortlife)
-+ DevOps environment: monitoring, etc (stateless, longlife)
-- Databases, CI/CD-Servers (statefull, longlife)
Но, к примеру, для поднятия одноразового тестового окружения, БД можно положить в контейнер.
Очень подробный доклад о том, как поддерживать и развивать безопасность при DevOps-подходе был у Валерия Боронина (Head of SDL Solutions Dept, R&D, Positive Technologies) на тему "SecDevOps. Разработка, DevOps и безопасность. Расширяем безопасную разработку (SDL) на стадию «после релиза»".
Докладчик смог донести мысль, что DevOps - это намного больше, чем кентавр из сисадмина и разработчика. Это философия, не менее мощная, чем Agile. А потому - всепроникающая. Главная идея доклада - меры по обеспечению безопасности должны также бескомпромиссно автоматизироваться, как и другие процессы. Иначе это будет не помощник, а тяжёлый камень на шее. С другой стороны, автоматизированные проверки позволяют поднять уверенность в безопасности продукта на немыслимые высоты.
Впрочем, докладчик об этом всём говорил без лишнего пафоса и упирал на то, что изменения должны вноситься малыми порциями, эволюционно. Ну как и всё в DevOps: чем мельче изменение, тем легче им управлять.
Доклад Армана Яхина (Генеральный директор, Main Road|Post) "Фильм "Притяжение" - взгляд из-за кулис" стал приятным завершением долгого насыщенного первого дня. Показывали промо-ролики по работам студии, рассказали про фазы роста кампании от 5 человек до over 150, про то, что SCRUM позволил решить проблемы роста компании, что программисты в компании играют не меньшую роль, чем дизайнеры. Ну и про то, что фильмы, как дети - и авторы любят их все, независимо от того, насколько те "выстрелили".
Напомним, международная конференция «Стачка» проводится в Ульяновской области с 2012 года. Цели мероприятия – это предоставление ИТ-специалистам возможности обмена опытом и получения узкопрофильных знаний. 14-15 апреля с докладами на конференции выступилт представители самых авторитетных ИТ-компаний России и зарубежья. В этом году участники «Стачки» смогли послушать свыше 200 докладов от 500 спикеров. На мероприятии работали одновременно 10 площадок.
Организаторами конференции выступили ульяновские ИТ-компании MST digital agency, Simtech, Interra Group, ADVANTSHOP, SimbirSoft, ArgentaTeam и Ассоциация развития информационных технологий при поддержке Правительства Ульяновской области.
Некоторые доклады можно посмотреть: