540 likes | 839 Views
Как мы разрабатываем Sphinx. Аксенов Андрей Sphinx Technologies Inc. Что такое Sphinx?. Что такое Sphinx?. Программа такая Для серверов (и мобильных телефонов) Делает поиск Бесплатная, открытая, итп Сам сервер ~90K строк , ~2.6 MB, C++ И еще всякое (API, секретные тулы … ).
E N D
Как мы разрабатываем Sphinx Аксенов Андрей Sphinx Technologies Inc
Что такое 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 ( inti=0; i<m_tSchema.GetAttrsCount(); i++ ) { const CSphColumnInfo & tCol = m_tSchema.GetAttr(i); ESphAttreAttrType = 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, CAPI остальное • Тестируется вся система • Дескрипторы и мутаторы • Данные, запросы, варианты, 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 человек • А разнообразные комбинаторные взрывы никто не отменял!
Виды багрепортов • Бывают правильные • Вкратце – все нужные данные • Особый шок – когда прям сразу • Бывают как обычно • “Ааа все пропало мы все умрем” • И, конечно, зачем отвечать на почту
Про 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
Про общую Мега Парадигму • Стратегия, дизайн-принципы кода ядра • Пиши просто • Пиши кратко • Смерть “скрытым платежам” • Кто не пользуется – тот не платит • Крути гайки насмерть • Ослабить никогда не поздно