Your SlideShare is downloading. ×
0
Впадая в крайности                           Решаем проблемы с Ruby on Rails                          http://www.slideshar...
О докладчике               • http://www.linkedin.com/in/moiseevsergey               • https://github.com/bopm             ...
В прошлых сериях               • https://vimeo.com/51198953               • http://www.slideshare.net/sergeymoiseev/      ...
Тема доклада               • Боль, давление, рельсы.               • Временной интервал 2011 год.               • Один из ...
Начинаем               • У нас тут есть Drupal, что бы ты мог нам                     предложить.               • Его пиля...
Январь 2011 года.Monday, February 25, 13
План действий               • Пишем новую версию на RoR.               • Мигрируем и начинаем развивать                   ...
Пишем ТЗ               • Пишем ТЗ на базе текущей системы.               • Всё на месте? Вроде да.               • Окей, б...
Первая итерация:                             прототип               •     Сделки, пользователи, покупки, регистрация.     ...
Postgresql               • Нет извечного конфликта какой storage                     engine выбрать.               • Лучше...
Devise               • Гибкое решение по аунтефикации для                     Rails.               • Очень эффективно для ...
OmniAuth               • Поддержка множества провайдеров                     аунтефикации.               • Поддерживает из...
Globalize3               •     Поддержка i18n на уровне базы.               •     Перевод атрибутов моделей во вспомогател...
Seed-fu               • Заполнение справочников в БД.               • Позволяет вам писать сиды, которые                  ...
Смена курса               • Заказчик меняет ген. дира.               • Бывшего представителем заказчика на                ...
Старая версия               • Нет VCS.                • Правят прямо на сервере.                • Наощупь.               •...
Технологии старой                           версии               • Один виртуальный сервер.               • Который админя...
Самое интересное               •     Заказчики не ведут формальную постановку задач                     при работе со стар...
Ищем выход               • С тонущей подводной лодки.               • Плюсы: у нас рельсы и написаный                     ...
Одновременно с этим               •     Спасаем вселенную в лице старого проекта каждый                     день (смотри д...
На дворе лето.Monday, February 25, 13
Миграция данных               •     Главный источник проблем.               •     Особенно когда база меняется без учета  ...
Мигрируем                 региональное зеркало               •     Начинаем в 20:00, заканчиваем к 02:30.               • ...
Проводим очередную            демонстрацию заказчику               • В таком дизайне это внедрять нельзя.               • ...
Нам нужны люди                             побольше               • Заказчик настаивает на наращивании штата.             ...
Миграция данных 2               • Выделяем постоянного специалиста.               • Теперь уже на основном объеме данных. ...
Resque               • Решение по созданию фоновых очередей.               • Поддерживает множественные очереди           ...
Миграция данных 3               • Пишем логику переноса в worker’ах.               • При логике одна задача - один        ...
Nginx               • Один из лучших веб-серверов. Четко                     ложится в наши планы по развертыванию.       ...
Monday, February 25, 13
Unicorn               • Hot restart.               • Долгие споры с DevOps на тему unix                     socket (~5-10%...
Кнопки как у apple               •     Дизайн будет делать наш человек.               •     Ему и нам не интересно, что пр...
На дворе зима.Monday, February 25, 13
Кнопки как у Apple 2               • Свой человек уходит.               • Как и в прошлый раз продолжаем делать           ...
Коммунистический                             субботник               •     Выгоднее всего работать по ночам.              ...
Decision Point               • На дворе конец ноября.               • Если не запустить проект сейчас, то не              ...
Запуск               •     Ночь с пятницы на понедельник.               •     Нагрузка на запущенных ранее зеркалах и осно...
Запуск 2               • DevOps с бекграундом во всем вообще                     очень полезный человек на проекте.       ...
Запуск 3               • Ведущий разработчик высказывает версию                     о том, что GC в ветке 1.9.x не должен ...
Новая прекрасная                               жизнь               • Все недовольны.               • Верните как было.    ...
Миграция данных 4               • Все чистые данные на месте, но есть куча                     проблемных.                ...
Деплой               • Больше всего времени съедает                     перекомпиляция ресурсов.               • Сейчас дл...
Производительность               •     Слишком интерактивная главная страница.               •     Переписываем на статиче...
Sinatra               •     Младший брат RoR, фреймворк для создания                     однофайловых веб-приложений.     ...
О высоких нагрузках               •     Вы стоите под очень толстой струей воды.               •     Пока написанный вами ...
Климат               •     http://issendai.livejournal.com/572510.html               •     Хочешь привязать к себе людей, ...
Климат 2               • Ведущий разработчик требует время на                     стабилизацию проекта.               • За...
Климат 3               • В отпуск мне сообщают, что я все                     испортил.               • Что ничего не рабо...
Внутренние цели               • На протяжении всего года я говорил                     себе, что взявшись за проект я не м...
Итог               • В первый рабочий день 2012 года я подаю                     заявление об увольнении.               • ...
Выученные уроки               • Дизайн нельзя менять вместе с                     платформой.               • Дизайн нельз...
P.S.Monday, February 25, 13
Благодарности               • Андрею, Антону, Лёше, Антону, Степану,                     Петру, Толе, Сергею, Леониду, Дим...
Другой взгляд на                             события               • http://www.slideshare.net/alexclear/                 ...
Upcoming SlideShare
Loading in...5
×

Going to extreme

572

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
572
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Going to extreme"

  1. 1. Впадая в крайности Решаем проблемы с Ruby on Rails http://www.slideshare.net/sergeymoiseev/going-to-extremeMonday, February 25, 13
  2. 2. О докладчике • http://www.linkedin.com/in/moiseevsergey • https://github.com/bopm • http://www.slideshare.net/sergeymoiseev • @SergeyMoiseevMonday, February 25, 13
  3. 3. В прошлых сериях • https://vimeo.com/51198953 • http://www.slideshare.net/sergeymoiseev/ migrate-4843818Monday, February 25, 13
  4. 4. Тема доклада • Боль, давление, рельсы. • Временной интервал 2011 год. • Один из трех крупнейших купонных сервисов в РФ.Monday, February 25, 13
  5. 5. Начинаем • У нас тут есть Drupal, что бы ты мог нам предложить. • Его пилят свои люди, но мы не можем себе позволить больше ждать. • Пилят уже почти год. • Админа у нас нет, но тут вроде был ДДоС.Monday, February 25, 13
  6. 6. Январь 2011 года.Monday, February 25, 13
  7. 7. План действий • Пишем новую версию на RoR. • Мигрируем и начинаем развивать функционал. • Изначальная команда для разработки нового проекта - три человека. • Одного привел, второго забрал из под увольнения.Monday, February 25, 13
  8. 8. Пишем ТЗ • Пишем ТЗ на базе текущей системы. • Всё на месте? Вроде да. • Окей, будем строить на базе гипотезы, что заказчик читал ТЗ внимательно. • Вместе с воспроизведением функциональности будем делать редизайн.Monday, February 25, 13
  9. 9. Первая итерация: прототип • Сделки, пользователи, покупки, регистрация. • Дизайн. • В процессе его разработки увольняется делавший его дизайнер. • Придумываем сами. • Раз нет дизайна, то нет и формально поставленной задачи.Monday, February 25, 13
  10. 10. Postgresql • Нет извечного конфликта какой storage engine выбрать. • Лучше тюнится. • Я умею его готовить.Monday, February 25, 13
  11. 11. Devise • Гибкое решение по аунтефикации для Rails. • Очень эффективно для быстрого начала разработки. • Крайне гибкое и расширяемое. • Из минусов: написано хакерами. Излучает магию. devise_for :users, :controllers => {:omniauth_callbacks => users/omniauth_callbacks}Monday, February 25, 13
  12. 12. OmniAuth • Поддержка множества провайдеров аунтефикации. • Поддерживает из коробки twitter, facebook, гугл и множество других OAuth провайдеров. • Полный список: https://github.com/intridea/ omniauth/wiki/List-of-StrategiesMonday, February 25, 13
  13. 13. Globalize3 • Поддержка i18n на уровне базы. • Перевод атрибутов моделей во вспомогательных таблицах. • Большой минус тесное связывание миграции и моделей. Создаем: Используем: class CreatePosts < ActiveRecord::Migration class Post < ActiveRecord::Base def up translates :title, :text create_table :posts do |t| end t.timestamps end Post.create_translation_table! :title => :string, :text => :text end Получаем: def down I18n.locale = :en drop_table :posts post.title # => Globalize3 rocks! Post.drop_translation_table! end I18n.locale = :he end post.title # => ‫!גלובאלייז2 שולט‬Monday, February 25, 13
  14. 14. Seed-fu • Заполнение справочников в БД. • Позволяет вам писать сиды, которые могут быть отредактированы, дополнены и перезапущены путем ручного выбора присваеваемых в базе ID. Locale.delete_all Locale.seed(:id, {:id => 1, :code => ru }, {:id => 2, :code => en }, {:id => 3, :code => lv }, {:id => 4, :code => lt }, {:id => 5, :code => ee }, )Monday, February 25, 13
  15. 15. Смена курса • Заказчик меняет ген. дира. • Бывшего представителем заказчика на проекте. • На месте одного заказчика - четверо.Monday, February 25, 13
  16. 16. Старая версия • Нет VCS. • Правят прямо на сервере. • Наощупь. • Свои люди доступны в офисе не в полном объеме, живут в одной из среднеазиатских республик. • И да, они подчины только заказчику.Monday, February 25, 13
  17. 17. Технологии старой версии • Один виртуальный сервер. • Который админят индусы. • MySQL из коробки. • MyISAM.Monday, February 25, 13
  18. 18. Самое интересное • Заказчики не ведут формальную постановку задач при работе со старой командой. • Как потом окажется игнорируют постановку задач вообще. • Старая команда в свою очередь игнорирует часть задач в принципе. • Каждый день в референсной системе появляется что-то новое. • О чем нам забыли сказать.Monday, February 25, 13
  19. 19. Ищем выход • С тонущей подводной лодки. • Плюсы: у нас рельсы и написаный прототип. • Минусы: нам нужно переломить кучу бизнес-процессов притом быстро. • Выбираем жертву: региональное зеркало. • Спасительное но: данные независимы.Monday, February 25, 13
  20. 20. Одновременно с этим • Спасаем вселенную в лице старого проекта каждый день (смотри доклад DevOps). • Трафик на проекте постоянно растет. • Боремся с ростом штата конторы с 20 до 150 человек. • Внедряем VoIP. • Перевозим офис на новое место за одну ночь (среды). • Покупаем хостинг у RackSpace. • Пишем новый массовый рассыльщик.Monday, February 25, 13
  21. 21. На дворе лето.Monday, February 25, 13
  22. 22. Миграция данных • Главный источник проблем. • Особенно когда база меняется без учета изменений. • К примеру с помощью миграций в рельсах. • В старой базе много данных относящихся к коду которого уже нет в системе. • А то никогда и не было.Monday, February 25, 13
  23. 23. Мигрируем региональное зеркало • Начинаем в 20:00, заканчиваем к 02:30. • Главная беда - долгая миграция данных. • Даем себе обещание переносить максимум данных заранее. • На следующее утро узнаем, что заказчик не предупредил региональных менеджеров. • Все оставшееся время до конца года ругаемся с ними в почте про “верните все обратно”.Monday, February 25, 13
  24. 24. Проводим очередную демонстрацию заказчику • В таком дизайне это внедрять нельзя. • Не важно, что мы это видели и согласилсь запускать в регионы. • Будем делать новый дизайн. • С кнопками как у Apple.Monday, February 25, 13
  25. 25. Нам нужны люди побольше • Заказчик настаивает на наращивании штата. • Организует собеседования через HR. • Плюс четыре человека в штат программистов. • Все требуют время на себя. • Если вы не успеваете что-то, нужен PM в штат.Monday, February 25, 13
  26. 26. Миграция данных 2 • Выделяем постоянного специалиста. • Теперь уже на основном объеме данных. • Все прошлые проблемы плюс: • больший объем данных; • больше спрятанного под ковер.Monday, February 25, 13
  27. 27. Resque • Решение по созданию фоновых очередей. • Поддерживает множественные очереди на базе Redis. Worker: Запуск: class Archive class Repository @queue = :file_serve def async_create_archive(branch) Resque.enqueue(Archive, self.id, branch) def self.perform(repo_id, branch = master) end repo = Repository.find(repo_id) end repo.create_archive(branch) end endMonday, February 25, 13
  28. 28. Миграция данных 3 • Пишем логику переноса в worker’ах. • При логике одна задача - один пользователь выполнение слабо параллелится.Monday, February 25, 13
  29. 29. Nginx • Один из лучших веб-серверов. Четко ложится в наши планы по развертыванию. • Кеширует статику на фронтовых серверах. • Балансирует запросы на бековые unicorn’ы. • Миграция между площадками: апдейтим dns, указав в nginx proxy_pass на новое место.Monday, February 25, 13
  30. 30. Monday, February 25, 13
  31. 31. Unicorn • Hot restart. • Долгие споры с DevOps на тему unix socket (~5-10% прироста производительности) и числа процессов на ядро.Monday, February 25, 13
  32. 32. Кнопки как у apple • Дизайн будет делать наш человек. • Ему и нам не интересно, что программисты думают о том, что дизайн не совместим с функционалом. • В переписке начинает вестись практика ответа всем кроме меня. • Приходится по каждому случаю показывать, что это не работает потому как функционал блокируется дизайном.Monday, February 25, 13
  33. 33. На дворе зима.Monday, February 25, 13
  34. 34. Кнопки как у Apple 2 • Свой человек уходит. • Как и в прошлый раз продолжаем делать своими силами. • Но это сильно что-то напоминает.Monday, February 25, 13
  35. 35. Коммунистический субботник • Выгоднее всего работать по ночам. • По вечерам есть время чтобы успевать делать все накопившееся и еще чуть-чуть. • Несмотря на это придумываются “блокеры” которые нужно сделать до запуска. • Команда работает без выходных на регулярной основе. • Но не вся. Новички не понимают чем обязаны.Monday, February 25, 13
  36. 36. Decision Point • На дворе конец ноября. • Если не запустить проект сейчас, то не понятно когда его вообще запускать.Monday, February 25, 13
  37. 37. Запуск • Ночь с пятницы на понедельник. • Нагрузка на запущенных ранее зеркалах и основном сайте не сравнима. • Виртуальная машина дает просадку производительности. • Вынимаем из нее бекэнд. • Это не помогает. Бекэнды не успевают отвечать и наружу падают 504. • Посещения падают к 4-5 утра и все кто выжил идут спать.Monday, February 25, 13
  38. 38. Запуск 2 • DevOps с бекграундом во всем вообще очень полезный человек на проекте. • Когда он не пишет вам в общекомандный чат, что рубисты уроды и им мало руки оторвать. • В итоге помогает профилировать приложение и говорит о просадке по GC.Monday, February 25, 13
  39. 39. Запуск 3 • Ведущий разработчик высказывает версию о том, что GC в ветке 1.9.x не должен так втыкать. • Быстро собираем 1.9.2 и стабилизируем поток 504тых. • К концу суток с момента начала работ по запуску можно выдохнуть.Monday, February 25, 13
  40. 40. Новая прекрасная жизнь • Все недовольны. • Верните как было. • Я не знаю как этим пользоваться. • У нас не сходятся цифры. • С начала жизни проекта.Monday, February 25, 13
  41. 41. Миграция данных 4 • Все чистые данные на месте, но есть куча проблемных. • Остатки на счетах съедают нам мозги. • Правим-перезапускаем-правим. • Поздняя домиграция. Ставим миграционный таск в очередь при попытке логина.Monday, February 25, 13
  42. 42. Деплой • Больше всего времени съедает перекомпиляция ресурсов. • Сейчас для того же использую Turbo- sprockets-rails3. • Тогда в качестве process monitoring был god, сейчас bluepill.Monday, February 25, 13
  43. 43. Производительность • Слишком интерактивная главная страница. • Переписываем на статическую компоновку главной страницы с выполнением операций показа скрытия акций по cron. • Фрагментарное кеширование. Его никогда не бывает много. • В итоге последние цифры которые я видел 150rps на бекэнде. В рельсах. • В начале года было 20rps на единственном сервере. • Лендинги. Самое проблемное место в проекте. Нужно писать тонны лидовых данных. Для пользователей которые еще не пользователи. И могут ими не стать.Monday, February 25, 13
  44. 44. Sinatra • Младший брат RoR, фреймворк для создания однофайловых веб-приложений. • Создание лендинговых страниц без полного инстанцирования модельного слоя. • В целом гипотеза была ошибочной, стабилизировать лендинги на синатре мы так и не смогли. • Говорят async_sinatra помогает, но пробовать пока негде.Monday, February 25, 13
  45. 45. О высоких нагрузках • Вы стоите под очень толстой струей воды. • Пока написанный вами код пропускает ее через себя без задержки, вы ее не замечаете. • Как только он начинает лагать, последовательно наедается все. • Кошмар заказчика - 504тые по всем фронтам. • До тех пор пока в команде кто-то не понимает, что он пишет, любой деплой - катастрофа.Monday, February 25, 13
  46. 46. Климат • http://issendai.livejournal.com/572510.html • Хочешь привязать к себе людей, держи их слишком занятыми чтобы думать. • Все задачи идут мимо jira. • Большинство противоречат друг-другу по приоритетам. • Релиз в начале декабря, к 20тым числам проект стабилизирован.Monday, February 25, 13
  47. 47. Климат 2 • Ведущий разработчик требует время на стабилизацию проекта. • Заказчик требует все переделать. • Каждый день. • Я беру отпуск по уходу за рассудком.Monday, February 25, 13
  48. 48. Климат 3 • В отпуск мне сообщают, что я все испортил. • Что ничего не работает (команда говорит обратное). • Знакомые говорят, что их собеседуют на моё место. • Мне отменяют премию за запуск.Monday, February 25, 13
  49. 49. Внутренние цели • На протяжении всего года я говорил себе, что взявшись за проект я не могу позволить его бросить на середине. • Начинает возникать понимание. • Что проект закончен. • Лучше чем сейчас мне его не сделать. • А что терять - есть.Monday, February 25, 13
  50. 50. Итог • В первый рабочий день 2012 года я подаю заявление об увольнении. • В течении нескольких месяцев все региональные зеркала переведены на новый RoR движок. • Команда постепенно увольняется. • Заменяясь аутсорсерами.Monday, February 25, 13
  51. 51. Выученные уроки • Дизайн нельзя менять вместе с платформой. • Дизайн нельзя менять не понимая, что продает. • Рельсы позволяют соревноваться по скорости с самым пытливым умом. • Но не когда их четыре.Monday, February 25, 13
  52. 52. P.S.Monday, February 25, 13
  53. 53. Благодарности • Андрею, Антону, Лёше, Антону, Степану, Петру, Толе, Сергею, Леониду, Диме и Саше за то, что мы сделали вместе. • Джасуру, Шавкату, Комилу и Беку за бесценный опыт и то, что теперь я могу всё.Monday, February 25, 13
  54. 54. Другой взгляд на события • http://www.slideshare.net/alexclear/ ruby-13262249 • Наш DevOps.Monday, February 25, 13
  1. A particular slide catching your eye?

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

×