SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Микросервисный
фронтенд
Вячеслав Слинько
ЦИАН
О докладе
Микросервисная архитектура для скорости и качества разработки
фронтенда в больших проектах
О компании
16 лет

Один продукт

90+ человек в IT отделе

Много продуктовых команд
Разработка на виджетах
• Скачал — используешь
• Множество готовых виджетов
• Через два дня лапшекод
4
SPA
• Можно делать сложные проекты
• Можно работать параллельно с бекендом
• Проект становится большим и сложным
5
Библиотека компонентов
• Можно переиспользовать
• Часть сложности выносится из проекта
• Либо библиотека базовая, либо большая и сложная
6
Микросервисный подход
• Сложный проект собирается из простых фрагментов
• Радикальная изолированность
7
Что мы называем микросервисом?
8
GET https://frontend-header/v1/get-header-markup/?device=tablet



<link rel=“stylesheet” href=“//header.cian.site/header.css”>
<!-- ... -->
<header class=“header—tablet”><!-- ... --></header>
<!-- ... -->
<script src=“//header.cian.site/header.js”></script>
Кодовая база сервиса
резко уменьшается
1.
Микросервис помещается в голове
• Понятно что и где надо сделать
• Оценить задачу проще
10
Maintenance можно размазать
• Обновление зависимости можно поделить на сервисы
• Поддержка перестает блокировать продуктовые задачи
11
t
Понятная архитектура сервиса
• Сложные задачи может решать даже новый разработчик
• Архитектуру сервиса можно адаптировать под требования
12
A B
C
Фича может менять много сервисов
• Нужно синхронизировать релиз
• Нужно учитывать что зависимости может не быть на бою
13
Иногда надо нарушать изоляцию
• UX не должен страдать из-за архитектуры
14
Дублирование общих зависимостей
• Увеличение размера страницы
• Замедление загрузки страницы
15
Точка входа
• Принимает оригинальный запрос пользователя
• Роутит запрос на нужный микросервис
16
E
Микросервис страницы
• Принимает оригинальный запрос пользователя
• Собирает лайаут страницы из фрагментов
• Содержит логику обработки ошибок
17
E P
Микросервис фрагмента
• Реализует серверный рендеринг в виде API
• Принимает запрос согласно схеме
• Отвечает за клиентскую часть фрагмента
18
E P
F F
BACKEND
Итоговая страница
19
Browser
F FF
1 2 3
• Фрагменты отдаются в потоке
• Фрагмент могут загружаться асинхронно
Browser
Связывание фрагментов
• Классический PubSub
• События декларативны и минималистичны
• Подходит для плоской системы
20
F PubSub F
• Зависимые библиотеки собираются отдельно
• Сервисы используют зависимости из общей сборки
Дедубликация через Webpack DLL
21
FF1 2
Быстрый continuous
deployment без боли
2.
Ускорение сборки и тестирования
• Быстрый фидбек разработчику
• Можно релизить хоть каждый коммит
23
Code Build Test Deploy Analyse
Code
Code
Уменьшается время до релиза
• Быстрое реагирование на проблемы
• Проще делать эксперименты с продуктом
24
Code Build Test Deploy Analyse
Code Build Test Deploy Analyse
Выше требования к инфраструктуре
• Обязательный Zero Downtime Deploy
• Устойчивость к проблемам
• Быстрое масштабирование
25
Шаблон микросервиса
• Сборка и деплой
• Логирование сообщений, ошибок, телеметрии, запросов
• Мало boilerplate, много библиотек
26
Сборка ресурсов фрагмента
• Кастомизировать сборку под проект нельзя
• Файлы имеют уникальный хеш в имени
27
Деплой
• Dev для тестирования одного микросервиса
• Staging для интеграционного тестирования
• Релиз на бой через blue/green
28
Локализация проблемы
в конкретном сервисе
3.
Ошибка сервиса не ломает систему
• Фрагменты отключаются по условию
• Остальные сервисы продолжают работать
• Можно не тестировать всю систему перед релизом
30
Тормоза проявляются в одном месте
• Новая зависимость не влияет на весь сайт
• Можно точнее определять приоритеты работы
31
Микросервисам нужен мониторинг
• Непопулярный микросервис может долго жить с проблемой
• Мониторинг должен маштабироваться
32
Мониторинг ошибок
• Собираем ошибки на сервере и в браузерах
• Есть готовые системы, например Sentry
• На ошибки надо реагировать
33
A.
B.
C.
Мониторинг производительности
• Собираем сообщения, события, метрики
• Данные собираются на сервере и в браузере
34
Navigation Timing API
• Информация о скорости и этапах загрузки страницы
• Каждый запрос храним на сервере
• Данные сильно отличаются от ожидаемых
35
User Timing API
• Измерение времени любых процессов
• Интеграция с Chrome DevTools
• Все храним на сервере
36
Уникальный идентификатор запроса
• Идентификатор генерируется в начале запроса
• Можно связать все подзапросы
• Можно отправить на клиент
37
uuid.v4();
В итоге
Плюсы
• Маленький размер сервиса
• Быстрый continuous deployment
• Проблема локализуется в одном сервисе
39
Минусы
• Сложно связать изолированные сервисы
• Нужно избавляться дублирование зависимостей
• Инфраструктура становится сложнее
40
Почему это подходит для нас?
• Много продуктовых команд делают один проект
• Все хотят релизить фичи как можно чаще
• Мы не хотим из-за этого страдать
• Есть возможность инвестировать в архитектуру
41
Project Mosaic от Zalando
• Похожая архитектура
• Часть проектов находится в Open Source
• Есть статьи и доклады
42
Как начать?
• Сделать один фрагмент
• Сделать страницу полностью из фрагментов
• Начать стандартизировать
43
Спасибо
Ссылки
• Project Mosaic от Zalando
• Доклад про управление версиями компонентов от hh.ru
• Доклад про эффективную загрузку страницы от Яндекса
• Методология RAIL от Google
• Система сбора ошибок Sentry
45

Más contenido relacionado

La actualidad más candente

Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Fwdays
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"Provectus
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложенияJohn Wezel
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Fwdays
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинPositive Hack Days
 
Сергей Орлов
Сергей ОрловСергей Орлов
Сергей ОрловCodeFest
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использованияGDG Odessa
 
Самодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NETСамодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NETAndrew Gubskiy
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsSQALab
 
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)Ontico
 
Алексей Кабанов
Алексей КабановАлексей Кабанов
Алексей КабановSQALab
 
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир СелинИнструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир СелинPositive Hack Days
 
Разработка high load системы на .NET Core
Разработка high load системы на .NET CoreРазработка high load системы на .NET Core
Разработка high load системы на .NET CoreAndrew Gubskiy
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
 
Backendless BaaS. Dinosaurus for Jeeconf 2013
Backendless BaaS. Dinosaurus for Jeeconf 2013Backendless BaaS. Dinosaurus for Jeeconf 2013
Backendless BaaS. Dinosaurus for Jeeconf 2013backendless
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterpriseAlex Tumanoff
 

La actualidad más candente (20)

Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложения
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинvSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур Гильмуллин
 
Сергей Орлов
Сергей ОрловСергей Орлов
Сергей Орлов
 
React + Redux. Опыт использования
React + Redux. Опыт использованияReact + Redux. Опыт использования
React + Redux. Опыт использования
 
Самодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NETСамодиагностика сервисов на базе платформы .NET
Самодиагностика сервисов на базе платформы .NET
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
 
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
OpenStack: от enterprise к сервис-провайдеру / Сергей Пимков (Селектел)
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
 
Алексей Кабанов
Алексей КабановАлексей Кабанов
Алексей Кабанов
 
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир СелинИнструментарий для создания дистрибутивов продуктов | Владимир Селин
Инструментарий для создания дистрибутивов продуктов | Владимир Селин
 
Разработка high load системы на .NET Core
Разработка high load системы на .NET CoreРазработка high load системы на .NET Core
Разработка high load системы на .NET Core
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Backendless BaaS. Dinosaurus for Jeeconf 2013
Backendless BaaS. Dinosaurus for Jeeconf 2013Backendless BaaS. Dinosaurus for Jeeconf 2013
Backendless BaaS. Dinosaurus for Jeeconf 2013
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterprise
 

Similar a Микросервисный фронтенд

Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePointVitaly Baum
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Fwdays
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
 
Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач simai
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаZestranec
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика SQALab
 

Similar a Микросервисный фронтенд (20)

Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Тестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщикаТестирование крупного проекта командой из одного тестировщика
Тестирование крупного проекта командой из одного тестировщика
 
Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика Тестирование крупных проектов командой из одного тестировщика
Тестирование крупных проектов командой из одного тестировщика
 

Микросервисный фронтенд