Suspender
От: devromik Россия https://github.com/devromik
Дата: 05.01.16 22:07
Оценка:
Коллеги, привет!

https://github.com/devromik/suspender

Небольшая библиотека на Java, позволяющая:

Использовали в паре проектов на работе.

Имеется зависимость от библиотеки slf4j-utils, которой в центральном Maven-репозитории нет. Найти её можно здесь: https://github.com/devromik/slf4j-utils
Библиотека малюсенькая, при желании можно выпилить, заменив на что-то своё.

pom.xml имеет несколько профилей, которые я обыкновенно использую в своих проектах.
Поэтому, прежде чем собирать, желательно заглянуть в этот файлик.

Более подробное описание библиотеки можно найти в заголовочном комментарии к интерфейсу Suspender.

P. S.: приветствуются вопросы, pull-request-ы, замечания, предложения
Java
Re: Suspender
От: raydac Эстония http://www.igormaznitsa.com
Дата: 05.01.16 22:16
Оценка:
было бы хорошо привести там readme.md с примером юзания, что бы наглядность была
https://github.com/raydac
Re: Suspender
От: Zenden Россия  
Дата: 06.01.16 03:25
Оценка:
Здравствуйте, devromik, Вы писали:

D>Коллеги, привет!


D>https://github.com/devromik/suspender


Расскажите, пожалуйста, о типичном юзкейсе использования такой библиотеке, а то для меня как-то такой паттерн вновинку.
Re[2]: Suspender
От: devromik Россия https://github.com/devromik
Дата: 06.01.16 10:01
Оценка:
Z>Расскажите, пожалуйста, о типичном юзкейсе использования такой библиотеке, а то для меня как-то такой паттерн вновинку.

Её действительно можно использовать крайне редко.
Первый признак — не хватает возможностей https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/DelayQueue.html

Вариант использования:

Предположим, в некоторую вымышленную систему поступает непрерывный поток заявок, которые нужно обрабатывать на внешних устройствах/сервисах. Каждая заявка обрабатывается на одном и только на одном устройстве. Устройство практически никогда не отказывает, но часто отвечает, что не может обработать заявку (например, исчерпано количество подключений, допускаемых лицензией). Поэтому можно отложить заявку на определённое время и попробовать её выполнить повторно по истечении этого времени (особенно, если об этом сказано в требованиях к системе ). Можно было бы хранить отложенные заявки во внешнем хранилище, но, с учётом указанных условий, это будет performance hit. Есть также ситуации, когда системе становится известно, что оборудование перешло из неработоспособного состояния в работоспособное. В этом случае, восстанавливаются все отложенные заявки, соответствующие этому оборудованию. Есть ситуации, когда становится известно, что перегруженное оборудование немного освободилось. В этом случае, восстанавливается только заявка с ближайшим временем восстановления.

В той же самой вымышленной системе могут быть и другие варианты использования. В этом случае, в целях повышения производительности, разделяем их, используя пути. Например, /equipment/<equipment_id>/request/<request_id>, /pizzeria/<pizzeria_id>/order/<order_id>.

Вариант использования с пиццерией можно было бы расписать подробнее, но лень Суть в том, что не хватает курьеров, а когда курьер освобождается, ему нужно взять некоторый заказ в обработку. Желательно, самый давний. И т. д. Предполагается, что все заказы распределены по операторам и операторам не нужно обмениваться заказами. Если такая необходимость возникнет, можно интегрировать Suspender с БД (не будем вдаваться в детали).
Re[2]: Suspender
От: devromik Россия https://github.com/devromik
Дата: 06.01.16 10:10
Оценка:
Здравствуйте, raydac, Вы писали:

R>было бы хорошо привести там readme.md с примером юзания, что бы наглядность была


Создал задачку у себя в треккере, чуть позже запилю
Re[3]: Suspender
От: Zenden Россия  
Дата: 06.01.16 12:08
Оценка:
Здравствуйте, devromik, Вы писали:

Z>>Расскажите, пожалуйста, о типичном юзкейсе использования такой библиотеке, а то для меня как-то такой паттерн вновинку.


D>Её действительно можно использовать крайне редко.

D>Первый признак — не хватает возможностей https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/DelayQueue.html

D>Вариант использования:


вы использовали элементы теории массового обслуживания?
Re[4]: Suspender
От: devromik Россия https://github.com/devromik
Дата: 06.01.16 12:39
Оценка:
Z>вы использовали элементы теории массового обслуживания?

Так чтобы явно, нет
Re[2]: Suspender
От: devromik Россия https://github.com/devromik
Дата: 15.01.16 14:07
Оценка:
Здравствуйте, raydac, Вы писали:

R>было бы хорошо привести там readme.md с примером юзания, что бы наглядность была


Добавил, но пока привёл только общую информацию об использовании,
и предложил посмотреть тесты, чтобы увидеть примеры использования (по примеру https://github.com/angryziber/patterns).
Re[3]: Suspender
От: Aquilaware  
Дата: 20.07.17 15:16
Оценка:
Здравствуйте, devromik, Вы писали:

D>Вариант использования:

D>Предположим, в некоторую вымышленную систему поступает непрерывный поток заявок

Спасибо за пример. Очень интересная задача. Если бы я был на вашем месте, то я бы заявки складывал в БД и уже потом разгребал их оттуда. Почему? Потому что БД — это транзакицонное и бесконечно масштабируемое по надежности хранилище, так что никакая заявка никогда не пропадет (когда стоит такая цель, то логический сервер БД работает как кластер из физических машин).

В вашем же компоненте если кукнется файловая система ext4 на пингвине ubuntu, то кто-то никогда не получит заказанную пиццу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.