CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx

2,028 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,028
On SlideShare
0
From Embeds
0
Number of Embeds
841
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx

  1. 1. Как мы разрабатываемSphinxАксенов АндрейSphinx Technologies Inc
  2. 2. Что такое Sphinx?
  3. 3. Что такое Sphinx?• Программа такая• Для серверов (и мобильных телефонов)• Делает поиск• Бесплатная, открытая, итп• Сам сервер ~90K строк, ~2.6 MB, C++• И еще всякое (API, секретные тулы…)
  4. 4. Про что доклад• Как у нас устроен процесс разработки• И, местами, почему так (спрашивайте!)• Никаких революций• Все очень тупо и стандартно• Ничего нового не узнаете уот уаабще (1) • Russian marketing in action!!!(1) Вопрос знатокам: как расшифровывается слово Sphinx?
  5. 5. Мы говорим Ленин...• Команда разработчиков
  6. 6. Мы говорим Ленин...• Команда разработчиков
  7. 7. Мы говорим Ленин...• Команда разработчиков • Маленькая, очень • Удаленная, полностью • Звездочка, исторически • Диктатура, вынужденно• Ничто не религия – так сложилось• Работа по домам – и плюсы и минусы
  8. 8. Вольно пасущиеся коты (2)• Внешняя часть • Mantis, форум, изредка IRC• Внутренняя часть • IRC, Skype, email, телефон • Eventum, Wiki, Mantis • Google Docs(2) Вопрос знатокам: кого рекламирует “заглавный” видеоролик?
  9. 9. Кафка. «Процесс». - Холст, сыр, масло• Как устроен процесс “про код”?• Какие именно Мега Практики есть?• Каких нету, каких зря, каких спецом?• Как и почему именно так получилось?• Полтора выстраданных опытом фокуса
  10. 10. “Мы е…и все на свете”• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ? ...
  11. 11. “Мы е…и все на свете”• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ? ...• X3M !
  12. 12. “Do the reasonable thing”• По-русски, возможно, “включи мозг”• Раскидываем баги, фичи, редкий R&D• Мини-лекции и “атаки” по потребности• Отчитываемся (еженедельный звонок)• Итерации типично короткие• Результаты типично прозрачные• Ничего особенного, как и обещал
  13. 13. Зоопарк VCS• Внутренний svn• Публичный svn (R/O зеркало, Gcode)• Внутренний hg • Для длинных веток • Для секретных веток • Для промежуточных патчей• Личный git
  14. 14. Эволюция зоопарка• Было • svn исторически, зеркало очевидно • hg все (!) освоили “для себя” • git пока личный (?) эксперимент• Будет… может быть • svn + git ? • git / github ?
  15. 15. Зоопарк сред разработки• Каждый строчит, как он хочет • MSVS 2005+ • gcc CLI • Codeblocks • Xcode• Довольно кроссплатформенно• Платформо-зависимого кода... МАЛО
  16. 16. Про кодстильfor ( int i=0; i<m_tSchema.GetAttrsCount(); i++ ){ const CSphColumnInfo & tCol = m_tSchema.GetAttr(i); ESphAttr eAttrType = tCol.m_eAttrType; if ( eAttrType==SPH_ATTR_UINT64SET ) { if ( tCol.m_eSrc==SPH_ATTRSRC_FIELD ) bHaveFieldMVAs = true; dMvaIndexes.Add ( i ); dMvaLocators.Add ( tCol.m_tLocator );
  17. 17. Про кодстиль• Своеобразный • Пробелы • Мини-венгерская нотация • Смесь систем именования типов• Но оправданный! • Мгновенный контекст • Читаемость без подсветки и в целом
  18. 18. Про кодстиль• Форсирую стиль• Форсирую компактность • Политика? • Религия? • Прагматика!• Ревью на старте. Типично ~1 мес• Линт и сразу и потом. Google ftw
  19. 19. Про библиотеки итп STL• STL, boost исторически не пользуемся • Было нельзя, сейчас незачем • Только вручную, только хардкор! (3)• Сторонние библиотеки, эээ, по ситуации • libstemmer, libre2 линкуем • libaot, часть стеммеров переписали(3) Вопрос знатокам: чему равен номер “старой школы”?
  20. 20. Про ревью• Пока (?) без спецтулзов• Тупо обмен патчами (см. помойка)• Цели? • Баги так ловить нельзя • Проверка стиля итп дури • Проверка “туда ли идем” • Двойные проверки особо важного
  21. 21. Внутренняя документация• Есть полу-публичная, • doc/internals*.txt (4)• Есть совсем внутренняя • Особо секретная, так надо!!! • Пока маленькая, всего 10 страниц • Авось будем расширять и углублять(4) Вопрос знатокам: как расшифровывается “VLB”?
  22. 22. Программа != продукт• Продукт = Программа + • Тестирование • Документация • Поддержка
  23. 23. Про документацию• БОЛЬ• Программисты (это я) плоховато пишут• Юзеры (это вы) редко и мало спрошают• Нужен уникальный спец-человек • Штоп разбирался • Штоп интересовался• Пока не нашли!
  24. 24. Про платную поддержку• Консультанты VS разработчики• Читаем доки вслух • К должны, Р теоретически могут• Помогаем придумать и внедрить фокусы • К должны, Р должны• Фиксим в коде старое, делаем новое • К не при делах, Р должны
  25. 25. Про бесплатную поддержку• Форум – чистая личная доблесть • Пит, Барри• Mantis – политика партии! • Цель “смотреть все” • Получается пока не всегдец :( • Eventum, очевидно, приоритетнее • GPL=freemium, либо гринд, либо..
  26. 26. Про тестирование• Внутреннее, мы сами • Автоматические тесты (см. Оч.Мал.) • Примерно 3-4 разных видов• Внешнее, пользователи • 10 Баг (через Mantis или Eventum) • 20 Фикс [+ автоматический тест] • 30 GOTO 10
  27. 27. Ежеминутный дзен• Регрессионная тест-сюита, test/ • Не сразу, примерно через 1.5 года… Apr 2006 vs Nov 2007 • Рождена комбинаторным взрывом • Сегодня ~200 тестов (5) • Сегодня 3000+ запросов • “1 клик” (на самом деле 2)(5) Вопрос знатокам: сколько в точности тестов в 2.0.2-beta?
  28. 28. Ежеминутный дзен• Регрессионная тест-сюита, test/ • Написана на PHP, это минус • Заодно тестирует API, это плюс • PHP API, C API остальное • Тестируется вся система • Дескрипторы и мутаторы • Данные, запросы, варианты, QL
  29. 29. Ежеминутный дзен• Юнит-тесты, src/tests.cpp • “Фреймворк” assert.h • Рождена внутренним рефактором • Используется для “точечных” тестов • Используется и для регрессий тоже• Заодно там же микробенчмарки • Debug=test, Release=bench :)
  30. 30. Ежечасный дзен• 1*regression ~= 2-3min• 1*quick-regression ~= 1 min• 2*(regression+unit+capi) ~= 5+min• Все в “1 клик”, но этого мало• Тесты и почта на каждый коммит • Либо исправляем почти сразу • Либо ревертим!!! (Это редко)
  31. 31. Ежеминутный дзен• Регрессионная тест-сюита, test/ • Написана на PHP, это, кхм, минус!!! • Заодно тестирует PHP API, это плюс • Тестируется вся система • Дескрипторы и мутаторы • Данные, запросы, варианты • API, QL
  32. 32. Еженощный дзен• Acceptance: проверяем результаты• Performance: мерим QPS• 1M (1.3G) документов, 1K+ запросов• Несколько режимов • fork, threads, prefork, ... • trunk, rel20, …• “Вчерашняя” ачивка: графики!!!
  33. 33. “Толька! Этого мало!” (6)• Все равно проникают адовые баги :)• Баги бывают трех классов, A, B, C• Но иногда! бывают баги класса Ы • issue-72, issue-136, … • bug-660, bug-1117, …• И отдельной строкой performance issues • prefork spin, O(n^2) zones, …(6) Вопрос знатокам: до скольки qps только что было на графике?
  34. 34. Про билды• До июля 2010 считай не было • Только source + win32 • Это плохо, так нельзя• Постепенно научились собирать пакеты • Как обычно, россыпь виртуалок • Как обычно, скрипты в 1-клик • MacOS пока сопротивляется
  35. 35. Про цикл релизов• Был заторможенный, 1 раз в год (ууу) • Всегда можно взять транк!!! • Но не всем, говорят, дают (хехе)• Теперь разгоняем, раз в 1-2 мес • Очередная попытка maintenance • Пока что, тьфу-тьфу, получается!!!• Следующая цель: разогнать “беты”
  36. 36. Про именование версий• Dev • Тупо текущий “транк”• Beta • “Известных” “крупных” багов нет • Добавляются новые фичи • Code-freeze пока не отличить • RC? Gamma? Нуегонафиг?
  37. 37. Про именование версий• Release • 1-2 месяца после code-freeze beta • “Известных” багов уаабще нет • Но это ничего не значит!!! • После этого только багфиксы • Перед этим, в общем-то, тоже
  38. 38. Почему важны баги• Ну...• Нас пока еще меньше 1000 человек• А разнообразные комбинаторные взрывы никто не отменял!
  39. 39. (7) Вопрос знатокам: как звали маму Дарта?
  40. 40. Виды багрепортов• Бывают правильные • Вкратце – все нужные данные • Особый шок – когда прям сразу• Бывают как обычно • “Ааа все пропало мы все умрем” • И, конечно, зачем отвечать на почту
  41. 41. Про 1 клик• Билды в 1 клик• Тесты в 1 клик• Линт в 1 клик• Промежуточные (!!!) эксперименты тоже в 1 клик
  42. 42. Про 1 клик@echo offset PATH=C:Program FilesMicrosoft Visual Studio 8Common7IDE;%PATH%;devenv sphinx05.sln /rebuild releasebinreleaseindexer aotecho diffing...md5sum C:Worksphinxindexesaot.* >cur.txtdiff cur.txt ref.txt
  43. 43. Про 1 кликcall hgrmdel src*.origdel src*.rejdel doc*.origdel doc*.rejhg up -r 1309hg merge -r %1hg id
  44. 44. Про общую Мега Парадигму• Стратегия, дизайн-принципы кода ядра • Пиши просто • Пиши кратко • Смерть “скрытым платежам” • Кто не пользуется – тот не платит • Крути гайки насмерть • Ослабить никогда не поздно
  45. 45. Про общую Мега Парадигму• Тактика, полезные фокусы • Порядок. Кодстиль, линт, краткость • Автоматизация. Всякое в 1-клик • Тестирование. Тотальное и хуже • Багфиксы. Сначала они
  46. 46. Как отмазаться в понедельник• Делайте тесты, иначе тяжело• Автоматизируйте всякое, иначе тяжело • Запуск в 1-клик • Либо быстро исполняться • Либо настраивать автобота• Пишите код хорошо, а плохо не пишите• Не апгрейдитесь в пятницу!
  47. 47. Вопросы?Аксенов АндрейSphinx Technologies Incshodan@sphinxsearch.com (8)+1 (888) 333-1345

×