PPTX, 2 МБ

advertisement
Как мы разрабатываем
Sphinx
Аксенов Андрей
Sphinx Technologies Inc
Что такое
Sphinx?
Что такое Sphinx?
•
•
•
•
Программа такая
Для серверов (и мобильных телефонов)
Делает поиск
Бесплатная, открытая, итп
• Сам сервер ~90K строк, ~2.6 MB, C++
• И еще всякое (API, секретные тулы…)
Про что доклад
•
•
•
•
•
Как у нас устроен процесс разработки
И, местами, почему так (спрашивайте!)
Никаких революций
Все очень тупо и стандартно
Ничего нового не узнаете уот уаабще (1)
• Russian marketing in action!!!
(1) Вопрос знатокам: как расшифровывается слово Sphinx?
Мы говорим Ленин...
• Команда разработчиков
Мы говорим Ленин...
• Команда разработчиков
Мы говорим Ленин...
• Команда разработчиков
• Маленькая, очень
• Удаленная, полностью
• Звездочка, исторически
• Диктатура, вынужденно
• Ничто не религия – так сложилось
• Работа по домам – и плюсы и минусы
Вольно пасущиеся коты (2)
• Внешняя часть
• Mantis, форум, изредка IRC
• Внутренняя часть
• IRC, Skype, email, телефон
• Eventum, Wiki, Mantis
• Google Docs
(2) Вопрос знатокам: кого рекламирует “заглавный” видеоролик?
Кафка. «Процесс».
- Холст, сыр, масло
•
•
•
•
•
Как устроен процесс “про код”?
Какие именно Мега Практики есть?
Каких нету, каких зря, каких спецом?
Как и почему именно так получилось?
Полтора выстраданных опытом фокуса
“Мы е…и все на свете”
•
•
•
•
•
Waterfall ?
Agile ?
SCRUM ?
Kanban ?
Six Sigma ?
...
“Мы е…и все на свете”
Waterfall ?
Agile ?
SCRUM ?
Kanban ?
Six Sigma ?
...
• X3M !
•
•
•
•
•
“Do the reasonable thing”
•
•
•
•
•
•
•
По-русски, возможно, “включи мозг”
Раскидываем баги, фичи, редкий R&D
Мини-лекции и “атаки” по потребности
Отчитываемся (еженедельный звонок)
Итерации типично короткие
Результаты типично прозрачные
Ничего особенного, как и обещал
Зоопарк VCS
• Внутренний svn
• Публичный svn (R/O зеркало, Gcode)
• Внутренний hg
• Для длинных веток
• Для секретных веток
• Для промежуточных патчей
• Личный git
Эволюция зоопарка
• Было
• svn исторически, зеркало очевидно
• hg все (!) освоили “для себя”
• git пока личный (?) эксперимент
• Будет… может быть
• svn + git ?
• git / github ?
Зоопарк сред разработки
• Каждый строчит, как он хочет
• MSVS 2005+
• gcc CLI
• Codeblocks
• Xcode
• Довольно кроссплатформенно
• Платформо-зависимого кода... МАЛО
Про кодстиль
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 );
Про кодстиль
• Своеобразный
• Пробелы
• Мини-венгерская нотация
• Смесь систем именования типов
• Но оправданный!
• Мгновенный контекст
• Читаемость без подсветки и в целом
Про кодстиль
• Форсирую стиль
• Форсирую компактность
• Политика?
• Религия?
• Прагматика!
• Ревью на старте. Типично ~1 мес
• Линт и сразу и потом. Google ftw
Про библиотеки итп STL
• STL, boost исторически не пользуемся
• Было нельзя, сейчас незачем
• Только вручную, только хардкор! (3)
• Сторонние библиотеки, эээ, по ситуации
• libstemmer, libre2 линкуем
• libaot, часть стеммеров переписали
(3) Вопрос знатокам: чему равен номер “старой школы”?
Про ревью
• Пока (?) без спецтулзов
• Тупо обмен патчами (см. помойка)
• Цели?
• Баги так ловить нельзя
• Проверка стиля итп дури
• Проверка “туда ли идем”
• Двойные проверки особо важного
Внутренняя документация
• Есть полу-публичная,
• doc/internals*.txt (4)
• Есть совсем внутренняя
• Особо секретная, так надо!!!
• Пока маленькая, всего 10 страниц
• Авось будем расширять и углублять
(4) Вопрос знатокам: как расшифровывается “VLB”?
Программа != продукт
• Продукт = Программа +
• Тестирование
• Документация
• Поддержка
Про документацию
БОЛЬ
Программисты (это я) плоховато пишут
Юзеры (это вы) редко и мало спрошают
Нужен уникальный спец-человек
• Штоп разбирался
• Штоп интересовался
• Пока не нашли!
•
•
•
•
Про платную поддержку
• Консультанты VS разработчики
• Читаем доки вслух
• К должны, Р теоретически могут
• Помогаем придумать и внедрить фокусы
• К должны, Р должны
• Фиксим в коде старое, делаем новое
• К не при делах, Р должны
Про бесплатную поддержку
• Форум – чистая личная доблесть
• Пит, Барри
• Mantis – политика партии!
• Цель “смотреть все”
• Получается пока не всегдец :(
• Eventum, очевидно, приоритетнее
• GPL=freemium, либо гринд, либо..
Про тестирование
• Внутреннее, мы сами
• Автоматические тесты (см. Оч.Мал.)
• Примерно 3-4 разных видов
• Внешнее, пользователи
• 10 Баг (через Mantis или Eventum)
• 20 Фикс [+ автоматический тест]
• 30 GOTO 10
Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Не сразу, примерно через 1.5 года…
Apr 2006 vs Nov 2007
• Рождена комбинаторным взрывом
• Сегодня ~200 тестов (5)
• Сегодня 3000+ запросов
• “1 клик” (на самом деле 2)
(5) Вопрос знатокам: сколько в точности тестов в 2.0.2-beta?
Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Написана на PHP, это минус
• Заодно тестирует API, это плюс
• PHP API, C API остальное
• Тестируется вся система
• Дескрипторы и мутаторы
• Данные, запросы, варианты, QL
Ежеминутный дзен
• Юнит-тесты, src/tests.cpp
• “Фреймворк” assert.h
• Рождена внутренним рефактором
• Используется для “точечных” тестов
• Используется и для регрессий тоже
• Заодно там же микробенчмарки
• Debug=test, Release=bench :)
Ежечасный дзен
•
•
•
•
•
1*regression ~= 2-3min
1*quick-regression ~= 1 min
2*(regression+unit+capi) ~= 5+min
Все в “1 клик”, но этого мало
Тесты и почта на каждый коммит
• Либо исправляем почти сразу
• Либо ревертим!!! (Это редко)
Ежеминутный дзен
• Регрессионная тест-сюита, test/
• Написана на PHP, это, кхм, минус!!!
• Заодно тестирует PHP API, это плюс
• Тестируется вся система
• Дескрипторы и мутаторы
• Данные, запросы, варианты
• API, QL
Еженощный дзен
Acceptance: проверяем результаты
Performance: мерим QPS
1M (1.3G) документов, 1K+ запросов
Несколько режимов
• fork, threads, prefork, ...
• trunk, rel20, …
• “Вчерашняя” ачивка: графики!!!
•
•
•
•
“Толька! Этого мало!” (6)
• Все равно проникают адовые баги :)
• Баги бывают трех классов, A, B, C
• Но иногда! бывают баги класса Ы
• issue-72, issue-136, …
• bug-660, bug-1117, …
• И отдельной строкой performance issues
• prefork spin, O(n^2) zones, …
(6) Вопрос знатокам: до скольки qps только что было на графике?
Про билды
• До июля 2010 считай не было
• Только source + win32
• Это плохо, так нельзя
• Постепенно научились собирать пакеты
• Как обычно, россыпь виртуалок
• Как обычно, скрипты в 1-клик
• MacOS пока сопротивляется
Про цикл релизов
• Был заторможенный, 1 раз в год (ууу)
• Всегда можно взять транк!!!
• Но не всем, говорят, дают (хехе)
• Теперь разгоняем, раз в 1-2 мес
• Очередная попытка maintenance
• Пока что, тьфу-тьфу, получается!!!
• Следующая цель: разогнать “беты”
Про именование версий
• Dev
• Тупо текущий “транк”
• Beta
• “Известных” “крупных” багов нет
• Добавляются новые фичи
• Code-freeze пока не отличить
• RC? Gamma? Нуегонафиг?
Про именование версий
• Release
• 1-2 месяца после code-freeze beta
• “Известных” багов уаабще нет
• Но это ничего не значит!!!
• После этого только багфиксы
• Перед этим, в общем-то, тоже
Почему важны баги
• Ну...
• Нас пока еще меньше 1000 человек
• А разнообразные комбинаторные
взрывы никто не отменял!
(7) Вопрос знатокам: как звали маму Дарта?
Виды багрепортов
• Бывают правильные
• Вкратце – все нужные данные
• Особый шок – когда прям сразу
• Бывают как обычно
• “Ааа все пропало мы все умрем”
• И, конечно, зачем отвечать на
почту
Про 1 клик
• Билды в 1 клик
• Тесты в 1 клик
• Линт в 1 клик
• Промежуточные (!!!) эксперименты
тоже в 1 клик
Про 1 клик
@echo off
set PATH=C:\Program Files\Microsoft
Visual Studio 8\Common7\IDE;%PATH%;
devenv sphinx05.sln /rebuild release
bin\release\indexer aot
echo diffing...
md5sum C:\Work\sphinx\indexes\aot.*
>cur.txt
diff cur.txt ref.txt
Про 1 клик
call hgrm
del src\*.orig
del src\*.rej
del doc\*.orig
del doc\*.rej
hg up -r 1309
hg merge -r %1
hg id
Про общую Мега Парадигму
• Стратегия, дизайн-принципы кода ядра
• Пиши просто
• Пиши кратко
• Смерть “скрытым платежам”
• Кто не пользуется – тот не платит
• Крути гайки насмерть
• Ослабить никогда не поздно
Про общую Мега Парадигму
• Тактика, полезные фокусы
• Порядок. Кодстиль, линт, краткость
• Автоматизация. Всякое в 1-клик
• Тестирование. Тотальное и хуже
• Багфиксы. Сначала они
Как отмазаться в понедельник
• Делайте тесты, иначе тяжело
• Автоматизируйте всякое, иначе тяжело
• Запуск в 1-клик
• Либо быстро исполняться
• Либо настраивать автобота
• Пишите код хорошо, а плохо не пишите
• Не апгрейдитесь в пятницу!
Вопросы?
Аксенов Андрей
Sphinx Technologies Inc
shodan@sphinxsearch.com
+1 (888) 333-1345
(8)
Download