Upload
codefest
View
2.022
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
Как мы разрабатываем 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-клик• Либо быстро исполняться• Либо настраивать автобота
• Пишите код хорошо, а плохо не пишите
• Не апгрейдитесь в пятницу!