54
Как мы разрабатываем Sphinx Аксенов Андрей Sphinx Technologies Inc

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Как мы разрабатываем Sphinx

Аксенов Андрей

Sphinx Technologies Inc

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

Что такое Sphinx?

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

Что такое Sphinx?

• Программа такая• Для серверов (и мобильных

телефонов)• Делает поиск• Бесплатная, открытая, итп

• Сам сервер ~90K строк, ~2.6 MB, C++

• И еще всякое (API, секретные тулы…)

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

Про что доклад

• Как у нас устроен процесс разработки

• И, местами, почему так (спрашивайте!)

• Никаких революций• Все очень тупо и стандартно• Ничего нового не узнаете уот

уаабще (1)

• Russian marketing in action!!!

(1) Вопрос знатокам: как расшифровывается слово Sphinx?

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

Мы говорим Ленин...

• Команда разработчиков

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

Мы говорим Ленин...

• Команда разработчиков

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

Мы говорим Ленин...

• Команда разработчиков• Маленькая, очень• Удаленная, полностью• Звездочка, исторически• Диктатура, вынужденно

• Ничто не религия – так сложилось• Работа по домам – и плюсы и

минусы

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

Вольно пасущиеся коты (2)

• Внешняя часть• Mantis, форум, изредка IRC

• Внутренняя часть• IRC, Skype, email, телефон• Eventum, Wiki, Mantis• Google Docs

(2) Вопрос знатокам: кого рекламирует “заглавный” видеоролик?

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

Кафка. «Процесс».- Холст, сыр, масло

• Как устроен процесс “про код”?• Какие именно Мега Практики

есть?• Каких нету, каких зря, каких

спецом?• Как и почему именно так

получилось?• Полтора выстраданных опытом

фокуса

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

“Мы е…и все на свете”

• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ?

. . .

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

“Мы е…и все на свете”

• Waterfall ?• Agile ?• SCRUM ?• Kanban ?• Six Sigma ?

. . .• X3M !

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

“Do the reasonable thing”

• По-русски, возможно, “включи мозг”

• Раскидываем баги, фичи, редкий R&D

• Мини-лекции и “атаки” по потребности

• Отчитываемся (еженедельный звонок)

• Итерации типично короткие• Результаты типично прозрачные• Ничего особенного, как и обещал

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

Зоопарк VCS

• Внутренний svn• Публичный svn (R/O зеркало,

Gcode)• Внутренний hg

• Для длинных веток• Для секретных веток• Для промежуточных патчей

• Личный git

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

Эволюция зоопарка

• Было• svn исторически, зеркало

очевидно• hg все (!) освоили “для себя”• git пока личный (?)

эксперимент• Будет… может быть

• svn + git ?• git / github ?

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

Зоопарк сред разработки

• Каждый строчит, как он хочет• MSVS 2005+• gcc CLI• Codeblocks• Xcode

• Довольно кроссплатформенно• Платформо-зависимого кода...

МАЛО

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

Про кодстиль

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 );

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

Про кодстиль

• Своеобразный• Пробелы• Мини-венгерская нотация• Смесь систем именования

типов• Но оправданный!

• Мгновенный контекст• Читаемость без подсветки и в

целом

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

Про кодстиль

• Форсирую стиль• Форсирую компактность

• Политика?• Религия?• Прагматика!

• Ревью на старте. Типично ~1 мес• Линт и сразу и потом. Google ftw

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

Про библиотеки итп STL

• STL, boost исторически не пользуемся• Было нельзя, сейчас незачем• Только вручную, только

хардкор! (3)

• Сторонние библиотеки, эээ, по ситуации• libstemmer, libre2 линкуем• libaot, часть стеммеров

переписали

(3) Вопрос знатокам: чему равен номер “старой школы”?

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

Про ревью

• Пока (?) без спецтулзов• Тупо обмен патчами (см. помойка)• Цели?

• Баги так ловить нельзя• Проверка стиля итп дури• Проверка “туда ли идем”• Двойные проверки особо

важного

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

Внутренняя документация

• Есть полу-публичная, • doc/internals*.txt (4)

• Есть совсем внутренняя• Особо секретная, так надо!!!• Пока маленькая, всего 10

страниц• Авось будем расширять и

углублять

(4) Вопрос знатокам: как расшифровывается “VLB”?

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

Программа != продукт

• Продукт = Программа +• Тестирование• Документация• Поддержка

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

Про документацию

• БОЛЬ• Программисты (это я) плоховато

пишут• Юзеры (это вы) редко и мало

спрошают• Нужен уникальный спец-человек

• Штоп разбирался• Штоп интересовался

• Пока не нашли!

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

Про платную поддержку

• Консультанты VS разработчики• Читаем доки вслух

• К должны, Р теоретически могут

• Помогаем придумать и внедрить фокусы• К должны, Р должны

• Фиксим в коде старое, делаем новое• К не при делах, Р должны

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

Про бесплатную поддержку

• Форум – чистая личная доблесть• Пит, Барри

• Mantis – политика партии!• Цель “смотреть все”• Получается пока не всегдец :(• Eventum, очевидно,

приоритетнее• GPL=freemium, либо гринд,

либо..

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

Про тестирование

• Внутреннее, мы сами• Автоматические тесты (см.

Оч.Мал.)• Примерно 3-4 разных видов

• Внешнее, пользователи• 10 Баг (через Mantis или

Eventum)• 20 Фикс [+ автоматический

тест]• 30 GOTO 10

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

Ежеминутный дзен

• Регрессионная тест-сюита, test/• Не сразу, примерно через 1.5

года… Apr 2006 vs Nov 2007• Рождена комбинаторным

взрывом• Сегодня ~200 тестов (5)

• Сегодня 3000+ запросов• “1 клик” (на самом деле 2)

(5) Вопрос знатокам: сколько в точности тестов в 2.0.2-beta?

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

Ежеминутный дзен

• Регрессионная тест-сюита, test/• Написана на PHP, это минус• Заодно тестирует API, это плюс• PHP API, C API остальное

• Тестируется вся система• Дескрипторы и мутаторы• Данные, запросы, варианты,

QL

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

Ежеминутный дзен

• Юнит-тесты, src/tests.cpp• “Фреймворк” assert.h• Рождена внутренним

рефактором• Используется для “точечных”

тестов• Используется и для регрессий

тоже• Заодно там же микробенчмарки

• Debug=test, Release=bench :)

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

Ежечасный дзен

• 1*regression ~= 2-3min• 1*quick-regression ~= 1 min• 2*(regression+unit+capi) ~= 5+min• Все в “1 клик”, но этого мало• Тесты и почта на каждый коммит

• Либо исправляем почти сразу• Либо ревертим!!! (Это редко)

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

Ежеминутный дзен

• Регрессионная тест-сюита, test/• Написана на PHP, это, кхм,

минус!!!• Заодно тестирует PHP API, это

плюс• Тестируется вся система• Дескрипторы и мутаторы• Данные, запросы, варианты• API, QL

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

Еженощный дзен

• Acceptance: проверяем результаты• Performance: мерим QPS• 1M (1.3G) документов, 1K+

запросов• Несколько режимов

• fork, threads, prefork, ...• trunk, rel20, …

• “Вчерашняя” ачивка: графики!!!

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

“Толька! Этого мало!” (6)

• Все равно проникают адовые баги :)

• Баги бывают трех классов, A, B, C• Но иногда! бывают баги класса Ы

• issue-72, issue-136, …• bug-660, bug-1117, …

• И отдельной строкой performance issues• prefork spin, O(n^2) zones, …

(6) Вопрос знатокам: до скольки qps только что было на графике?

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

Про билды

• До июля 2010 считай не было• Только source + win32• Это плохо, так нельзя

• Постепенно научились собирать пакеты• Как обычно, россыпь виртуалок• Как обычно, скрипты в 1-клик• MacOS пока сопротивляется

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

Про цикл релизов

• Был заторможенный, 1 раз в год (ууу)• Всегда можно взять транк!!!• Но не всем, говорят, дают

(хехе)• Теперь разгоняем, раз в 1-2 мес

• Очередная попытка maintenance

• Пока что, тьфу-тьфу, получается!!!

• Следующая цель: разогнать “беты”

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

Про именование версий

• Dev• Тупо текущий “транк”

• Beta• “Известных” “крупных” багов

нет• Добавляются новые фичи• Code-freeze пока не отличить• RC? Gamma? Нуегонафиг?

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

Про именование версий

• Release• 1-2 месяца после code-freeze

beta• “Известных” багов уаабще нет• Но это ничего не значит!!!

• После этого только багфиксы• Перед этим, в общем-то, тоже

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

Почему важны баги

• Ну...• Нас пока еще меньше 1000

человек• А разнообразные комбинаторные

взрывы никто не отменял!

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

(7) Вопрос знатокам: как звали маму Дарта?

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

Виды багрепортов

• Бывают правильные• Вкратце – все нужные данные• Особый шок – когда прям сразу

• Бывают как обычно• “Ааа все пропало мы все

умрем”• И, конечно, зачем отвечать на

почту

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

Про 1 клик

• Билды в 1 клик• Тесты в 1 клик• Линт в 1 клик

• Промежуточные (!!!) эксперименты тоже в 1 клик

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

Про 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

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

Про 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

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

Про общую Мега Парадигму

• Стратегия, дизайн-принципы кода ядра• Пиши просто• Пиши кратко• Смерть “скрытым платежам”• Кто не пользуется – тот не

платит• Крути гайки насмерть• Ослабить никогда не поздно

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

Про общую Мега Парадигму

• Тактика, полезные фокусы• Порядок. Кодстиль, линт,

краткость• Автоматизация. Всякое в 1-

клик• Тестирование. Тотальное и

хуже• Багфиксы. Сначала они

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

Как отмазаться в понедельник

• Делайте тесты, иначе тяжело• Автоматизируйте всякое, иначе

тяжело• Запуск в 1-клик• Либо быстро исполняться• Либо настраивать автобота

• Пишите код хорошо, а плохо не пишите

• Не апгрейдитесь в пятницу!

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

Вопросы?

Аксенов АндрейSphinx Technologies Inc

[email protected] (8)

+1 (888) 333-1345

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