SlideShare une entreprise Scribd logo
1  sur  23
КРЫША 2.0
Крыша 1.0
• Копипаста с колёс
• Zend Framework 1
• Собственная прослойка для работы с базой
mysql
• Memcached
• Статика(js, css) не минифицированна
• 0,5 разработчиков на проект
• Количество тестов - 0
Начало
• Первый коммит был сделан
15 октября 2014
• Первым приложением на
новом движке была
мобильная версия
Команда крыши на 2017
• 6 разработчиков
• 1 тестировщик
• 1 менеджер
Code review
Под капотом
• Phalcon Framework
• Gulp, Scss
• Модульный javascript
• Redis + twemproxy
• Repository pattern
• Entity pattern
• Model-View-Presenter
• ...
Ядро крыши - API
• Вся работа с объявлениями унесена в API
• Повторение GET запросов с паузами при
ответе 500
• GET запросы в апи кешируются, кеш
сбрасывается c помощью паттерна
“publish/subscribe”
Шаблоны и их кеширование
• Кеш на файловой системе
• OPcache помогает
• Сохраняем
отрендеренные шаблоны
объявлений в Redis
• Кешируем форму поиска
4 сервера по 4 GB памяти с установленным redis-server
Схема поиска
krisha.kz
API
search adverts ids
Redis
get templates by ids
get data by ids
render templates and save
get adverts list
Сборка статики
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
Таски (Gulp)
• Таски общие для всех приложений
• В дефолтном таске указано какие задачи
запускать и для какого приложения
• Таким образом мы избавляемся от
дублирования тасков для каждого приложения
modules.runSequence(
[
'vendor-scripts',
'vendor-css'
],
[
'images',
'styles'
],
'scripts',
'favicons',
'debugbar'
• Просмотры
• Антифлуд
• Аналитика (график)
• Единая авторизация
• Платные услуги объявлений
Микросервисы
SEO
• Для каждой страницы поиска задаётся
собственный шаблон заголовка(title) и meta
description.
Деплой
• Rsync на один бекенд (нулевой)
• Раз в 3 минуты все остальные бекенды ходят
на “нулевой” бекенд и синхронизируются.
• С помощью Bamboo можно делать “откаты”
релизов.
• При каждом деплое с помощью Ansible
делается очистка кеша твига, запуск
синхронизации кода бекендов и другие задачи.
Логирование
Graylog
• PSR-3
• В минуту пишется примерно 800 сообщений
• Настроены уведомления при аномально
большом количестве логов с уровнем
(emergency, alert, critical,error,warning)
Переезд
• Это долгий и затратный процесс
• Есть места, которые лучше не трогать
• По скромным подсчётам нужно как минимум
полгода чистой разработки, чтобы перенести
весь функционал на новый движок
• Стараемся не попасть под “эффект второй
системы”
Timeline technology
ZF 1 2007
2005 20172011
krisha 1.0
PHP 4.4
2007 2009 2013 2015
PHP 5.3 PHP 5.4 2012 PHP 5.6 2014
krisha 2.0
1.0
PHP 7.1
1.3 2.0
ZF 1.12,
ZF 2.0.0rc1 2012
Phalcon Phalcon 3.1
1.0 3.8 3.9 2016Gulp
ZF 2.4.11
Спасибо за внимание
akim@kolesa.kz Аким Кротов
?

Contenu connexe

Tendances

Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Provectus
 
Drupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинDrupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константин
drupalconf
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
rit2011
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 

Tendances (19)

Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
Drupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константинDrupal и мобильные устройства комелин константин
Drupal и мобильные устройства комелин константин
 
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
JS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
JS Lab2017_Redux: время двигаться дальше?_Екатерина ЛизогубоваJS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
JS Lab2017_Redux: время двигаться дальше?_Екатерина Лизогубова
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
#6 "Изоморфный фреймворк Catberry.js" Денис Речкунов
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
 

Similaire à Крыша 2.0

SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
buranLcme
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
Nikita Borzykh
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Ontico
 

Similaire à Крыша 2.0 (20)

D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Sivko
SivkoSivko
Sivko
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
My Open Source (Sept 2017)
My Open Source (Sept 2017)My Open Source (Sept 2017)
My Open Source (Sept 2017)
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 

Plus de Колёса Крыша Маркет (6)

Введение в gRPC
Введение в gRPCВведение в gRPC
Введение в gRPC
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Интеграция и управление системами с помощью ESB
Интеграция и управление системами с помощью ESBИнтеграция и управление системами с помощью ESB
Интеграция и управление системами с помощью ESB
 
Автоматизация тестирования
Автоматизация тестированияАвтоматизация тестирования
Автоматизация тестирования
 
Переход на Php 7 и итоги
Переход на Php 7 и итогиПереход на Php 7 и итоги
Переход на Php 7 и итоги
 
Жизнь и приключения картинки
Жизнь и приключения картинкиЖизнь и приключения картинки
Жизнь и приключения картинки
 

Крыша 2.0

  • 2. Крыша 1.0 • Копипаста с колёс • Zend Framework 1 • Собственная прослойка для работы с базой mysql • Memcached • Статика(js, css) не минифицированна • 0,5 разработчиков на проект • Количество тестов - 0
  • 3. Начало • Первый коммит был сделан 15 октября 2014 • Первым приложением на новом движке была мобильная версия
  • 4. Команда крыши на 2017 • 6 разработчиков • 1 тестировщик • 1 менеджер Code review
  • 5.
  • 6. Под капотом • Phalcon Framework • Gulp, Scss • Модульный javascript • Redis + twemproxy • Repository pattern • Entity pattern • Model-View-Presenter • ...
  • 7. Ядро крыши - API • Вся работа с объявлениями унесена в API • Повторение GET запросов с паузами при ответе 500 • GET запросы в апи кешируются, кеш сбрасывается c помощью паттерна “publish/subscribe”
  • 8. Шаблоны и их кеширование • Кеш на файловой системе • OPcache помогает • Сохраняем отрендеренные шаблоны объявлений в Redis • Кешируем форму поиска
  • 9. 4 сервера по 4 GB памяти с установленным redis-server
  • 10. Схема поиска krisha.kz API search adverts ids Redis get templates by ids get data by ids render templates and save get adverts list
  • 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'
  • 13. • Просмотры • Антифлуд • Аналитика (график) • Единая авторизация • Платные услуги объявлений Микросервисы
  • 14. SEO • Для каждой страницы поиска задаётся собственный шаблон заголовка(title) и meta description.
  • 15. Деплой • Rsync на один бекенд (нулевой) • Раз в 3 минуты все остальные бекенды ходят на “нулевой” бекенд и синхронизируются. • С помощью Bamboo можно делать “откаты” релизов. • При каждом деплое с помощью Ansible делается очистка кеша твига, запуск синхронизации кода бекендов и другие задачи.
  • 16. Логирование Graylog • PSR-3 • В минуту пишется примерно 800 сообщений • Настроены уведомления при аномально большом количестве логов с уровнем (emergency, alert, critical,error,warning)
  • 17. Переезд • Это долгий и затратный процесс • Есть места, которые лучше не трогать • По скромным подсчётам нужно как минимум полгода чистой разработки, чтобы перенести весь функционал на новый движок • Стараемся не попасть под “эффект второй системы”
  • 18. Timeline technology ZF 1 2007 2005 20172011 krisha 1.0 PHP 4.4 2007 2009 2013 2015 PHP 5.3 PHP 5.4 2012 PHP 5.6 2014 krisha 2.0 1.0 PHP 7.1 1.3 2.0 ZF 1.12, ZF 2.0.0rc1 2012 Phalcon Phalcon 3.1 1.0 3.8 3.9 2016Gulp ZF 2.4.11
  • 19.
  • 20.
  • 21.
  • 22.