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

Post on 28-Nov-2014

2.040 views 1 download

description

 

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

Как мы разрабатываем 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 (8)

+1 (888) 333-1345