30
Как устроен Enter по версии 2013Q3

Андрей Татаринов

Embed Size (px)

Citation preview

Page 1: Андрей Татаринов

Как устроен Enterпо версии 2013Q3

Page 2: Андрей Татаринов

● Андрей Татаринов● Опыт

○ Enter: 2012~now○ Google: 2010-2012○ HH.ru: 2009-2010○ Yandex: 2005-2009

● Цель○ Уменьшение энтропии

Обо мне

Page 3: Андрей Татаринов

● мультиканальный ритейл○ реальные магазины (терминалы и касса)○ сайт○ колл-центр○ мобильные приложения

● все сложно○ много регионов присутствия○ много складов○ много магазинов○ расчет доступности○ расчет сроков доставки

Что такое Enter?

Page 4: Андрей Татаринов

Все сложно

● Общий сток○ нет классического деления на сток интернет-

магазина и реальных магазинов● Единая бизнес-логика

○ группировка товаров по моделям/линиям/наборам

○ расчет доступности○ расчет стоимостей и сроков○ etc

● 60+ типов конфигурационных мастер-данных

Page 5: Андрей Татаринов

Все сложно: сток

Page 6: Андрей Татаринов

● 2012Q1 Старт● 2012Q1~2013Q1

○ Стабилизация фронтов○ Переход на синхронный внутренний API○ Развитие бизнес-логики

● 2013Q1~now○ Развитие сервисной инфраструктуры

■ Новый поиск/листинги на sphinx■ Новая CMS

○ Внедрение ESB для интеграции stateful сервисов○ Рефакторинг обменов 1С, WEBCORE, etc.

Этапы развития информационной системы

Page 7: Андрей Татаринов

Как это было на старте 2012Q1

● Результат трехмесячного спринта● Фронты - отдельные независимые

системы○ сайт, терминалы, мобильные, соц.приложения○ разрабатывались параллельно независимыми

командами○ stateful○ собственная база○ собственная реализация бизнес-логики○ независимое состояние синхронизации

Page 8: Андрей Татаринов

Как это было старте 2012Q1: Проблемы

● Нестабильный сайт● Рассинхронизация между фронтами и

учетной системой● Несоответствие бизнес-логики между

фронтами● Нестабильные протоколы обменов

○ потеря данных

Page 9: Андрей Татаринов

Как это было старте 2012Q1: Нестабильный сайт

Page 10: Андрей Татаринов

2013Q3: Существенно лучше

Page 11: Андрей Татаринов

2012Q1: Компоненты

Page 12: Андрей Татаринов

2012Q1: Технологии

Page 13: Андрей Татаринов

2012Q1: Проблемы

Page 14: Андрей Татаринов

2012Q1: Первая итерация рефакторинга

● убить синхронизацию между WEBCORE и фронтами

● stateless-фронты● внутренний API

○ HTTP+JSON● роли фронта:

○ преобразование запроса клиента в несколько запросов API

○ агреггация данных○ визуализация данных

● новые вспомогательные сервисы

Page 15: Андрей Татаринов

2012Q1: Рефакторинг

Page 16: Андрей Татаринов

2013Q1: Компоненты

Page 17: Андрей Татаринов

2013Q1: Технологии

Page 18: Андрей Татаринов

Как строится страница

Page 19: Андрей Татаринов

Как строится страница

Page 20: Андрей Татаринов

RW/RO-API и терминалы

● RO○ RO/RW ≈ 100/1○ репликация○ горизонтальное масштабирование

● Магазины○ ~80 магазинов○ ~400 терминалов○ плохой канал○ большие запросы от терминалов○ локальные реплики RO-core○ mysql-репликация○ проксирование RW на площадку

Page 21: Андрей Татаринов

RW/RO-API и терминалы

Page 22: Андрей Татаринов

2013Q1: Проблемы

Page 23: Андрей Татаринов

2013Q1: Проблемы

Page 24: Андрей Татаринов

2013Q1: Вторая итерация рефакторинга

● Декомпозиция WEBCORE○ CORE - бизнес-логика, доступность, цены○ CMS - описания товаров, каталог○ Search - листинги и поиск

● Внедрение ESB Apache ServiceMix● Переработка интеграции сервисов

○ 1С○ WEBCORE○ Search○ OLAP○ etc

Page 25: Андрей Татаринов

2013Q1: Вторая итерация рефакторинга

Page 26: Андрей Татаринов

2013Q4: Компоненты

Page 27: Андрей Татаринов

2013Q4: Технологии

Page 28: Андрей Татаринов

ESB: Apache ServiceMix

● Альтернативы○ MuleESB○ WSO2 ESB○ JBoss ESB○ Apache ServiceMix

● Нагрузка○ Основная синхронизация CORE ↔ 1C: ~3000

пакетов, 2Gb данных○ CORE ↔ Sphinx: ~300000-500000 пакетов

Page 29: Андрей Татаринов

Итого

● Не копировать информацию без необходимости○ stateless > stateful

● Не усложнять○ поддерживать компоненты простыми

● Использовать готовые инструменты

Page 30: Андрей Татаринов

Спасибо

Андрей Татаринов@elephantum