Синхронный modx: как сделать настоящую синхронизацию и...

22
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться Воеводский Михаил Сергеевич

Upload: modx-

Post on 11-Apr-2017

235 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Синхронный MODX: как сделать настоящую синхронизацию и не

застрелиться

Воеводский Михаил Сергеевич

Page 2: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

С чего все началось?

Как автоматизировать?

Page 3: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Базовые требования к системе

• Централизация всех обрабатываемых данных• Возможность автономной

работы заведения при локальном отсутствии интернета• Обмен данными в

реальном времени

Page 4: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Почему ?

Основная причина мое хорошее знание этого

фреймворка и очень сжатые сроки до запуска первой

версиипроекта

Page 5: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Дополнительные аргументы в пользу MODX•Модульность•Механизм обновления

компонентов через транспортные пакеты, возможность создать собственный репозиторий•Наличие админки

Page 6: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

«Железная» структура

Физический локальный сервер (ЛС)

Центральный сервер (ЦС)

Page 7: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Синхронизатор: важное требование

Динамическая поддержка любых объектов

Page 8: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Синхронизатор: первый шаг. Товары и категории

err

err

err

msProduct

msCategory• Всего два типа объектов• Минимальная обработка

ошибок• Недостаточная

стабильность

Page 9: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Синхронизатор: развитие. Улучшенная обработка ошибок + заказы

msProduct

msCategory

TVTemplate

TVTemplate

modUserGroups

msOrdermsOrderProductmsOrderAddress

• Корректная обработка всех известных ошибок• Обработка

сопутствующих объектов• Значительно

расширенный список обрабатываемых объектов

Page 10: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Показатели на данный момент

•400 товаров

•3500 пользователей

•500 000 заказов

•1 000 000 товаров в заказах

•1 центральный

•14 локальных

База данных

Серверы

+ 20 типов обрабатываемых объектов, без учета сопутствующих

Page 11: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Принцип работы синхронизатора

Действие

Действие

ДействиеПлагин

Журнал синхронизации

+1 запись

• Отслеживание изменений

Page 12: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

• Обмен данными между серверами

1’

ЛСупаковать изменения

Отправка

ЦСраспаков

ка+

упаковка

Отправка

ЛСраспаков

ка

Page 13: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Правила синхронизацииСпециальные классы,название которых состоит из специального префикса и названия оригинальногокласса объекта

class chsrmodUser extends chsrRule { // class code here}

class chsrGuest extends chsrmodUser { // class code here}

class chsrmodResource extends chsrRule { // class code here}

class chsrmsProduct extends chsrmodResource { // class code here}

Page 14: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Главные методы

Упаковатьsync::pack()

• получает из БД запись журнала об измененном объекте • запускает pack() из

соответствующего Правила

Распаковатьsync::unpack()

• получает весь массив данных для распаковки• для каждого элемента

запускает unpack() соответствующего Правила

Page 15: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

class chsrmodUser extends chsrRule {

public function pack($journalEntry) { // function code here }

public function unpack($package = array()) { // function code here }}

class chSync {

public function pack($stock_id = 0, $piece = '') { // function code here }

public function unpack($package = array()) { // function code here }}

Page 16: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Уникальные ключи

ID ID

uID uID

Page 17: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Уникализация msOrder

msOrder

stock_idid local_i

d

msOrder

local_idstock_id

gOrder

Page 18: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Обработка ошибокПрогнозируемые Непредвиденные

• Заранее определяется критичность ошибки. Важно?• Нет: запись пропускается,

в журнале сохраняется статус ошибки. • Да: Если обработать и

исправить ошибку важно в ручном режиме, должно отправляться уведомление разработчику.

• Здесь все зависит от конкретной ситуации и времени обнаружения ошибки. В большинстве случаев все ограничиваетя остановкой синхронизации на некоторое время.

Page 19: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Обслуживание серверов

Выполнение сервисных команд

Page 20: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Обновление компонентов системы

Используется

штатный

механизм

обновления

пакетов,

обновления

происходят

в автоматическом

режиме

после получения

команды

с ЦС

Page 21: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Перспективы развития

• Устранение старого кода в правилах, переход на максимальное использование принципов ООП и процессоров MODX

• Администрирование серверов: oВыполнение сервисных

команд/задачoВыполнение небольших

кусков кодаoМониторинг состояния

Page 22: Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться

Заключение

Потенциал

безграничен!

Вывод