Serverist::Replication

Гем для синхронизации ядра и процессингов

Перед установкой

Для работы требуется

  • MRI 1.9, 2.0 - тестировалось на обоих, все работает
  • activerecord 4.0 - все что ниже работать точно не будет, если нужны более свежие версии - пишите, поправлю
  • postgresql - тестировалось на версии 9.1, но должен работать начиная с версии 8.4, сейчас используется только расширение hstore, но возможно в дальнейшем что то еще будет pg specific.
  • rabbitmq 3.x - тестировалось на 3.0, должно работать на версиях 3.0 и 3.1, для работы с rabbitmq используется гем evrone-common-amqp, который в свою очередь использует bunny

Установка

Добавить в Gemfile

gem 'serverist-replication'

После команды bundle нужно будет сгененить миграцию, после которой будет создан файл с миграцией

rails g serverist:replication:migration

И шаблон с конфигурацией и воркеров

# для клиента
rails g serverist:replication:client

# для сервера
rails g serverist:replication:server

После этого будет созданы файлы config/initializers/serverist_replication и config/amqp.yaml, желательно их отредактировать в соответствии с реалиями.

Подробнее про конфигурацию Serverist::Replication::Configuration

Для клиента будут созданы ворверы

bin/client_log_consumer
bin/batch_log_consumer

Для сервера

bin/server_command_consumer
bin/server_log_consumer

Воркеры нужно добавить в Procfile

Описание работы

Методом Serverist::Replication#initialize! подключается модуль Serverist::Replication::ActiveRecord::Common, который в зависимости от типа подключает

Модули ставят хуки на ActiveRecord::Base#after_save, которые при сохранении модели

Запускаются воркеры которые слушают соответствующие очереди в amqp, при получении сообщений с логами

Используемые очереди

  • client.log - пишутся логи для клиента с routing_key: "client."
  • server.log - пишутся логи для сервера
  • server.command - отправка команд для сервера
  • client.batch - пишутся batch логи для клиента с routing_key: "client."

Для передачи логов используется класс Serverist::Replication::Message

Для передачи команд используется класс Serverist::Replication::Command

Ключевые модели