2. Крыша 1.0
• Копипаста с колёс
• Zend Framework 1
• Собственная прослойка для работы с базой
mysql
• Memcached
• Статика(js, css) не минифицированна
• 0,5 разработчиков на проект
• Количество тестов - 0
3. Начало
• Первый коммит был сделан
15 октября 2014
• Первым приложением на
новом движке была
мобильная версия
4. Команда крыши на 2017
• 6 разработчиков
• 1 тестировщик
• 1 менеджер
Code review
7. Ядро крыши - API
• Вся работа с объявлениями унесена в API
• Повторение GET запросов с паузами при
ответе 500
• GET запросы в апи кешируются, кеш
сбрасывается c помощью паттерна
“publish/subscribe”
8. Шаблоны и их кеширование
• Кеш на файловой системе
• OPcache помогает
• Сохраняем
отрендеренные шаблоны
объявлений в Redis
• Кешируем форму поиска
9. 4 сервера по 4 GB памяти с установленным redis-server
11. Сборка статики
akim@avda:~/kr-m/static 0 ;)$ sudo -u ww
app=frontend
[15:59:19] Using gulpfile
/mnt/data/www/projects/krisha.kz/mobile/s
[15:59:19] Starting 'clean'...
[15:59:19] Finished 'clean' after 17 ms
[15:59:19] Starting 'default'...
[15:59:19] Starting 'vendor-scripts'...
[15:59:19] Starting 'vendor-css'...
[15:59:19] Starting 'svg-images'...
[15:59:20] Starting 'fileapi-swf-copy'...
[15:59:20] Finished 'default' after 190 ms
[15:59:20] Finished 'fileapi-swf-copy' after
[15:59:20] Finished 'vendor-css' after 376
[15:59:26] Finished 'svg-images' after 6.31
[15:59:37] Finished 'vendor-scripts' after 1
[15:59:37] Starting 'images'...
[15:59:37] Starting 'sprite'...
[15:59:37] Finished 'sprite' after 150 ms
[15:59:37] Starting 'scssimages'...
[15:59:37] Finished 'scssimages' after 4.3
[15:59:37] Starting 'styles'...
npm-cache install npm # (package.json)
npm-cache install bower # (bower.json)
gulp --env=production --app=mobile
gulp --env=production --app=frontend
gulp --env=production --app=backend
12. Таски (Gulp)
• Таски общие для всех приложений
• В дефолтном таске указано какие задачи
запускать и для какого приложения
• Таким образом мы избавляемся от
дублирования тасков для каждого приложения
modules.runSequence(
[
'vendor-scripts',
'vendor-css'
],
[
'images',
'styles'
],
'scripts',
'favicons',
'debugbar'
14. SEO
• Для каждой страницы поиска задаётся
собственный шаблон заголовка(title) и meta
description.
15. Деплой
• Rsync на один бекенд (нулевой)
• Раз в 3 минуты все остальные бекенды ходят
на “нулевой” бекенд и синхронизируются.
• С помощью Bamboo можно делать “откаты”
релизов.
• При каждом деплое с помощью Ansible
делается очистка кеша твига, запуск
синхронизации кода бекендов и другие задачи.
16. Логирование
Graylog
• PSR-3
• В минуту пишется примерно 800 сообщений
• Настроены уведомления при аномально
большом количестве логов с уровнем
(emergency, alert, critical,error,warning)
17. Переезд
• Это долгий и затратный процесс
• Есть места, которые лучше не трогать
• По скромным подсчётам нужно как минимум
полгода чистой разработки, чтобы перенести
весь функционал на новый движок
• Стараемся не попасть под “эффект второй
системы”