1. SOA Service Oriented Architecture
как средство борьбы со
сложностью в веб-проекте
Тимур Каримбаев
Ютинет.Ру
2. Что такое SOA
Подход к разработке, основанный на представлении ПО в виде набора
слабо-связанных сервисов, общающихся друг с другом по общему
протоколу
3. SOA в Enterprise
● Чаще применяется чем в вебе
● 2009 - SOA is Dead (Burton Group)
● Стандартные инструменты для реализации от
поставщиков (IBM - 66%, Oracle, Sun)
● Стандартное использование
● Нисходящее внедрение
4. SOA в Web
● Все чаще применяется
● Нестандартная реализация
● Восходящее внедрение
● Кастомные инструменты
● Самый известный пример: Amazon.com
5. Сложность
● качественная характеристика системы, для
которой нет единого формального метода оценки
● есть методы оценки на основе количества
элементов системы и взаимсосвязями между ними,
или на основе количества состояний системы
6. Сложность
основной способ борьбы - делить сложную систему на более простые,
а их в свою очередь на еще более простые
SOA - это способ деления системы
17. SOA приложение
● Связи между компонентами
ограничены API
● Возможность развивать
компоненты по отдельности
● Возможность масштабировать
компоненты по отдельности
18. Пример сервиса
Сбор обзоров и
отзывов
Граббер
Анализ сайтов
конкурентов
Скачивание
изображений
Граббер Граббер
Плюсы
● Минимум расходов
на передачу данных
● Кастомные решения
Минусы
● Дублирование функционала
19. Пример сервиса
Граббер
очередь
контент
Сбор обзоров и
отзывов
Анализ сайтов
конкурентов
Скачивание
изображений
Плюсы
● Все еще минимум
расходов на передачу данных
● Нет дублирования
Минусы
● Зависимость от ресурсов
и размещения
прямое соединение
20. Сервис граббинга
Пример сервиса
Сбор обзоров и
отзывов
Анализ сайтов
конкурентов
Скачивание
изображений
Плюсы
● Нет дублирования
● Полная независимость от
размещения и реализации
Минусы
● Оверхед на передачу данных
● Более сложная разработка
API вызовы
21. Прямой вызов
( SELECT и т.п.)
Потребитель База
Потребитель
База
Сервис
handler
логика
Оверхед на передаче данных
23. Карточка товара
1. определить регион пользователя
2. характеристики и свойства товара;
3. выбрать лучшее предложение от ТК в
регионе
4. подобрать сопутствующие товары;
5. отзывы и обзоры к этому товару;
6. баннеры
7. рекомендуемые товары с учетом
статистики продаж
8. последние проданные товары;
9. выбрать похожие по характеристикам
товары
24. Ширина: 364 мм
Высота 24.1мм
Вес: 2.56 кг
Процессор: i7-3615QM
Графика: Nvidia GeForce GT 650M
Компьютеры
Ноутбуки
Apple MacBook Pro
Mid 2012 MD103RS/A
Процессоры
Intel Core i7-3615QM, 2300 МГц
Intel
Графические процессоры
NVIDIA GeForce GT 650M
Nvidia
Частота: 2300 Мгц
Количество ядер: 4 шт.
Частота шины: 5000 МТ/с
30. Enterprise service bus - ESB
ESBПотребитель
Потребитель
Потребитель
Поставщик
Поставщик
● Роутинг сервисов - знает где
находится тот или иной сервис
● Трансформация протоколов
● Сохранность сообщений
● Транзакционность запроса, в
случае её необходимости
32. Протоколы
SOAP - стандартный протокол для SOA-систем
Плюсы:
● поддерживается всем и вся
● schema и валидация
● позволяет типизировать передаваемые структуры
Минусы
● очень большой оверхед по размеру
● скорость
33. Протоколы
Apache Thrift
● создан в Facebook
● имеет реализации для многих
языков
● предоставляет транспортный
уровень
Google Protobuf
● создан в Google
● имеет компиляторы для C++, Java и
Python
● От 20 до 100 раз быстрее, от 3 до 10
раз меньше XML
Протоколы межъязыкового взаимодействия
● Поддерживают бинарную передачу данных
● Генерируют код для разных языков из метаописания
34. Протоколы
Мы используем собственный протокол, основанный на JSON и 2 его
транспортных адаптера
Over HTTP:
● для php-сервисов
Socket:
● очень быстрый, практически без оверхеда по трафику
● позволяет держать соединение открытым между запросами
● не поддерживается php-сервисами (серверной частью)
35. Наши правила организации
сервисов
1. Протокол сервиса должен быть stateless
2. В сервис выделяется часть функционала, имеющая значение сама по себе
3. Сервис не должен знать ничего о своих клиентах
4. Если нужно пересекать между собой данные из двух сервисов - этим занимается
потребитель - считывает данные из двух сервисов и пересекает. Если это нужно часто,
или данных много - делается еще один сервис, который закачивает все данные
(обращаясь к API обоих сервисов) и пересекает их уже внутри себя
5. Для случаев когда нужно пересекать данные особенно часто - поднимаются
проксирующие сервисы;
6. Сервисы не имеют авторизации
36. Технологические моменты
● Чтобы вся эта схема работала эффективно - у разработчиков должны
быть простые механизмы создания сервисов и подключения их к
инфраструктуре
● В нашем случае инстанс сервиса чаще всего разворачивается в
пределах одной виртуальной машины
● То что работает с первичными данными - это PHP + Postgresql, то что
критично по времени ответа - Java ( Netty )