Главная» Новости» Додо новости. Dodo IS Platform digitalizes every micro process in our QSR businesses from Dodo Brands: Dodo Pizza, Drinkit, and Doner 42. It covers all parts of the restaurant business — from shift scheduling and order tracking to real-time sales analytics.
Как зерокодинг помогает «Додо Пицце» быстро тестировать гипотезы: новая база знаний для сотрудников
Помимо традиционно хорошей работы в онлайне например, регулярная серьёзная работа в соцсетях , за последние месяцы была проведена первая федеральная рекламная компания с показом рекламного ролика в т. Централизованный контроль качества Управляющая компания «Додо Пиццы» очень пристально следит за уровнем качества сервиса во всех пиццериях сети. Это, во-первых, даёт уверенность в том, что «Додо Пицца» в соседнем районе или городе не испортит впечатление о бренде, если ваш клиент окажется там. А во-вторых, не даст расслабиться ни тебе, ни твоей команде. Рейтинг пиццерий онлайн.
Сайт, мобильные приложения и контакт-центр Сайт , мобильные приложения для iOS и Android , единый круглосуточный контакт центр 8-800-333-00-60 — неоднократно признавались лучшими в отрасли общественного питания. Естественно, ни одна локальная пиццерия не может себе позволить сервис такого уровня. Обучение сотрудников На все позиции в пиццерии выработана единая схема обучения: стажировка в пиццерии, онлайн-курсы и очное обучение в Сыктывкаре.
Франчайзинг Собственная информационная система будет увеличивать эффективность розничных операций.
В будущем наши франчайзи будут получать от не только торговую марку, меню и стандарты, но и информационную систему, созданную под наши уникальные бизнес-процессы. Это придаст нашей франчайзинговой модели дополнительную ценность. Фактически мы будем лицензировать нашу информационную систему вместе с бизнес-системой. Единая информационная система позволит также контролировать работу франчайзи, в частности — качество проводимых операций, что позволит поддерживать единые стандарты по всей сети.
Почему мы разрабатываем информационную систему в виде веб-приложения? Наша система изначально задумывалась как SaaS-решение software as a service. Информационная система в данной модели представляет из себя веб-приложение. Пользователи системы работают с программой через Интернет, используя обычный веб-браузер.
Простота использования и поддержки SaaS — технология будущего. Доступность и высокая скорость Интернета позволит работать с программным обеспечением, не устанавливая его на локальный компьютер. Сегодня для использования информационной системы Dodo IS нужно всего лишь зайти через стандартный веб-бразуер на наш сайт и ввести логин и пароль. Необходимость администрирования, настройки и технической поддержки локального сети и программного обеспечения отпадает.
Эффективное решение для большой розничной сети SaaS-модель идеально подходит для розничной сети. Преимущества: быстрое развертывание системы, единая техническая поддержка, единое место хранения данных, более высокая безопасность, единая база клиентов, адресов, телефонов. Все процессы в информационной системе совершаются в онлайне. Это дает возможность мгновенно получать данные о работе всех точек и принимать оперативные решения.
Система может быть очень просто развернута в любом месте, где есть Интернет. Это дает новые возможности эффективной организации бизнеса. Например, операторы, принимающие заказы, и кухня, где эти заказы делают могут находится территориально в разных местах. Например, в одном городе, где работает несколько пиццерий, может быть создан единый колл-центр для приема заказов.
Заказы принимаются в Интернете и сразу же попадают на кухню определенной пиццерии. Систему можно использовать на любом мобильном устройстве с веб-браузером и выходом в Интернет. Это дает новые возможности в использовании различных мобильных устройств. Например, прием заказов, управления заказами на кухне или проведения ревизий с помощью планшетных компьютеров, подключенный по беспроводной сети к Интернету.
Интеграция системы с клиентским сайтом и мобильными приложениям Dodo IS устроена как веб-приложение. Через Интернет к информационной системе напрямую могут обращаться как персонал компании, так и клиенты. Система будет интегрирована с клиентским сервисами в Интернете. Так, например, заказ, сделанный клиентом на Сайте или через мобильное приложение сразу же попадет на кухню.
Все начинается с отображения меню. Залогиненный пользователь-оператор в один момент времени принимает лишь один заказ. Поэтому draft-корзина может храниться в его сессии сеанс пользователя хранится в памяти. Там объект Cart, в котором продукты и информация о клиенте. По продукту вытаскивается информация из базы и добавляется информация о продукте в корзину.
Да, здесь можно не вытаскивать продукт из базы, а передавать с фронтенда. Но для наглядности я показал именно путь из базы. Далее вводим адрес и имя клиента. При нажатии «Создать заказ»: Запрос отправляем в OrderController. Получаем Cart из сессии, там лежат продукты в нужном нам количестве.
Дополняем Cart информацией о клиенте и передаем в метод AddOrder класса ReceivingOrderService, где он сохраняется в базу. В базе есть таблицы с заказом, составом заказа, клиентом и они все связаны. Интерфейс отображения заказа идет и вытаскивает последние заказы и отражает их. Новые модули Прием заказа был важен и необходим. Нельзя сделать бизнес по продаже пиццы, если нет приема заказа для продажи.
Поэтому система начала обрастать функционалом — примерно с 2012 по 2015 года. За это время появилось много различных блоков системы, которые я буду называть модулями, в противовес понятию сервиса или продукта. Модуль — это набор функций, которые объединены какой-то общей бизнес-целью. При этом физически они находятся в одном приложении. Модули можно назвать блоками системы.
Например, это модуль отчетов, интерфейсы админки, трекер продуктов на кухне , авторизация. Это всё разные интерфейсы для пользователя, некоторые имеют даже различные визуальные стили. При этом все в рамках одного приложения, одного работающего процесса. Технически модули оформлялись как Area вот такая идея даже осталась в asp. Там были отдельные файлы для фронтенда, моделей, а также свои классы контроллеров.
В итоге система преобразовалась из такой... Это: Site — первая версия сайта dodopizza. Export: выгрузка отчетов из Dodo IS для 1C. Personal — личный кабинет сотрудника. Отдельно разрабатывался и имеет свою точку входа и отдельный дизайн.
Позже мы ушли от него, переведя всю статику на CDN Akamai. Остальные же блоки находились в приложении BackOffice. Пояснение по названиям: Cashier — Касса ресторана. ShiftManager — интерфейсы для роли «Менеджер смены»: оперативная статистика по продажам пиццерии, возможность поставить в стоп-лист продукты, изменить заказ. OfficeManager — интерфейсы для роли «Управляющий пиццерии» и «Франчайзи».
Здесь собраны функции по настройке пиццерии, её бонусных акций, прием и работа с сотрудниками, отчеты. PublicScreens — интерфейсы для телевизоров и планшетов, висящих в пиццериях. На телевизорах отображается меню, рекламная информация, статус заказа при выдаче. Они использовали общий слой сервисов, общий блок доменных классов Dodo. Core, а также общую базу.
Иногда еще могли вести по переходам друг к другу. В том числе к общим сервисам ходили и отдельные сайты, вроде dodopizza. При появлении новых модулей старались по максимуму переиспользовать уже созданный код сервисов, хранимых процедур и таблиц в базе. Для лучшего понимания масштаба модулей, сделанных в системе, вот схема из 2012 года с планами развития: К 2015 году всё на схеме и даже больше было в продакшн. Прием заказа перерос в отдельный блок Контакт Центра, где заказ принимается оператором.
Появились общедоступные экраны с меню и информацией, висящие в пиццериях. На кухне есть модуль, который автоматически воспроизводит голосовое сообщение «Новая пицца» при поступлении нового заказа, а также печатает накладную для курьера. Это сильно упрощает процессы на кухне, позволяет не отвлекаться на большое количество простых операций сотрудникам. Блок доставки стал отдельной Кассой Доставки, где заказ выдавался курьеру, который предварительно встал на смену. Учитывалось его рабочее время для начисления зарплаты.
Параллельно с 2012 по 2015 появилось более 10 разработчиков, открылось 35 пиццерий, развернули систему на Румынию и подготовили к открытию точек в США.
Dodo is кабинет сотрудника Dodo is. Организационная структура пиццерии Додо. Организационная структура Додо пицца. БД пиццерии.
База знаний Додо. Додо пицца ИС. Додо дашборд. Додо ИС менеджер смены. Dodo график.
Dodo is дашборд. Додо ИС график смены. Dodo is. Додо личный кабинет сотрудника. Дизайн скорость доставка.
Скорость доставки dpi Group. Система Додо ИС. Сервис Додо. Личный кабинет Додо пицца для сотрудников. Додо диабло.
Форма Додо. Дашборд Додо пицца. CRM Додо пицца. Dodo is структура. Dodo дизайн website.
Сколько можно заработать в Додо. Dodo админка менеджера.
«Додо Пицца»: как сделать чат в приложении, которым довольны 9 из 10 пользователей
Пицца экспресс. Раскраска Додо пицца. Додо детям. Рисунки Додо пицца детские. Организационная структура управления Додо пицца. Организационная структура пиццерии схема. Схема принятия заказа.
Додо пицца личный кабинет. Додо номер телефона. Додо is личный кабинет. Додо личный кабинет Додо. Приложение для заказа пиццы. Как оформить заказ в Додо пицца через приложение.
Ассортимент пиццерии. Ассортимент пиццы в Додо пицца. Лозунг Додо пицца. Додо пицца сэндвичи. Додо пицца корпоративная культура. Кухня Додо.
Горячий цех Додо пицца. Пиццерия Додо кухня. Оборудование в Додо. Скрипты для пиццерии. Скрипт по доставке пиццы. Ребус Додо.
Игра хвостики Додо. Пирамида Додо. Ребусы от Додо. Буклет Додо. Брошюра Додо пицца. Додо набор.
Буклеты Додо пиццерии. Продающий скрипт пиццерии. Карьерная лестница Додо пицца. Скрипт доставки пиццы. Скрипты для курьеров. Экраны меню Додо пицца.
Монитор меню Додо. Додо пицца пепперони калорийность. Схемы рецептов для кухни пиццерии Додо. Мы открылись Додо пицца. Пакеты франшизы Додо пицца. Книга франчайзи Додо пицца.
Додо пицца промокод Солнечногорск. Додо бесконтактная доставка. Додо оплата наличными. Тестирование в Додо пицца. Додо ответы на тесты. Додо способы оплаты.
Не изменилась ли его роль, не надо ли его не пускать теперь на страницу. В этом случае после получения сессии 1 надо напрямую сходить в базу и проверить доступы пользователя с помощью слоя логики аутентификации 2. Далее либо на логин-страницу, либо переход в контроллер.
Такая вот простая система, но при этом не совсем стандартная. Если все процедуры пройдены, то пропускаем дальше в логике в контроллерах и методах. Данные пользователей отделены от всех других данных, они хранятся в отдельной таблице membership, функции из слоя логики AuthService вполне могут стать api-методами.
Границы домена определены вполне чётко: пользователи, их роли, данные о доступах, выдача и отзыв доступов. Всё выглядит так, что можно вынести в отдельный сервис. Так и сделали: У такого подхода есть ряд проблем.
Например, вызов метода внутри процесса — не то же самое, что вызов по http внешнего сервиса. Латенси, надёжность, поддерживаемость, прозрачность операции совершенно другие. Подробнее именно о таких проблемах рассказывал Андрей Моревский в своем докладе «50 оттенков микросервисов».
Сервис аутентификации и с ним сервис устройств используются для бэкофиса, то есть для сервисов и интерфейсов, используемых на производстве. Аутентификация для клиентских сервисов вроде сайта или мобильного приложения происходит отдельно без использования Auth. Отделение заняло около года, а сейчас мы опять занимаемся этой темой, переводя систему уже на новые сервисы аутентификации со стандартными протоколами.
Почему отделение длилось так долго? По пути было множество проблем, которые замедляли: Нам хотелось перевести данные о пользователях, устройствах и аутентификации из баз по стране в одну. Для этого пришлось переводить все таблицы и использование с идентификатора int на глобальный идентификатор UUId недавно перерабатывали этот код Роман Букин «Uuid — большая история маленькой структуры» и open-source проект Primitives.
Хранение данных по пользователям так как это персональная информация имеет свои ограничения и для некоторых стран надо хранить их отдельно. Но глобальный идентификатор пользователя должен быть. Много таблиц в базе имеет аудит информацию о том пользователе, который совершил операцию.
Это потребовало дополнительного механизма, чтобы была консистентность. После создания api-сервисов был долгий и постепенный период перевода на другую систему. Переключения должны были происходить бесшовно для пользователей и требовали ручной работы.
Схема регистрации устройства в пиццерии: Общая архитектура после выделения Auth и Devices-сервиса: Чем занимается Трекер Теперь про второй из нагруженных сервисов. Трекер выполняет двойственную роль: С одной стороны, его задача — показывать сотрудникам на кухне, какие заказы сейчас в работе, какие продукты сейчас нужно готовить. С другой стороны — оцифровывать все процессы на кухне.
Когда в заказе появляется новый продукт например, пицца , он попадает на станцию трекера «Раскатка». На этой станции стоит пиццамейкер, который берёт плюшку нужного размера и раскатывает её, после чего отмечает на планшете трекера, что выполнил свою задачу и передаёт раскатанную основу теста на следующую станцию — «Начинение». Там следующий пиццамейкер начинает пиццу, затем отмечает на планшете, что выполнил свою задачу и ставит пиццу в печь это тоже отдельная станция, которую нужно отметить на планшете.
Такая система была с самого начала в Додо и самого начала существования Dodo IS. Она позволяет полностью отслеживать и оцифровывать все операции. Кроме того трекер подсказывает, как готовить тот или иной продукт, проводит каждый вид продукта по своим схемам изготовления, хранит оптимальное время приготовления продукта и трекает все операции над продуктом.
Так выглядит экран планшета на станции трекера «Раскатка» Откуда нагрузки? В каждой из пиццерий примерно по пять планшетов с трекером. В 2016 году у нас было больше 100 пиццерий а сейчас более 600.
Каждый из планшетов делает раз в 10 секунд запрос на бэкэнд и выгребает данные из таблицы заказа связка с клиентом и адресом , состава заказа связка с продуктом и указание количества , таблицы учёта мотивации в ней трекается время нажатия.
Личный кабинет Додо ИС выручка. Меню Додо 2018. Аналоги Dodo is. База знаний Додо пицца. База знаний. Додо база знаний вход. Анкета Додо. Додо тайный покупатель. Анкета кандидата Додо.
Стандарты Додо пицца. Додо пицца 2018. Стандарты Додо. Приоритеты в Додо. Стандарты скорости Додо. Подсистема Додо. Дашборд Додо пицца. Структура Додо пицца. CRM Додо пицца. Dodo дизайн website.
Организационная структура Додо пицца. Организационная структура пиццерии Додо. База данных пиццерия. Пиццерия БД. Dodo is dashboard. Дашборд Додо пицца Розница. График производительности в Додо пицца.
Открытие обошлось в 13 млн рублей. В «Додо-пицце», например, действует программа привлечения инвесторов, которая работает со второй точки сначала предприниматель должен доказать свою состоятельность. Станислав привлекал средства на четыре из десяти открытых им пиццерий.
С какими проблемами столкнулся Полгода искали место. Открывали сайты с недвижимостью, обзванивали собственников. Когда такое помещение наконец нашлось, еще полгода ушло на ремонт и закупку оборудования.
Виртуальный ЦОД в Додо Пицца
Dodo IS это облачная система. Другими словами существует большая база данных, которая содержит всю необходимую информацию о бизнесе. Данные обновляются в реальном времени. В Базе знаний хранится вся история Додо! Мы выкладываем туда свежие новости компании, обсуждаем актуальные тренды, храним все стандарты, обучающие статьи и курсы. Главная» Новости» Додо новости. Сеть пиццерий «Додо пицца» застраховала от киберрисков свои информационные системы и ресурсы, в том числе, программное обеспечение, корпоративную электронную почту, Web-сайт, «облачный» сервис и базы данных.
Додо ис смены
А во-вторых, не даст расслабиться ни тебе, ни твоей команде. Рейтинг пиццерий онлайн. Сайт, мобильные приложения и контакт-центр Сайт , мобильные приложения для iOS и Android , единый круглосуточный контакт центр 8-800-333-00-60 — неоднократно признавались лучшими в отрасли общественного питания. Естественно, ни одна локальная пиццерия не может себе позволить сервис такого уровня. Обучение сотрудников На все позиции в пиццерии выработана единая схема обучения: стажировка в пиццерии, онлайн-курсы и очное обучение в Сыктывкаре. В курсе прописано всё: какие материалы должен изучить сотрудник, какие тесты сдать, как должна проходить аттестация. Самые открытые и классные франчайзи Внутри базы знаний для всех доступны контакты любого франчайзи «Додо Пиццы». За прошедшие месяцы мы успели пообщаться с несколькими франчайзи Санкт-Петербурга и области: и все они оказались чрезвычайно открытыми и приятными людьми.
Ещё для трекера в таблице заказа не обязательно хранить id напечатанного чека или связанные с заказом бонусные акции. Эта информация наш сервис трекера не интересует. В общей монолитной базе таблицы могли быть только компромиссным вариантом между всеми пользователями. Это было одной из изначальных проблем. Изначально архитектура была такая: Даже после выделения в отдельные процессы большая часть кодовой базы оставалась общей для разных сервисов. Всё, что ниже контроллеров, было единым и жило в одном репозитории. Использовались общие методы сервисов, репозиториев, общая база, в которой лежали общие таблицы. Разгружаем Трекер Главная проблема с трекером в том, что данные должны синхронизироваться между различными базами. Это же и главное его отличие от разделения Auth-сервиса, заказ и его статус могут изменяться и должны отображаться в различных сервисах. Мы принимаем заказ на Кассе Ресторана это сервис , он сохраняется в базе в статусе «Принят». После этого он должен попасть на трекер, где ещё несколько раз изменит свой статус: от «Кухня» до «Упакован». При этом с заказом могут происходить какие-то внешние воздействия от Кассы или интерфейса Менеджера смены. Приведу в таблице статусы заказа с их описанием: Схема изменения статусов заказа выглядит так: Статусы меняются между разными системами. И здесь трекер не является конечной системой, в которой замыкаются данные. Мы видели несколько возможных подходов для разделения в таком случае: Концентрируем все действия заказа в одном сервисе. В нашем случае этот вариант требует слишком большого сервиса по работе с заказом. Если бы мы остановились на нём, то получился бы второй монолит. Проблемы бы мы не решили. Одна система делает вызов в другую. Второй вариант уже интереснее. Но при нём возможны цепочки вызовов каскадные сбои , связность компонентов выше, управлять этим сложнее. Организуем события, и каждый сервис обменивается с другим через эти события. В итоге был выбран именно третий вариант, по которому все сервисы начинают обмениваться событиями друг с другом. То, что мы выбрали третий вариант значило, что для трекера будет своя база, а на каждое изменение заказа он будет посылать событие об этом, на которое подписываются другие сервисы и которое в том числе попадает в мастер-базу. Для этого нам нужен был некоторый сервис, который обеспечит доставку сообщений между сервисами. К тому времени у нас в стеке уже был RabbitMQ, отсюда и итоговое решение использовать его как брокер сообщений. На схеме показан переход заказа от Кассы Ресторана через Трекер, где он меняет свои статусы и отображение его на интерфейсе Заказы менеджера. Здесь это Касса Ресторана: На Кассе полностью готов заказ, и его пора отправить на трекер. Бросается событие, на которое подписан трекер. Трекер, принимая себе заказ, сохраняет его в свою собственную базу, делая при этом событие «ЗаказПринятТрекером» и посылая его в RMQ. В шине событий на заказ уже подписаны несколько обработчиков. Для нас важен тот, который делает синхронизацию с монолитной базой. Обработчик принимает событие, выбирает из него значимые для него данные: в нашем случае это статус заказа «ПринятТрекером» и обновляет свою сущность заказа в основной базе. Если кому-то нужен заказ именно из монолитной таблицы orders, то можно считать его и оттуда. Например, такое нужно интерфейсу Заказы в Менеджере Смены: Все другие сервисы тоже могут подписаться на события заказа из трекера, чтобы использовать их для себя. Если через некоторое время заказ берётся в работу, то его статус сначала изменяется в своей базе базе Трекера , а потом сразу генерируется событие «ЗаказВРаботе». Оно также попадает в RMQ, откуда синхронизируется в монолитной базе и доставляется другим сервисам.
Успешный рост сети её основатель Фёдор Овчинников связывает, в том числе, с наличием собственной информационной системы. О том, как она создавалась, какие задачи решает и к каким результатам приводит, Фёдор Овчинников и его команда рассказали в своей «Додо-книге», ключевые идеи которой мы сегодня предлагаем вашему вниманию. Досье Фёдор Овчинников, основатель сети «Додо Пицца». Окончил Сыктывкарский госуниверситет по специальности «археолог».
Мы поняли, что мы ни в одной из крайностей и не посередине, а где-то ближе к определенности. Например, мы выпускаем кассу доставки и знаем, что не откажемся от концепции доставки и не поменяем полностью бизнес-модель, и бэклог не перестроится. Следующий тезис, который тоже часто используют коучи: команда должна делать всё. У команды есть все компетенции, она умеет делать Customer Development, разрабатывает, тестирует, потом выкладывает в продакшн, осуществляет поддержку пользователей. Хорошо, если она при этом еще бизнес-метрики соберёт, на фидбэк отреагирует. Но у нас опять-таки не так. Наш продукт очень сложный. На некоторые гипотезы точно одного спринта не хватит, нужно месяцы работы, чтобы просто погрузиться в домен. Поэтому мы пришли к модели, когда команды у нас кросс-доменные, а продакт-менеджеры узкоспециализированные. И, как правило, это люди, которые сами в пиццерии работали или очень много времени проводят в нашей рознице для того, чтобы понимать эту экспертизу и формулировать глубокие и прорывные идеи и гипотезы. Следующий тезис — Collective code ownership, то есть код в продукте принадлежит всем командам, и они в нём ориентируются. Есть Feature Adoption Map, когда мы должны стремиться вот туда в правый верхний угол, где команды знают всё про продукт и умеют его полностью поддерживать. И наши команды начали на это настраиваться с самого начала. И поняли, что Collective code ownership — это хорошо и правильно, и надо туда идти, но это нужно делать постепенно. Если попытаться это сделать сразу, то вы попадёте в no ownership: все могут менять весь код, но никто им не владеет, никто не понимает как он должен развиваться, никто не следит за его чистотой. При этом у компонентов кода есть component owner, который будет думать, как ему развивать и рефакторить его. Другие команды могут помогать, вливать код в тот же компонент, перед этим пообщавшись с этим component owner. Ещё один тезис — выделенные команды для чего-либо. Мы такие команды обычно не создаём, потому что собираем всю экспертизу в одном месте. Вот пример из команды QA. Мы собрали тестировщиков, на берегу договорились, что команда будет существовать месяцев 6-7, основная задача — это автоматизировать ручное тестирование, чтобы можно было выкладываться в продакшн без ручного регресса. После этого мы их распределили по разным командам, и сейчас у нас нет выделенной команды QA. Второй пример, команда платформы или SRE. Она у нас выделенная, потому что чтобы погрузиться в нашу инфраструктуру, требуется много времени. Гемба этой команды — это другие команды разработки, соблюдение нефункциональных требований, помощь командам с инструментами, например логированием или мониторингом. До этого мы приводили примеры, когда облегчаем какие-то правила или отступаем от них, но есть один пример, когда мы, наоборот, усиливаем правило. В LeSS есть обязательные правила, которые образуют сам фреймворк, и есть рекомендации, которые можно делать по желанию.
*Как видеоаналитика и машинное зрение помогают оценивать качество пиццы
В ней можно добиться консистентности, причем за счет средств, встроенных в реляционные базы. Работать с ней привычно и удобно, особенно, если там мало таблиц и немного данных. Но за 4 года разработки в базе оказалось около 600 таблиц, 1500 хранимых процедур, во многих из которых была еще и логика. Увы, хранимые процедуры не приносят особого преимущества при работе с MySQL.
Они не кэшируются базой, а хранение в них логики усложняет разработку и отладку. Переиспользование кода тоже затруднено. На многих таблицах не было подходящих индексов, где-то, наоборот, было очень много индексов, что затрудняло вставку.
Надо было модифицировать около 20 таблиц — транзакция на создание заказа могла выполняться около 3-5 секунд. Данные в таблицах не всегда были в наиболее подходящей форме. Где-то нужно было сделать денормализацию.
Часть регулярно получаемых данных была в колонке в виде XML-структуры, это увеличивало время выполнения, удлиняло запросоы и усложняло разработку. К одним и тем же таблицам производились очень разнородные запросы. Особенно страдали популярные таблицы, вроде упоминавшейся таблицы orders или таблицы pizzeria.
Они использовались для вывода оперативных интерфейсов на кухне, аналитики. Еще к ним обращался сайт dodopizza. Данные не были агрегированными и много расчетов происходило на лету средствами базы.
Это создавало лишние вычисления и дополнительную нагрузку. Часто код ходил в базу тогда, когда мог этого не делать. Где-то не хватало bulk-операций, где-то надо было бы разнести один запрос на несколько через код, чтобы ускорить и повысить надежность.
Связность и запутанность в коде Модули, которые должны были отвечать за свой участок бизнеса, не делали этого честно. Некоторые из них имели дублирование по функциям для ролей. Например, локальному маркетологу, который отвечает за маркетинговую активность сети в своем городе, приходилось пользоваться как интерфейсом «Админа» для заведения акций , так и интерфейсом «Менеджера Офиса» для просмотра влияния акций на бизнес.
Конечно, внутри оба модуля использовали один сервис, который работал с с бонусными акциями. Сервисы классы в рамках одного монолитного большого проекта могли вызывать друг друга для обогащения своих данных. С самими классами-моделей, которые хранят данные, работа в коде велась различно.
Где-то были конструкторы, через которые можно было указать обязательные поля. Где-то это делалось через публичные свойства. Конечно, получение и преобразование данных из базы было разнообразным.
Логика была либо в контроллерах, либо в классах сервисов. Это вроде незначительные проблемы, но они сильно замедляли разработку и снижали качество, что приводило к нестабильности и ошибкам. Сложность большой разработки Трудности возникли и в самой разработке.
Нужно было делать разные блоки системы, причем параллельно. Вместить нужды каждого компонента в единый код становилось все труднее. Было не просто договориться и угодить всем компонентам одновременно.
К этому добавлялись ограничения в технологиях, особенно касаемо базы и фронтэнда. Нужно было отказываться от JQuery в сторону высокоуровневых фреймворков, особенно в части клиентских сервисов сайт. В каких-то частях системы могли бы использоваться базы, более подходящие для этого.
Например, позднее у нас был прецедент перехода с Redis на CosmosDB для хранения корзины заказа. Команды и разработчики, занимающиеся своей областью явно хотели большей самостоятельности для своих сервисов, как в части разработки, так и в части выкатки. Конфликты при мерже, проблемы при релизах.
Если для 5 разработчиков эта проблема несущественна, то при 10, а уж тем более при планируемом росте, все стало бы серьёзнее. А а впереди должна была быть разработка мобильного приложения она стартанула в 2017, а в 2018 было большое падение. Разные части системы требовали разных показателей стабильности, но в силу сильной связности системы, мы не могли этого обеспечить.
Ошибка при разработке новой функции в админке, вполне могла выстрелить в приеме заказа на сайте, ведь код общий и переиспользуемый, база и данные тоже едины. Вероятно, можно было бы и в рамках такой монолитно-модульной архитектуры не допускать этих ошибок и проблем: сделать разделение ответственности, проводить рефакторинг как кода, так и базы данных, чётко отделять слои друг от друга, следить за качеством каждый день. Но выбранные архитектурные решения и фокус на быстром расширении функционала системы привели к проблемам в вопросах стабильности.
Как блог Сила ума положил кассы в ресторанах Если рост сети пиццерий и нагрузки продолжался бы в том же темпе, то через некоторое время падения были бы уже такими, что система и не поднимется. Хорошо иллюстрирует проблемы, с которыми мы начали сталкиваться к 2015 году вот такая история. В блоге « Сила ума » был виджет, который показывал данные по выручке за год всей сети.
Виджет обращался к публичному API Dodo, которое предоставляет эти данные. Виджет показывался на каждой странице и делал запросы по таймеру каждые 20 секунд.
В ней либо есть информация о доступах, и тогда доступ в контроллер открыт 3,4 , либо нет. Если доступа нет, нужно пройти процедуру авторизации. Здесь для упрощения она показана как часть пути в том же атрибуте, хотя это переход на страницу логина. В случае позитивного сценария мы получим правильно заполненную сессию и перейдём в Backoffice Controller. Если данные есть, то нужно проверить их на актуальность в базе пользователя. Не изменилась ли его роль, не надо ли его не пускать теперь на страницу.
В этом случае после получения сессии 1 надо напрямую сходить в базу и проверить доступы пользователя с помощью слоя логики аутентификации 2. Далее либо на логин-страницу, либо переход в контроллер. Такая вот простая система, но при этом не совсем стандартная. Если все процедуры пройдены, то пропускаем дальше в логике в контроллерах и методах. Данные пользователей отделены от всех других данных, они хранятся в отдельной таблице membership, функции из слоя логики AuthService вполне могут стать api-методами. Границы домена определены вполне чётко: пользователи, их роли, данные о доступах, выдача и отзыв доступов. Всё выглядит так, что можно вынести в отдельный сервис. Так и сделали: У такого подхода есть ряд проблем.
Например, вызов метода внутри процесса — не то же самое, что вызов по http внешнего сервиса. Латенси, надёжность, поддерживаемость, прозрачность операции совершенно другие. Подробнее именно о таких проблемах рассказывал Андрей Моревский в своем докладе »50 оттенков микросервисов». Сервис аутентификации и с ним сервис устройств используются для бэкофиса, то есть для сервисов и интерфейсов, используемых на производстве. Аутентификация для клиентских сервисов вроде сайта или мобильного приложения происходит отдельно без использования Auth. Отделение заняло около года, а сейчас мы опять занимаемся этой темой, переводя систему уже на новые сервисы аутентификации со стандартными протоколами. Почему отделение длилось так долго? По пути было множество проблем, которые замедляли: Нам хотелось перевести данные о пользователях, устройствах и аутентификации из баз по стране в одну.
Для этого пришлось переводить все таблицы и использование с идентификатора int на глобальный идентификатор UUId недавно перерабатывали этот код Роман Букин «Uuid — большая история маленькой структуры» и open-source проект Primitives. Хранение данных по пользователям так как это персональная информация имеет свои ограничения и для некоторых стран надо хранить их отдельно. Но глобальный идентификатор пользователя должен быть. Много таблиц в базе имеет аудит информацию о том пользователе, который совершил операцию. Это потребовало дополнительного механизма, чтобы была консистентность. После создания api-сервисов был долгий и постепенный период перевода на другую систему. Переключения должны были происходить бесшовно для пользователей и требовали ручной работы. Схема регистрации устройства в пиццерии: Общая архитектура после выделения Auth и Devices-сервиса: Чем занимается Трекер Теперь про второй из нагруженных сервисов.
Трекер выполняет двойственную роль: С одной стороны, его задача — показывать сотрудникам на кухне, какие заказы сейчас в работе, какие продукты сейчас нужно готовить. С другой стороны — оцифровывать все процессы на кухне. Когда в заказе появляется новый продукт например, пицца , он попадает на станцию трекера «Раскатка». На этой станции стоит пиццамейкер, который берёт плюшку нужного размера и раскатывает её, после чего отмечает на планшете трекера, что выполнил свою задачу и передаёт раскатанную основу теста на следующую станцию — «Начинение». Там следующий пиццамейкер начинает пиццу, затем отмечает на планшете, что выполнил свою задачу и ставит пиццу в печь это тоже отдельная станция, которую нужно отметить на планшете. Такая система была с самого начала в Додо и самого начала существования Dodo IS.
Ошибка при разработке новой функции в админке, вполне могла выстрелить в приеме заказа на сайте, ведь код общий и переиспользуемый, база и данные тоже едины. Вероятно, можно было бы и в рамках такой монолитно-модульной архитектуры не допускать этих ошибок и проблем: сделать разделение ответственности, проводить рефакторинг как кода, так и базы данных, чётко отделять слои друг от друга, следить за качеством каждый день. Но выбранные архитектурные решения и фокус на быстром расширении функционала системы привели к проблемам в вопросах стабильности. Как блог Сила ума положил кассы в ресторанах Если рост сети пиццерий и нагрузки продолжался бы в том же темпе, то через некоторое время падения были бы уже такими, что система и не поднимется. Хорошо иллюстрирует проблемы, с которыми мы начали сталкиваться к 2015 году вот такая история. В блоге « Сила ума » был виджет, который показывал данные по выручке за год всей сети. Виджет обращался к публичному API Dodo, которое предоставляет эти данные. Виджет показывался на каждой странице и делал запросы по таймеру каждые 20 секунд. Запрос уходил в api. Запрос на статистику по выручке шел сразу в базу и начинал запрашивать данные по заказам, агрегировать данные прямо на лету и выдавать сумму. В эту же таблицу заказов ходили Кассы в ресторанах, выгружали список принятых за сегодня заказов, в неё же добавлялись новые заказы. Кассы делали свои запросы каждые 5 секунд или по обновлению страницы. Схема выглядела так: Однажды осенью, Федор Овчинников написал в свой блог длинную и популярную статью. На блог пришло очень много людей и стали внимательно всё читать. Пока каждый из пришедших человек читал статью, виджет с выручкой исправно работал и запрашивал API каждые 20 секунд. API вызывало хранимую процедуру на расчет суммы всех заказов с начала года по всем пиццериям сети. Агрегация шла по таблице orders, которая очень популярна. В неё же ходят все кассы всех открытых ресторанов на тот момент. Кассы перестали отвечать, заказы не принимались. Ещё они не принимались с сайта, не появлялись на трекере, менеджер смены не мог увидеть их в своем интерфейсе. Это не единственная история. К осени 2015 года каждую пятницу нагрузка на систему была критическая. Несколько раз мы выключали публичное API, а однажды, нам пришлось даже отключить сайт, потому что уже ничего не помогало. Был даже список сервисов с порядком отключения при серьезных нагрузках. С этого времени начинается наша борьба с нагрузками и за стабилизацию системы с осени 2015 до осени 2018. Именно тогда случилось « Великое падение ». Дальше тоже иногда происходили сбои, некоторые были весьма чувствительными, но общий период нестабильности сейчас можно считать пройденным. Бурный рост бизнеса Почему нельзя было «сделать сразу хорошо»? Достаточно посмотреть на следующие графики. Также в 2014-2015 было открытие в Румынии и готовилось открытие в США. Сеть росла очень быстро, открывались новые страны, появлялись новые форматы пиццерий, например, открылась пиццерия на фудкорте. Всё это требовало значительного внимания именно к расширению функций Dodo IS. Без всех этих функций, без трекинга на кухне, учета продуктов и потерь в системе, отображения выдачи заказа в зале фудкорта, вряд ли бы мы сейчас рассуждали о «правильной» архитектуре и «верном» подходе к разработке. Еще препятствиями для своевременного пересмотра архитектуры и вообще внимания к техническим проблемам, был кризис 2014 года. Такие вещи больно бьют по возможностям для роста команд, особенно для молодого бизнеса, каким была Додо Пицца. Быстрые решения, которые помогли Проблемы требовали решения. Условно, решения можно разделить на 2 группы: Быстрые, которые тушат пожар и дают небольшой запас прочности и выигрывают нам время на изменения. Системные и, поэтому, долгие. Реинжиниринг ряда модулей, разделение монолитной архитектуры на отдельные сервисы большинство из них вполне не микро, а скорее макросервисы и про это есть доклад Андрея Моревского. Сухой список быстрых изменений таков: Scale up мастер базы Конечно, первое, что делается для борьбы с нагрузками — увеличивается мощность сервера. Это делали для мастер базы и для веб серверов. Увы, это возможно лишь до некоторого предела, дальше становится слишком дорого. С 2014 года мы перешли в Azure, на эту тему мы тоже писали еще в то время в статье « Как Додо Пицца доставляет пиццу с помощью облака Microsoft Azure ». Но после череды увеличений сервера под базу уперлись по стоимости. Реплики базы на чтение Реплик для базы сделали две: ReadReplica для запросов на справочники. Применяется для чтения справочников, типа, города, улицы, пиццерии, продуктов slowly changed domain , и в тех интерфейсах, где допустима небольшая задержка. Этих реплик было 2, мы обеспечивали их доступность также, как и мастера. ReadReplica для запросов на отчеты. У этой базы доступность была ниже, но в неё ходили все отчеты. Пусть у них тяжелые запросы на огромные пересчеты данных, но зато они не влияют на основную базу и операционные интерфейсы. Кэши в коде Кэшей в коде нигде не было вообще.
Еще удобной опцией были последние обсуждавшиеся вопросы, и топ-10 вопросов дня. Но это — уже на странице самой системы. За который в Додо отвечает небольшая команда. Например, за стандарты — отдельный сотрудник. Есть редактор, к которому можно обратиться вообще по любому поводу. И до недавнего времени был один универсальный Арсений, выступавший в роли и аналитика, и разработчика, и продакта. К счастью эта команда была недавно усилена, — новые горизонты и задачи потребовали новых людей! И если стандарты — вещь относительно стабильная — то многие статьи базы знаний нужно корректировать чуть ли не раз в квартал. По мне — это всегда большая нагрузка и ответственность, и заниматься такой работой могут только увлеченные люди! Хотя, возможно, я немного и кривлю душой, ведь статьи разрешено писать всем. Правда, занимаются этим все-таки избранные сотрудники. Очень понравилась система тэгирования — особенно когда мы искали статьи о том, как использовать электросамокаты для доставки пиццы. А полезно то, что делается или нет, — все узнают достаточно быстро, так как обратную связь регулярно дают управляющие пиццериями. Как оказалось, большинство из них — это бывшие пиццамейкеры, которые отлично разбираются в деталях производственного процесса. К слову, для меня это было вторым сюрпризом: что в этой отрасли простой работник «кухни» может относительно быстро вырасти до управляющего пиццерией. Который и после повышения продолжает работать плечом к плечу со всеми. Не мои слова.
Додо ис база знаний - 84 фото
Основатель "Додо пиццы" выпустил бесплатное мобильное приложение для рестораторов. Что оно умеет? | Как Додо Пицца прошла путь от Scrum до LeSS Huge и осознанно отступала от правил этих фреймворков и Agile-методологии. |
Dodo Pizza · GitHub | Александр Андронов — CEO Dodo EngineeringDodo Engineering — часть Dodo Brands, развивает собственную цифровую платформу Додо ИС для управления ресторанным. |
Пожалуй, лучшая база знаний для лучшей сети пиццерий! | Управление знаниями | Дзен | Dodo Pizza часто называет себя ИТ-компанией. Дмитрий Павлов, директор по продукту Dodo IS, рассказывает подробности об устройстве системы и делится несколькими кейсами, когда все пошло не так. |
RS. Информационная система Dodo IS: silauma — LiveJournal | Информационная система Додо. |
Франшиза «Додо пицца»
*Как видеоаналитика и машинное зрение помогают оценивать качество пиццы | На рассмотрении Разбивка по NPS базы клиентов по пиццериям для более детальной работы по клиентской базе. |
Dodo IS: как технологии делают людям вкусно | База знаний Додо создавалась 6 лет назад как блог на WordPress, — вполне объяснимый выбор для быстрого старта. |
Додо ис база знаний - фото сборник | «Додо ИС» была призвана сделать работу в пиццерии легче. |
Автоматизация контактного центра «Додо Пиццы» | последние новости на сегодня - РБК Инвестиции. Основатель «Додо Пицца» Федор Овчинников рассказал в Facebook об антикризисной стратегии, которую компания вынуждения принять в сложившихся условиях. |
*Как видеоаналитика и машинное зрение помогают оценивать качество пиццы | У Додо есть собственные программные разработки Додо ИС. |
Статистика пиццерий Додо Пицца
Бизнесмен считает «Додо Пиццу» IT-компанией — ее ядром является облачная ERP-система «Додо ИС», которая координирует в пиццерии все процессы — и в борьбе за место под солнцем ориентируется не только на гиганта Domino’s Pizza, но и на корпорацию Amazon. Компания Dodo Brands, которая развивает три бренда («Додо Пицца», «Дринкит» и «Донер 42») планирует провести первичное публичное размещение акций в начале 2024 года. About Dodo Our IT Transparency Franchising Goals 2019 All key posts. Мы выкладываем туда свежие новости компании, обсуждаем актуальные тренды, храним все стандарты, обучающие статьи и курсы. База знаний Додо ИС.
Яндекс Образование
База знаний Додо. В Базе хранится вся наша история! Мы выкладываем туда свежие новости компании, обсуждаем актуальные тренды, храним все стандарты, обучающие статьи и курсы. Dodo News Hub. Dodo News Hub. Redeem your points for a range of products and services, available on dodo store. База знаний ИИ Презентация. История о том, как мы автоматизировали контакт-центр «Додо Пиццы».