SlideShare a Scribd company logo
1 of 6
Мироненко Максим ВладимировичDevelopmentMillWWW: http://developmentmill.com/Электронная почта: maxim.mi@developmentmill.com<br />3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)<br />Интеграция трех систем в рамках одного решения.<br />Введение<br />Мне хотелось бы рассказать о проекте, в рамках которого была осуществлена интеграция трех очень разных систем. Итак, с чего же все началось?<br />Заказчик попросил найти решение для создания интернет магазина на основе устаревшей ERP системы (Enterprise Resource Planning System — Система планирования ресурсов предприятия) которую он использовал. Планировалось иметь несколько вариантов оформления сайта и поддержку нескольких языков. Также серьезные требования предъявлялись системе управления магазином, иначе говоря, админке.<br />На данном этапе у нас уже были наработки по совместному использованию таких систем как Drupal и Magento, и было принято решение выполнить проект с использованием именно этих компонентов.<br />Почему Drupal? Drupal - система управления сайтом (CMS), написанная на языке PHP и свободно распространяющаяся под лицензией GPL. В данном случае Drupal должен служить фронтендом (frontend) системы, т.е. именно Drupal будут видеть пользователи (покупатели). Основным достоинством в данном случае является гибкость и простота создания визуальных элементов сайта. Огромное количество готовых модулей на все случаи жизни также является подспорьем в этом. Ну и наконец, тот факт, что у всей команды разработчиков есть большой опыт работы с данной CMS.<br />Почему Magento? Magento - интернет-магазин с открытым исходным кодом, распространяющийся в соответствии с Open Software License (OSL 3.0) и создано с использованием Zend Framework. Magento здесь выступает в качестве бэкенда (backend) системы, т.е. с её помощью осуществляется управление магазином. Эта система может предложить очень богатый набор функционала «из коробки», т.е. сама по себе Magento очень много умеет. Это и поддержка нескольких магазинов на одной сборке, поддержка нескольких языков и валют, поддержка составных и настраиваемых продуктов, гибкая настройка рекламных правил и акций, поддержка большого количества способов оплаты и доставки товаров и т.д. Еще одним очень важным достоинством Magento для этого проекта является наличие API (Application Programming Interface – интерфейс прикладного программирования), поддерживающего оба протокола XML-RPC и SOAP.<br />Решение<br />Итак, как же будут взаимодействовать все компоненты системы? Центральным звеном в системе является Magento. Она получает данные от ERP о продуктах и состоянии склада, а также предоставляет данные о совершенных заказах. Также Magento предоставляет данные о продуктах для Drupal. Drupal в свою очередь «общается» с Magento на предмет поступления заказов на покупку товаров, а также при регистрации новых пользователей.<br />На словах все звучит довольно просто и понятно, но на деле выяснилось что все компоненты системы очень разные, как по структуре хранения данных, так и по подходам в разработке модулей для них. Сейчас я расскажу, как же нам удалось связать все компоненты и таким образом взять лучшее от каждой системы.<br />Что касается Magento, то тут нами проделана огромная работа по расширению стандартного API. Были дописаны методы по созданию сложных продуктов, таких как Configurable Product и Bundle Product. Это продукты, содержание или атрибуты которых пользователь может изменить перед покупкой. Хорошим примером таких продуктов являются компьютер, компоненты которого можно выбрать по своему усмотрению, а также, например обувь, для которой можно выбрать нужный размер. Также в стандартном API Magento не было предусмотрено создание заказа (order), а так как пользователь не будет видеть и даже подозревать о наличии Magento, то информацию о заказе система будет получать от сайта на основе Drupal.<br />Основными задачами в разработке на стороне Drupal были:<br />Синхронизация и хранение продуктов<br />Синхронизация и хранение каталога<br />Синхронизация пользователей<br />Управление корзиной и формирование заказов<br />Также не обошлось и без работы связанной с ERP. Для того чтобы ERP смогла общаться с Magento был написан XML-Proxy на основе Microsoft BizTalk Server. Этот компонент работает с API Magento по протоколу SOAP, как наиболее удобному при разработке с использованием .NET.<br />Возможности<br />В результате проделанной работы мы получили многокомпонентную систему со следующими возможностями:<br />Синхронизация продуктов и каталога. Это означает, что информация о продуктах и каталогах проделывает следующий путь: ERP система с помощью  XML-Proxy  сервера отправляет данные о продуктах и каталогах в Magento. Оттуда эти данные по событию обновления, либо по расписанию забираются системой Drupal и становятся доступны для покупателей.<br />Синхронизация пользователей. Новые пользователи регистрируются на сайте, т.е. в системе Drupal. Сразу при этом данные отправляются в Magento, а оттуда становятся доступны для ERP. Здесь реализован механизм двусторонней синхронизации, т.к. и владелец магазина и пользователь могут изменить пользовательские данные, поэтому при изменении данных о пользователе в Magento они изменяются и в Drupal.<br />Синхронизация заказов. Здесь имеется ввиду возможность системе Drupal оформить заказ, а ERP системе получить данные об этом и любых других заказах.<br />Поддержка нескольких Drupal сборок. Это означает, что одна сборка Magento может работать с несколькими сборками Drupal как с независимыми магазинами, либо как с разными представлениями одного и того же магазина.<br />Проблемы<br />Первое с чем нам пришлось столкнуться – это сложная структура хранения данных в Magento. Эта система использует EAV (Entity-Attribute-Value, сущность-атрибут-значение) модель. Суть модели EAV проста: есть некоторая сущность и набор атрибутов, связанный с этой сущностью. Все записи о сущностях, атрибутах и их значения хранятся в отдельных таблицах БД. Более того, в Magento почти вся информация может быть разделена по нескольким областям видимости Global (верхний уровень области видимости, изменения значений атрибута или конфигурации будут применены ко всем уровням), Website (на одной сборке могут быть реализованы несколько вебсайтов, каждый из которых содержит один и более складов), Store (каждый склад может содержать различный набор продуктов, а также отдельный каталог).<br />Что это означает на практике? Это означает, что один экземпляр такой сущности как продукт может иметь различные значения, например цены, если речь идет о разных складах или разных вебсайтах в рамках одной сборки Magento.<br />Конечно, перенести такую структуру как она есть в Drupal очень не просто, т.к. в Drupal организация данных значительно отличается. Решением проблемы стало увеличение сущностей в системе Drupal и создание алгоритма по их объединению для работы с данными.<br />Второй проблемой стала информация о пользователях, точнее её количество. Стартовое количество пользователей в системе – 3.5 миллиона. Даже импортировать в обе системы такое количество пользователей оказалось проблемой. В системе Drupal пришлось отказаться от хранения расширенной информации о пользователе в привычной для этой системе единице информации – ноде (node). Так всю информацию о пользователях мы храним в одной таблице users, с частичной сериализацией данных.<br />В системе Magento пришлось оптимизировать запросы по работе с пользователями, а также частично отключить пакетную обработку пользователей в административной части.<br />Выводы<br />Итак, что же получилось в итоге?<br />Заказчик получил систему, в которой за внешнее оформление отвечает Drupal и изменение которого выполнить проще и дешевле. Заказчик получил удобный инструмент для управления магазином с последующей возможностью отказаться от ERP и полностью перейти на управление с помощью Magento.<br />Мы получили платформу для интегрирования двух систем, которую впоследствии можно развивать и внедрять в другие проекты.<br />В каких случаях такая система может быть полезна и оправдывать себя? Когда требуется иметь сложный или часто изменяющийся внешний вид магазина или несколько таких магазинов, но при этом хочется иметь единообразную и понятную административную часть. <br />Почему не сделать все на одной платформе Magento? В случаях когда дизайн сайта сложный или часто меняется, может оказаться дорого и долго разработка такого дизайна для Magento. Это связано со спецификой и сложностью разработки тем для Magento. <br />
CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)
CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)
CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)
CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)
CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)

More Related Content

More from CodeFest

Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 
Алексей Акулович
Алексей АкуловичАлексей Акулович
Алексей АкуловичCodeFest
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем ТитаренкоCodeFest
 
Олег Савкин
Олег СавкинОлег Савкин
Олег СавкинCodeFest
 

More from CodeFest (20)

Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 
Алексей Акулович
Алексей АкуловичАлексей Акулович
Алексей Акулович
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Олег Савкин
Олег СавкинОлег Савкин
Олег Савкин
 

CodeFest 2010. Мироненко М. — 3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)

  • 1. Мироненко Максим ВладимировичDevelopmentMillWWW: http://developmentmill.com/Электронная почта: maxim.mi@developmentmill.com<br />3 в 1: смешать, но не взбалтывать (CMS, eCommerce, ERP)<br />Интеграция трех систем в рамках одного решения.<br />Введение<br />Мне хотелось бы рассказать о проекте, в рамках которого была осуществлена интеграция трех очень разных систем. Итак, с чего же все началось?<br />Заказчик попросил найти решение для создания интернет магазина на основе устаревшей ERP системы (Enterprise Resource Planning System — Система планирования ресурсов предприятия) которую он использовал. Планировалось иметь несколько вариантов оформления сайта и поддержку нескольких языков. Также серьезные требования предъявлялись системе управления магазином, иначе говоря, админке.<br />На данном этапе у нас уже были наработки по совместному использованию таких систем как Drupal и Magento, и было принято решение выполнить проект с использованием именно этих компонентов.<br />Почему Drupal? Drupal - система управления сайтом (CMS), написанная на языке PHP и свободно распространяющаяся под лицензией GPL. В данном случае Drupal должен служить фронтендом (frontend) системы, т.е. именно Drupal будут видеть пользователи (покупатели). Основным достоинством в данном случае является гибкость и простота создания визуальных элементов сайта. Огромное количество готовых модулей на все случаи жизни также является подспорьем в этом. Ну и наконец, тот факт, что у всей команды разработчиков есть большой опыт работы с данной CMS.<br />Почему Magento? Magento - интернет-магазин с открытым исходным кодом, распространяющийся в соответствии с Open Software License (OSL 3.0) и создано с использованием Zend Framework. Magento здесь выступает в качестве бэкенда (backend) системы, т.е. с её помощью осуществляется управление магазином. Эта система может предложить очень богатый набор функционала «из коробки», т.е. сама по себе Magento очень много умеет. Это и поддержка нескольких магазинов на одной сборке, поддержка нескольких языков и валют, поддержка составных и настраиваемых продуктов, гибкая настройка рекламных правил и акций, поддержка большого количества способов оплаты и доставки товаров и т.д. Еще одним очень важным достоинством Magento для этого проекта является наличие API (Application Programming Interface – интерфейс прикладного программирования), поддерживающего оба протокола XML-RPC и SOAP.<br />Решение<br />Итак, как же будут взаимодействовать все компоненты системы? Центральным звеном в системе является Magento. Она получает данные от ERP о продуктах и состоянии склада, а также предоставляет данные о совершенных заказах. Также Magento предоставляет данные о продуктах для Drupal. Drupal в свою очередь «общается» с Magento на предмет поступления заказов на покупку товаров, а также при регистрации новых пользователей.<br />На словах все звучит довольно просто и понятно, но на деле выяснилось что все компоненты системы очень разные, как по структуре хранения данных, так и по подходам в разработке модулей для них. Сейчас я расскажу, как же нам удалось связать все компоненты и таким образом взять лучшее от каждой системы.<br />Что касается Magento, то тут нами проделана огромная работа по расширению стандартного API. Были дописаны методы по созданию сложных продуктов, таких как Configurable Product и Bundle Product. Это продукты, содержание или атрибуты которых пользователь может изменить перед покупкой. Хорошим примером таких продуктов являются компьютер, компоненты которого можно выбрать по своему усмотрению, а также, например обувь, для которой можно выбрать нужный размер. Также в стандартном API Magento не было предусмотрено создание заказа (order), а так как пользователь не будет видеть и даже подозревать о наличии Magento, то информацию о заказе система будет получать от сайта на основе Drupal.<br />Основными задачами в разработке на стороне Drupal были:<br />Синхронизация и хранение продуктов<br />Синхронизация и хранение каталога<br />Синхронизация пользователей<br />Управление корзиной и формирование заказов<br />Также не обошлось и без работы связанной с ERP. Для того чтобы ERP смогла общаться с Magento был написан XML-Proxy на основе Microsoft BizTalk Server. Этот компонент работает с API Magento по протоколу SOAP, как наиболее удобному при разработке с использованием .NET.<br />Возможности<br />В результате проделанной работы мы получили многокомпонентную систему со следующими возможностями:<br />Синхронизация продуктов и каталога. Это означает, что информация о продуктах и каталогах проделывает следующий путь: ERP система с помощью XML-Proxy сервера отправляет данные о продуктах и каталогах в Magento. Оттуда эти данные по событию обновления, либо по расписанию забираются системой Drupal и становятся доступны для покупателей.<br />Синхронизация пользователей. Новые пользователи регистрируются на сайте, т.е. в системе Drupal. Сразу при этом данные отправляются в Magento, а оттуда становятся доступны для ERP. Здесь реализован механизм двусторонней синхронизации, т.к. и владелец магазина и пользователь могут изменить пользовательские данные, поэтому при изменении данных о пользователе в Magento они изменяются и в Drupal.<br />Синхронизация заказов. Здесь имеется ввиду возможность системе Drupal оформить заказ, а ERP системе получить данные об этом и любых других заказах.<br />Поддержка нескольких Drupal сборок. Это означает, что одна сборка Magento может работать с несколькими сборками Drupal как с независимыми магазинами, либо как с разными представлениями одного и того же магазина.<br />Проблемы<br />Первое с чем нам пришлось столкнуться – это сложная структура хранения данных в Magento. Эта система использует EAV (Entity-Attribute-Value, сущность-атрибут-значение) модель. Суть модели EAV проста: есть некоторая сущность и набор атрибутов, связанный с этой сущностью. Все записи о сущностях, атрибутах и их значения хранятся в отдельных таблицах БД. Более того, в Magento почти вся информация может быть разделена по нескольким областям видимости Global (верхний уровень области видимости, изменения значений атрибута или конфигурации будут применены ко всем уровням), Website (на одной сборке могут быть реализованы несколько вебсайтов, каждый из которых содержит один и более складов), Store (каждый склад может содержать различный набор продуктов, а также отдельный каталог).<br />Что это означает на практике? Это означает, что один экземпляр такой сущности как продукт может иметь различные значения, например цены, если речь идет о разных складах или разных вебсайтах в рамках одной сборки Magento.<br />Конечно, перенести такую структуру как она есть в Drupal очень не просто, т.к. в Drupal организация данных значительно отличается. Решением проблемы стало увеличение сущностей в системе Drupal и создание алгоритма по их объединению для работы с данными.<br />Второй проблемой стала информация о пользователях, точнее её количество. Стартовое количество пользователей в системе – 3.5 миллиона. Даже импортировать в обе системы такое количество пользователей оказалось проблемой. В системе Drupal пришлось отказаться от хранения расширенной информации о пользователе в привычной для этой системе единице информации – ноде (node). Так всю информацию о пользователях мы храним в одной таблице users, с частичной сериализацией данных.<br />В системе Magento пришлось оптимизировать запросы по работе с пользователями, а также частично отключить пакетную обработку пользователей в административной части.<br />Выводы<br />Итак, что же получилось в итоге?<br />Заказчик получил систему, в которой за внешнее оформление отвечает Drupal и изменение которого выполнить проще и дешевле. Заказчик получил удобный инструмент для управления магазином с последующей возможностью отказаться от ERP и полностью перейти на управление с помощью Magento.<br />Мы получили платформу для интегрирования двух систем, которую впоследствии можно развивать и внедрять в другие проекты.<br />В каких случаях такая система может быть полезна и оправдывать себя? Когда требуется иметь сложный или часто изменяющийся внешний вид магазина или несколько таких магазинов, но при этом хочется иметь единообразную и понятную административную часть. <br />Почему не сделать все на одной платформе Magento? В случаях когда дизайн сайта сложный или часто меняется, может оказаться дорого и долго разработка такого дизайна для Magento. Это связано со спецификой и сложностью разработки тем для Magento. <br />