Upload
ontico
View
332
Download
14
Embed Size (px)
Citation preview
SOA Service Oriented Architecture как средство борьбы со сложностью в веб-проекте
Тимур КаримбаевЮтинет.Ру
Что такое SOAПодход к разработке, основанный на представлении ПО в виде набора слабо-связанных сервисов, общающихся друг с другом по общему протоколу
SOA в Enterprise
● Чаще применяется чем в вебе
● 2009 - SOA is Dead (Burton Group)
● Стандартные инструменты для реализации от поставщиков (IBM - 66%, Oracle, Sun)
● Стандартное использование
● Нисходящее внедрение
SOA в Web
● Все чаще применяется
● Нестандартная реализация
● Восходящее внедрение
● Кастомные инструменты
● Самый известный пример: Amazon.com
Сложность
● качественная характеристика системы, для которой нет единого формального метода оценки
● есть методы оценки на основе количества элементов системы и взаимсосвязями между ними, или на основе количества состояний системы
Сложностьосновной способ борьбы - делить сложную систему на более простые, а их в свою очередь на еще более простые
SOA - это способ деления системы
Веб-проект
Интернет-магазин
● Товары● Клиенты● Заказы
Веб-проект
Интернет-магазин
● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен
Веб-проект
Интернет-магазин
● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен
● CRM● Форум● Работа с соцсетями
….
Монолитное приложение
Веб-обработчик
Сервер приложений
База данных
Посетитель
Интернет-магазин
● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен
● CRM● Форум● Соцсети
Монолитное приложение
Веб-обработчик
Сервер приложений
База данных
Модуль 1 Модуль 2 Модуль 3
Модуль 1 Модуль 2
Потребитель
Интернет-магазин
● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен
● CRM● Форум● Соцсети
Монолитное приложение
Веб-обработчик
Сервер приложений
База данных
Модуль 1 Модуль 2 Модуль 3
Модуль 1 Модуль 2
Декомпозиция
Интернет-магазин
● Товары● Клиенты● Заказы● Отзывы● Рассылка● Закупка● Мониторинг цен
● CRM● Форум● Соцсети
Монолитное приложение
Веб-обработчик
Сервер приложений
Веб-обработчик
Сервер приложений
База данных
Веб-обработчик
Сервер приложений
Файлы Прочие ресурсы
ПотребительМасштабирование
...
SOA приложение
ЗаказыТовары Клиенты
Сайт Рассылка
CRMЗакупкаМониторинг цен
SOA приложение
ЗаказыТовары Клиенты
Сайт Рассылка
CRMЗакупкаМониторинг цен
Отправка писем
Хранение файлов
SMS-сервис
Сервис 1
ОбработчикЛогикаДанные
API
Сервис 2
ОбработчикЛогикаДанные
API
Сервис 3
ОбработчикЛогика
API
SOA приложение
Потребитель
SOA приложение
● Связи между компонентами ограничены API
● Возможность развивать компоненты по отдельности
● Возможность масштабировать компоненты по отдельности
Пример сервисаСбор обзоров и отзывов
Граббер
Анализ сайтов конкурентов
Скачивание изображений
Граббер Граббер
Плюсы
● Минимум расходов на передачу данных
● Кастомные решения
Минусы
● Дублирование функционала
Пример сервиса
Граббер
очередь
контент
Сбор обзоров и отзывов
Анализ сайтов конкурентов
Скачивание изображений
Плюсы
● Все еще минимум расходов на передачу данных
● Нет дублирования
Минусы
● Зависимость от ресурсови размещения
прямое соединение
Сервис граббинга
Пример сервисаСбор обзоров и отзывов
Анализ сайтов конкурентов
Скачивание изображений
Плюсы
● Нет дублирования● Полная независимость от
размещения и реализации
Минусы
● Оверхед на передачу данных● Более сложная разработка
API вызовы
Прямой вызов
( SELECT и т.п.)Потребитель База
Потребитель
База
Сервис
handler
логика
Оверхед на передаче данных
eCommerce платформа Ютинет
Ютинет
Торговые компании
Товарные эксперты
Пользователи интернета
Другие сайтызнания о товарах
предложения
заказызнания о товарах
знания о товарах
Основная задача платформыПредоставить человеку как можно больше информации о товаре
Карточка товара1. определить регион пользователя
2. характеристики и свойства товара;
3. выбрать лучшее предложение от ТК в регионе
4. подобрать сопутствующие товары;
5. отзывы и обзоры к этому товару;
6. баннеры
7. рекомендуемые товары с учетом статистики продаж
8. последние проданные товары;
9. выбрать похожие по характеристикам
товары
Ширина: 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 МТ/с
Потребители
Каталог
Исходные данные
Индексатор
Обсчёт
Storagejava
Storagejava
Storage
Хранение и отдача
Storage
Хранение и отдача
Потребители
Каталог
Исходные данные
Индексатор
Обсчёт
Storagejava
Storagejava
Storage
Хранение и отдача
Storage
Хранение и отдача
● Обновление данных● Garbage collector● Обновление сервисов● Перенос сервисов● Тестирование сервисов
Расчитанные характеристики
Сайт
Совместимыетовары
Похожиетовары Поиск
YML-генератор
Расчитанные характеристики
Сайт
Совместимыетовары
Похожиетовары Поиск
Цены
Выбор предложения
URL
Мэтчер
Бидообразование
YML-генератор
Локальное окружение
Боевой репозиторийЛокальный
репозиторий
Характеристики Поиск ЦеныЗаказыКлиенты
ЗаказыКлиенты
Отправка писем
Отправка писем
Файлы
Enterprise service bus - ESB
ESBПотребитель
Потребитель
Потребитель
Поставщик
Поставщик
● Роутинг сервисов - знает где находится тот или иной сервис
● Трансформация протоколов
● Сохранность сообщений
● Транзакционность запроса, в случае её необходимости
Каталог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
ПротоколыSOAP - стандартный протокол для SOA-систем
Плюсы:● поддерживается всем и вся● schema и валидация● позволяет типизировать передаваемые структуры
Минусы● очень большой оверхед по размеру● скорость
Протоколы
Apache Thrift
● создан в Facebook
● имеет реализации для многих языков
● предоставляет транспортный уровень
Google Protobuf
● создан в Google
● имеет компиляторы для C++, Java и Python
● От 20 до 100 раз быстрее, от 3 до 10 раз меньше XML
Протоколы межъязыкового взаимодействия
● Поддерживают бинарную передачу данных
● Генерируют код для разных языков из метаописания
ПротоколыМы используем собственный протокол, основанный на JSON и 2 его транспортных адаптера
Over HTTP:● для php-сервисов
Socket:● очень быстрый, практически без оверхеда по трафику● позволяет держать соединение открытым между запросами● не поддерживается php-сервисами (серверной частью)
Наши правила организации сервисов1. Протокол сервиса должен быть stateless
2. В сервис выделяется часть функционала, имеющая значение сама по себе
3. Сервис не должен знать ничего о своих клиентах
4. Если нужно пересекать между собой данные из двух сервисов - этим занимается потребитель - считывает данные из двух сервисов и пересекает. Если это нужно часто, или данных много - делается еще один сервис, который закачивает все данные (обращаясь к API обоих сервисов) и пересекает их уже внутри себя
5. Для случаев когда нужно пересекать данные особенно часто - поднимаются проксирующие сервисы;
6. Сервисы не имеют авторизации
Технологические моменты● Чтобы вся эта схема работала эффективно - у разработчиков должны
быть простые механизмы создания сервисов и подключения их к инфраструктуре
● В нашем случае инстанс сервиса чаще всего разворачивается в пределах одной виртуальной машины
● То что работает с первичными данными - это PHP + Postgresql, то что критично по времени ответа - Java ( Netty )
Спасибо за внимание