Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 19, 2013 16:29:02

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Правильная архитектура для программы отсылки уведомлений

Значит есть БД сайта, нужно логировать изменения в некоторых столбцах, это реализовано через триггер, который пишет в таблицу, тип уведомления(через что отсылать), текст уведомления, и адрес куда слать, телефонный номер\email и.т.п, программу которая будет вытаскивать из БД уведомления и будет их слать решил написать на python.
Вот и вопросы начали возникать.

Как я хочу это реализовать:
Абстрактный класс BaseReader от которого будет унаследован класс читающий данный с БД\или оттуда где будут хранится уведомления.

Абстрактный класс Notifer который в конструкторе будет принимать очередь Queue и его потомки должны будут реализовать отсылку уведомлений.

Ну и класс главного потока пусть Main который будет брать данные через заданный интервал времени через DataReader, ложить их в очередь, и ждать пока все уведомления будут отосланы.

Первый вопрос как потом удалять отосланные данные из БД, кто в этой системе должен заниматься?
И вообще как такое получше сделать?

Вот класс для чтения BaseReader.
По сути я сейчас думаю как бы грамотно реализовать все. Чтобы в дальнейшем новые системы уведомлений подключать.

class BaseReader(object):
	__metaclass__ = ABCMeta
	@abstractmethod
	def getItems(self, count):
		"""
		Наследники должны реализоовать этот метод который должен
		возвращать список обьектов Notify
		"""



Офлайн

#2 Дек. 19, 2013 17:25:01

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Правильная архитектура для программы отсылки уведомлений

Это асинхронная задача, если извещений немного, можно делать как вы написали.
Если много и нужен прицел на будущее, решать ее нужно через celery, например.



Офлайн

#3 Дек. 19, 2013 17:26:35

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Правильная архитектура для программы отсылки уведомлений

Если извещений мало, то можно еще проще: 1 класс берет данные из БД, формирует извещение и отправляет его, записывает в БД результат, берет след. запись и т.д.



Офлайн

#4 Дек. 19, 2013 18:14:52

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Правильная архитектура для программы отсылки уведомлений

Lexander
Это асинхронная задача, если извещений немного, можно делать как вы написали.Если много и нужен прицел на будущее, решать ее нужно через celery, например.
Ну на данный момент, хотелось бы реализовать как я написал. Опыта с библиотекой которую вы предложили я не имею, а если возрастет нагрузка то можно будет переписать, хотелось бы знать в каком классе должно быть удаления из БД уведомлений которые успешно отосланы?



Офлайн

#5 Дек. 19, 2013 22:41:06

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Правильная архитектура для программы отсылки уведомлений

Если хотите выделить классические роли, нужен 3 класс - DataWriter.
Еще нужна очередь выполненных заданий.
После обработки задания Notifer извещает о выполнении Main, который добавляет во 2 очередь задание записать DataWriter-у.
Main выполняет все функции диспетчеризации.
Для нынешней сложности приложения схема правильная с точки зрения архитектуры: Main-диспетчер, DataReader, DataWriter, Notifier.

Конечно, она избыточна, но зато красива.

2 вариант.
Учитывая то, что обе очереди могут быть глобальными объектами, то Main может просто запускать работу остальных классов, создавать очереди, но не заниматься непосредственно обслуживанием очередей.
DataReader читает из БД задания и сразу помещает их в очередь на отправку.
Notifier выполняет работу и помещает результат в очередь результатов.
DataWriter читает очередь результатов и записывает результат в базу.
Это тоже архитектурно правильный вариант.
Причем, это вариант с заделом на будущее, когда у Main может появиться другая работа и объем кода вырастет.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version