37
SOA Service Oriented Architecture как средство борьбы со сложностью в веб-проекте Тимур Каримбаев Ютинет.Ру

Тимур Каримбаев (Ютинет.ру)

  • Upload
    ontico

  • View
    332

  • Download
    14

Embed Size (px)

Citation preview

Page 1: Тимур Каримбаев (Ютинет.ру)

SOA Service Oriented Architecture как средство борьбы со сложностью в веб-проекте

Тимур КаримбаевЮтинет.Ру

Page 2: Тимур Каримбаев (Ютинет.ру)

Что такое SOAПодход к разработке, основанный на представлении ПО в виде набора слабо-связанных сервисов, общающихся друг с другом по общему протоколу

Page 3: Тимур Каримбаев (Ютинет.ру)

SOA в Enterprise

● Чаще применяется чем в вебе

● 2009 - SOA is Dead (Burton Group)

● Стандартные инструменты для реализации от поставщиков (IBM - 66%, Oracle, Sun)

● Стандартное использование

● Нисходящее внедрение

Page 4: Тимур Каримбаев (Ютинет.ру)

SOA в Web

● Все чаще применяется

● Нестандартная реализация

● Восходящее внедрение

● Кастомные инструменты

● Самый известный пример: Amazon.com

Page 5: Тимур Каримбаев (Ютинет.ру)

Сложность

● качественная характеристика системы, для которой нет единого формального метода оценки

● есть методы оценки на основе количества элементов системы и взаимсосвязями между ними, или на основе количества состояний системы

Page 6: Тимур Каримбаев (Ютинет.ру)

Сложностьосновной способ борьбы - делить сложную систему на более простые, а их в свою очередь на еще более простые

SOA - это способ деления системы

Page 7: Тимур Каримбаев (Ютинет.ру)

Веб-проект

Интернет-магазин

● Товары● Клиенты● Заказы

Page 8: Тимур Каримбаев (Ютинет.ру)

Веб-проект

Интернет-магазин

● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен

Page 9: Тимур Каримбаев (Ютинет.ру)

Веб-проект

Интернет-магазин

● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен

● CRM● Форум● Работа с соцсетями

….

Page 10: Тимур Каримбаев (Ютинет.ру)

Монолитное приложение

Веб-обработчик

Сервер приложений

База данных

Посетитель

Интернет-магазин

● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен

● CRM● Форум● Соцсети

Page 11: Тимур Каримбаев (Ютинет.ру)

Монолитное приложение

Веб-обработчик

Сервер приложений

База данных

Модуль 1 Модуль 2 Модуль 3

Модуль 1 Модуль 2

Потребитель

Интернет-магазин

● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен

● CRM● Форум● Соцсети

Page 12: Тимур Каримбаев (Ютинет.ру)

Монолитное приложение

Веб-обработчик

Сервер приложений

База данных

Модуль 1 Модуль 2 Модуль 3

Модуль 1 Модуль 2

Декомпозиция

Интернет-магазин

● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен

● CRM● Форум● Соцсети

Page 13: Тимур Каримбаев (Ютинет.ру)

Монолитное приложение

Веб-обработчик

Сервер приложений

Веб-обработчик

Сервер приложений

База данных

Веб-обработчик

Сервер приложений

Файлы Прочие ресурсы

ПотребительМасштабирование

...

Page 14: Тимур Каримбаев (Ютинет.ру)

SOA приложение

ЗаказыТовары Клиенты

Сайт Рассылка

CRMЗакупкаМониторинг цен

Page 15: Тимур Каримбаев (Ютинет.ру)

SOA приложение

ЗаказыТовары Клиенты

Сайт Рассылка

CRMЗакупкаМониторинг цен

Отправка писем

Хранение файлов

SMS-сервис

Page 16: Тимур Каримбаев (Ютинет.ру)

Сервис 1

ОбработчикЛогикаДанные

API

Сервис 2

ОбработчикЛогикаДанные

API

Сервис 3

ОбработчикЛогика

API

SOA приложение

Потребитель

Page 17: Тимур Каримбаев (Ютинет.ру)

SOA приложение

● Связи между компонентами ограничены API

● Возможность развивать компоненты по отдельности

● Возможность масштабировать компоненты по отдельности

Page 18: Тимур Каримбаев (Ютинет.ру)

Пример сервисаСбор обзоров и отзывов

Граббер

Анализ сайтов конкурентов

Скачивание изображений

Граббер Граббер

Плюсы

● Минимум расходов на передачу данных

● Кастомные решения

Минусы

● Дублирование функционала

Page 19: Тимур Каримбаев (Ютинет.ру)

Пример сервиса

Граббер

очередь

контент

Сбор обзоров и отзывов

Анализ сайтов конкурентов

Скачивание изображений

Плюсы

● Все еще минимум расходов на передачу данных

● Нет дублирования

Минусы

● Зависимость от ресурсови размещения

прямое соединение

Page 20: Тимур Каримбаев (Ютинет.ру)

Сервис граббинга

Пример сервисаСбор обзоров и отзывов

Анализ сайтов конкурентов

Скачивание изображений

Плюсы

● Нет дублирования● Полная независимость от

размещения и реализации

Минусы

● Оверхед на передачу данных● Более сложная разработка

API вызовы

Page 21: Тимур Каримбаев (Ютинет.ру)

Прямой вызов

( SELECT и т.п.)Потребитель База

Потребитель

База

Сервис

handler

логика

Оверхед на передаче данных

Page 22: Тимур Каримбаев (Ютинет.ру)

eCommerce платформа Ютинет

Ютинет

Торговые компании

Товарные эксперты

Пользователи интернета

Другие сайтызнания о товарах

предложения

заказызнания о товарах

знания о товарах

Основная задача платформыПредоставить человеку как можно больше информации о товаре

Page 23: Тимур Каримбаев (Ютинет.ру)

Карточка товара1. определить регион пользователя

2. характеристики и свойства товара;

3. выбрать лучшее предложение от ТК в регионе

4. подобрать сопутствующие товары;

5. отзывы и обзоры к этому товару;

6. баннеры

7. рекомендуемые товары с учетом статистики продаж

8. последние проданные товары;

9. выбрать похожие по характеристикам

товары

Page 24: Тимур Каримбаев (Ютинет.ру)

Ширина: 364 ммВысота 24.1ммВес: 2.56 кг

Процессор: i7-3615QM

Графика: Nvidia GeForce GT 650M

Компьютеры

Ноутбуки

Apple MacBook ProMid 2012 MD103RS/A

Процессоры

Intel Core i7-3615QM, 2300 МГц

Intel

Графические процессоры

NVIDIA GeForce GT 650M

Nvidia

Частота: 2300 Мгц

Количество ядер: 4 шт.

Частота шины: 5000 МТ/с

Page 25: Тимур Каримбаев (Ютинет.ру)

Потребители

Каталог

Исходные данные

Индексатор

Обсчёт

Storagejava

Storagejava

Storage

Хранение и отдача

Storage

Хранение и отдача

Page 26: Тимур Каримбаев (Ютинет.ру)

Потребители

Каталог

Исходные данные

Индексатор

Обсчёт

Storagejava

Storagejava

Storage

Хранение и отдача

Storage

Хранение и отдача

● Обновление данных● Garbage collector● Обновление сервисов● Перенос сервисов● Тестирование сервисов

Page 27: Тимур Каримбаев (Ютинет.ру)

Расчитанные характеристики

Сайт

Совместимыетовары

Похожиетовары Поиск

YML-генератор

Page 28: Тимур Каримбаев (Ютинет.ру)

Расчитанные характеристики

Сайт

Совместимыетовары

Похожиетовары Поиск

Цены

Выбор предложения

URL

Мэтчер

Бидообразование

YML-генератор

Page 29: Тимур Каримбаев (Ютинет.ру)

Локальное окружение

Боевой репозиторийЛокальный

репозиторий

Характеристики Поиск ЦеныЗаказыКлиенты

ЗаказыКлиенты

Отправка писем

Отправка писем

Файлы

Page 30: Тимур Каримбаев (Ютинет.ру)

Enterprise service bus - ESB

ESBПотребитель

Потребитель

Потребитель

Поставщик

Поставщик

● Роутинг сервисов - знает где находится тот или иной сервис

● Трансформация протоколов

● Сохранность сообщений

● Транзакционность запроса, в случае её необходимости

Page 31: Тимур Каримбаев (Ютинет.ру)

Каталог192.168.0.1

Гео-сервис 1192.168.0.2

Гео-сервис 2192.168.0.3

Файловый сервисfiles.services.utinet.ru

Потребитель

Потребитель

catalog192.168.0.1

geo192.168.0.2192.168.0.3

filesfiles.utinet.ru

...

Репозиторий сервисов

catalog192.168.0.1

geo192.168.0.2192.168.0.3

filesfiles.utinet.ru

...

Zookeeper

Page 32: Тимур Каримбаев (Ютинет.ру)

ПротоколыSOAP - стандартный протокол для SOA-систем

Плюсы:● поддерживается всем и вся● schema и валидация● позволяет типизировать передаваемые структуры

Минусы● очень большой оверхед по размеру● скорость

Page 33: Тимур Каримбаев (Ютинет.ру)

Протоколы

Apache Thrift

● создан в Facebook

● имеет реализации для многих языков

● предоставляет транспортный уровень

Google Protobuf

● создан в Google

● имеет компиляторы для C++, Java и Python

● От 20 до 100 раз быстрее, от 3 до 10 раз меньше XML

Протоколы межъязыкового взаимодействия

● Поддерживают бинарную передачу данных

● Генерируют код для разных языков из метаописания

Page 34: Тимур Каримбаев (Ютинет.ру)

ПротоколыМы используем собственный протокол, основанный на JSON и 2 его транспортных адаптера

Over HTTP:● для php-сервисов

Socket:● очень быстрый, практически без оверхеда по трафику● позволяет держать соединение открытым между запросами● не поддерживается php-сервисами (серверной частью)

Page 35: Тимур Каримбаев (Ютинет.ру)

Наши правила организации сервисов1. Протокол сервиса должен быть stateless

2. В сервис выделяется часть функционала, имеющая значение сама по себе

3. Сервис не должен знать ничего о своих клиентах

4. Если нужно пересекать между собой данные из двух сервисов - этим занимается потребитель - считывает данные из двух сервисов и пересекает. Если это нужно часто, или данных много - делается еще один сервис, который закачивает все данные (обращаясь к API обоих сервисов) и пересекает их уже внутри себя

5. Для случаев когда нужно пересекать данные особенно часто - поднимаются проксирующие сервисы;

6. Сервисы не имеют авторизации

Page 36: Тимур Каримбаев (Ютинет.ру)

Технологические моменты● Чтобы вся эта схема работала эффективно - у разработчиков должны

быть простые механизмы создания сервисов и подключения их к инфраструктуре

● В нашем случае инстанс сервиса чаще всего разворачивается в пределах одной виртуальной машины

● То что работает с первичными данными - это PHP + Postgresql, то что критично по времени ответа - Java ( Netty )

Page 37: Тимур Каримбаев (Ютинет.ру)

Спасибо за внимание