Выражаем благодарность за подготовку статьи Павлу Ковтуну — CEO Mycroft Assistant. Павел больше 12 лет
специализируется в области автоматизации бизнеса и supply chain management.Является автором уникальных методик анализа и принятия решений в SCM, создатель первой инновационной системы управления запасами экспертного уровня.
Задача любого бизнеса – эффективное использование имеющихся ресурсов. Для бизнеса, работающего с товарами, одной из основных проблем является эффективное вложение денег в оборотный товар — запасов товара всегда должно быть ровно столько, сколько нужно. Если его больше, чем нужно (overstock), то деньги вложены неэффективно, если меньше (out-of-stock) — то есть вероятность пропущенных продаж, низкого качества обслуживания и потерянных клиентов. Результат — неверное решение проблемы ведет к потерянным деньгам.
Решением этой проблемы занимается отрасль менеджмента, которая называется управлением цепочками поставок – Supply Chain Management. Механизмы, которые используются при решении задач, связаны с обработкой больших массивов данных, математическим моделированием, использованием статистических методов, решением задач оптимизации и машинным обучением.
Большинство компаний решают проблемы поставок просто использованием расчетов Excel, вручную собирая данные, тривиальные формулы и заложенную ошибку, которая незначительна на небольших оборотах фирмы. И до определенного размера и оборота компании этот вариант подходит — есть возможность масштабировать расчеты, нанимая новых менеджеров. Но при росте компании, накопленная ошибка и увеличивающийся объем данных не позволяет вести все расчеты «в ручном режиме» — эффективность работы падает настолько, что в результате постоянной массы неверных решений, неэффективность использования оборотных средств может достигать 30%.
Что же делать бизнесу
Для решения этих проблем есть специальный класс систем, называемый Expert Supply Chain Management (expert-SCM). Такого рода решения самостоятельно следят за данными о текущих продажах и доступных остатках каждого из товара во всех торговых точках (складах). Причем делают это не только у вас, но и у других участников цепи снабжения. И, имея эти данные, с учетом индивидуальных особенностей продаж товаров, в режиме online производят обработку всего гигантского массива данных, вынося решения о том, в какой товар необходимо вкладывать деньги и на какой торговой точке это товар необходимо поставить сейчас, чтобы не было проблем в будущем.
Наше решение – Mycroft Assistant (mycroftbs.ru) является одним из передовых облачных представителей Expert-SCM решений для СМБ. Мы уже больше 5 лет занимаемся SCM-решениями, и наши клиенты подтверждают экономическую эффективность использования наших решений в бизнесе.
Два года назад мы решили собрать наши наработки и накопленный опыт в этой сфере, создав продукт, который наиболее оптимальным образом решает проблемы клиентов. При этом мы поставили перед SCM Mycroft Assistant две задачи:
- давать максимальную бизнес-эффективность (usability, скорость интеграции и развертывания, результат работы, возможность объединить всех участников цепочки поставок),
- иметь оптимальную современную техническую реализацию (архитектура, скорость расчетов, используемые методы и подходы).
Важным моментом было дать возможность широкого использования нашего решения большому количеству клиентов и возможность их взаимодействия между собой в рамках единой цепочки поставок. В результате получилось решение, по стоимости и удобствудоступное большинству СМБ клиентов, потому было необходимо учитывать высокую нагрузку на систему. В результате, у нас получилось enterprise-приложение завтрашнего дня.
Каким образом мы спроектировали MycroftAssistant?
Мы изначально решили, что это будет облачное решение, реализованное на зарекомендовавшем себя и знакомым клиентам стеке технологий Microsoft (Azure, ASP.NET, MS SQL), которое сможет работать максимально гибко:
- Onpremise — в индивидуальном облаке для тех, кто самостоятельно хочет управлять своими данными
- Multi-Tenant – облачное SaaS-решение для большинства клиентов на общем облаке,
Хоть мы и начали разработку на своем сервере в collocation в датацентре, изначально планировалось для production использовать облако Azure как по бизнес-причинам, так и по техническим соображениям:
- Архитектура Azure предлагает готовый пул решений и модулей, в логике которого реализована наша архитектура. Так что нам не пришлось создавать комплекс из реплицированных VM. При этом мы получили оптимальные reliability и scalability, которые позволят нам легко масштабировать бизнес, не беспокоясь о технических проблемах и не придумывая «костыли» для решения тех проблем, которые уже решены возможностями Azure
- Несмотря на сниженную производительность относительно своего collocation сервера, экономический эффект от высокого уровня отказоустойчивости покрывает эти «расчетные» издержки. Так что мы не беспокоимся за стабильность собственных серверов, и даем высокий уровень обслуживания клиента.
- Azure позволяет разместить точки доступа к серверу ближе к клиентам. Для нас это актуально, так как наши клиенты располагаются в России, Америке и Европе. Возможность снизить latency доступа к серверу, перенеся его ближе к клиенту – отличное преимущество, которое не стыдно упомянуть для клиента.
- Стоимость использования и обслуживания Azure достаточно низкая, а возможности легко масштабировать ресурсы согласно фактической потребности помогают прогнозировать затраты на каждого клиента.
- Реализация позволяет объединить объекты клиентов в рамках единой базы данных. Удобно, когда идет связка по принципу Поставщик – Покупатель.
Реализация облачной архитектуры была заложена при проектировании Mycroft Assistant как SaaS web-based решения.
Какой стек использовали для реализации?
Со стороны сервера мы используем следующие технологии:
- EntityFramework 6,
- SQL Server,
- ASP.NET MVC 5,
- ASP.NET Web API 2,
- ASP.NET Identity,
- OWIN,
- SignalR,
- Hangfire
Со стороны клиента используются:
jQuery, jQuery UI, knockoutjs, flot, Globalize, DataTables, Bootstrap, fancytree
Нашу архитектуру мы выбирали долго и мучительно на старте реализации, но в итоге пришли к наиболее оптимальной, которую можно представить в виде следующей схемы:
SCM Mycroft Assistant состоит, условно, из трех частей: Core, WebAccess, Workers.
Core — набор основных библиотек для общего функционирования системы: общие классы, базовые интерфейсы, компоненты ядра и т.д.
WebAccess — web-доступ на основе ASP.NET MVC. Просмотр и управление данными, настройка, администрирование. Состоит из нескольких подсистем, при этом имеется возможность установить любую другую подсистему, не пересобирая модуль WebAccess. Регистрация подсистем происходит автоматически при старте приложения.
Workers — Azure Worker Role, внутри которых выполняются все расчеты.
В системе реализован механизм «плагинов». Например, для загрузки данных в систему может быть написан плагин, который сможет получить данные из внешней системы по API, которые затем конвертируются во внутренние объекты бизнес-логики и сохраняются в БД. Через плагины также могут быть расширены: уведомления, отчеты, модули расчета данных.
После нескольких итераций и доработки архитектуры, мы выстроили следующий порядок взаимодействия частей системы, и их особенности:
- Пользователь через web-сайт (Web Role) смотрит данные из своей БД (SQL Azure, который находится в Elastic Database Pool).
- У каждого клиента своя БД. Нагрузка не постоянная, поэтому и используется Elastic Pool, Autoscale для Web Role и Worker Role. Это позволяет масштабировать производительность соразмерно количеству клиентов.
- Через web-сайт пользователь инициирует загрузку данных из внешних систем, загружает файлы, отправляет задание на перерасчет рекомендаций, планирования и т.п.
- Для хранения файлов используется Azure Storage Blobs. При загрузке файла, Web Role его сохраняет, а Worker Role должен этот файл получить и загрузить из него данные в БД клиента.
- Web-сайт отправляет в Storage Queue сообщение с параметрами задания. Worker Role берет задание, запускает у себя Task на его выполнение.
- Прогресс выполнения задания отправляется на страницу пользователя через SignalR.
- Worker Role настраивается на авто масштабирование, что позволит при необходимости быстро запускать новые instance.
- Каждый из Worker Role работает одинаково, нет разделения primary-secondary – таким образом, реализован Multi-Tenancy подход.
Неплохо, а что насчет нагрузки?
После развертывания в Azure мы получили возможность провести всестороннее комплексное нагрузочное тестирование средствами Visual Studio OnlineОно выявило bottle-neck, который не проявлялся при работе с текущими клиентами.Выглядело это примерно так:
К примеру, если клиент оперирует 50 000 различными товарами на 60 торговых точках, итого, только за 1 день, если рассчитывать все перемещения между различными точками, объем оперируемых записей составляет 50 000 * 60 * 60 = 180 000 000, а для обсчета истории за год (что и должно происходить в рабочем режиме), количество записей больше чем 6.5 * 10^10. С таким объемом Big Data кэш не справляется.
Проблема была в архитектуре кеширования данных — весь кэш был in-memory. Это позволяло сильно сократить ожидания ответов на клиентской стороне, но, при этом, увеличивало расходы оперативной памяти. Если кешировать только информацию, к которой происходит наиболее частое обращение, то это не настолько проблематично, как кешировать все сырые данные.
Решение выявленных проблем
К счастью, мы изначально и планировали переходить на распределенный кэш, но для этого нам надо было перевести фильтрацию и агрегирование данных из LINQ в SQL.
Даже не в LINQ to SQL, а в ручное конструирование запросов, поскольку у нас используется разносторонний срез по различным данным (товары, склады, менеджеры и т.п., да еще и по годам, месяцам и самое “интересное” — по неделям), а Entity Framework функции из кода C# вызывать не умеет, к сожалению (Expression нам не подходил).
Агрегированные данные, во-первых, занимают меньше места в памяти, а во-вторых, мы вообще отказались от кеширования, переложив нагрузку на БД. Ценой несущественного снижения скорости загрузки информации мы победили утечки памяти.
Что получилось в результате?
По результату развертывания решения в Azure и получения возможности использования всех современных «плюшек» которые дает эта платформа, мы пришли к выводу, что наш расчет на получение технических преимуществ от использования технологического стека Microsoft и облачных технологий Azure полностью оправдал себя.
Также мы видим, что клиенты, использующие облачные технологии, такие как наше решение SCM Mycroft Assistant получают уже сегодня на голову лучшее обслуживание, чем используя решения, построенное на on-premise технологии. Такие как:
- Скорость развертывания решения. Клиент может начать работу в течение всего 1 дня. Нет зависимости от используемой системы учета.
Доступность решения с различных мест и устройств. Нет необходимости длительной установки клиентов или участия ИТ персонала в интеграции решения
- Высокая скорость работы: как со стороны клиента, так и со стороны сервера. Очень большой объем данных может быть пересчитан в течение считанных минут. При этом нет необходимости тратится на дорогостоящий сервер. Также нет зависимости работы от скорости клиентских машин.
- Нет проблем с масштабируемостью и надежностью решения. Когда компания растет, она может не задумываться о необходимости увеличения затрат на техническое обслуживание увеличивающегося объема данных. Также компания может быть уверена в высоком уровне доступности решения, так как оно располагается на зарекомендовавших себя мощностях Microsoft, технические возможности которой больше возможностей любой частной фирмы.
- Стоимость использования и обслуживания решения «под ключ» на порядки меньше. При этом затраты переходят из CAPEX в OPEX, что радует финансовый отдел.
- Есть возможность интегрировать всех участников цепи поставок в единую цепочку с автоматическим обменом данными в облаке, что не дает ни одно другое решение.
Вы можете убедиться во всем этом, ознакомившись с нашей ДЕМОВЕРСИЕЙ, которая доступна для всех желающих. А если вы заинтересовались SCM Mycroft Assistant как клиент, то можете легко подключиться к решению, и, получив бесплатный тестовый период, самостоятельно проверить эффективность ее работы.
Об авторе
Павел Ковтун — CEO Mycroft Assistant
Больше 12 лет в области автоматизации бизнеса, больше 8 лет предпринимательского опыта. В области supply chain management — 5 лет.
Автор нескольких уникальных методик анализа и принятия решений в SCM, с публикациями в электронных и печатных изданиях.
Создатель первой инновационной системы управления запасов экспертного уровня, предназначенной для СМБ.
b1rdex
?