Монотонно возрастающий счетчик
От: ole! США http://files.rsdn.org/4543/rsdn.gif
Дата: 20.09.16 02:14
Оценка:
Для распределенного приложения нужен сервис, который бы возвращал монотонно возрастающие целочисленные значения. Желательно без значительных и регулярных пробелов между значениями.
Изначально был разработан локальный сервис на основе разделяемой памяти и mutex и sparsed int set.
Добавилось несколько требований — распределенные клиенты и high availability.
Рассматриваются варианты использования Redis, ZooKeeper и базы данных с пред-выделением блоков.
Что можно еще рассмотреть, чтобы велосипед не изобретать?
Основное требование — производительность. Ну и надежность, конечно.
my $.02
Отредактировано 20.09.2016 2:18 .... . Предыдущая версия .
Re: Монотонно возрастающий счетчик
От: pestis  
Дата: 20.09.16 03:59
Оценка:
Здравствуйте, ole!, Вы писали:

O>Рассматриваются варианты использования Redis, ZooKeeper и базы данных с пред-выделением блоков.


Redis то что доктор прописал
Re: Монотонно возрастающий счетчик
От: Sharov Россия  
Дата: 20.09.16 10:35
Оценка:
Здравствуйте, ole!, Вы писали:

O>Для распределенного приложения нужен сервис, который бы возвращал монотонно возрастающие целочисленные значения. Желательно без значительных и регулярных пробелов между значениями.

O>Изначально был разработан локальный сервис на основе разделяемой памяти и mutex и sparsed int set.
O>Добавилось несколько требований — распределенные клиенты и high availability.
O>Рассматриваются варианты использования Redis, ZooKeeper и базы данных с пред-выделением блоков.
O>Что можно еще рассмотреть, чтобы велосипед не изобретать?
O>Основное требование — производительность. Ну и надежность, конечно.

А почему бы не написать простенький сервис, который бы атомарно инкрементировал счетчик и возвращал?
Кодом людям нужно помогать!
Re: Монотонно возрастающий счетчик
От: · Великобритания  
Дата: 20.09.16 11:01
Оценка:
Здравствуйте, ole!, Вы писали:

O>Для распределенного приложения нужен сервис, который бы возвращал монотонно возрастающие целочисленные значения.

А может текущее время с NTP/PTP подойдёт? Ну можно ещё для уникальности nodeId добавить. Или уникальность не нужна?

O>Желательно без значительных и регулярных пробелов между значениями.

Для распределённой системы в случаях обырва связи непонятно как такого добиться.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 20.09.2016 11:02 · . Предыдущая версия .
Re[2]: Монотонно возрастающий счетчик
От: · Великобритания  
Дата: 20.09.16 11:03
Оценка:
Здравствуйте, Sharov, Вы писали:

S>А почему бы не написать простенький сервис, который бы атомарно инкрементировал счетчик и возвращал?

И куда его именно поставить в случае распределённой системы, в которой бывают проблемы со связью?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Монотонно возрастающий счетчик
От: Sharov Россия  
Дата: 20.09.16 12:27
Оценка:
Здравствуйте, ·, Вы писали:

·>Здравствуйте, Sharov, Вы писали:


S>>А почему бы не написать простенький сервис, который бы атомарно инкрементировал счетчик и возвращал?

·>И куда его именно поставить в случае распределённой системы, в которой бывают проблемы со связью?

В центр. А если серьезно, то завести таких несколько и выделить им непересекающийся диапазон значений.
Кодом людям нужно помогать!
Re[4]: Монотонно возрастающий счетчик
От: Sinix  
Дата: 20.09.16 12:29
Оценка: +2
Здравствуйте, Sharov, Вы писали:

S>В центр. А если серьезно, то завести таких несколько и выделить им непересекающийся диапазон значений.

ТЗ не читай@проблему решай

Желательно без значительных и регулярных пробелов между значениями.

увы.
Re[4]: Монотонно возрастающий счетчик
От: · Великобритания  
Дата: 20.09.16 13:18
Оценка: 6 (1)
Здравствуйте, Sharov, Вы писали:

S>>>А почему бы не написать простенький сервис, который бы атомарно инкрементировал счетчик и возвращал?

S>·>И куда его именно поставить в случае распределённой системы, в которой бывают проблемы со связью?
S>В центр. А если серьезно, то завести таких несколько и выделить им непересекающийся диапазон значений.
Чем дальше в лес, тем... Это будут уникальные номера, но вовсе не обязательно монотонно возрастающие. Подумай над таким сценарием: есть два "центра", одном центре номера иногда используются в N раз чаще, чем в первом. Как обеспечить возрастание между центрами?

Ещё идея: выдавать временные номера (или просто уникальные id), и посылать заявки выдать номер в "центр". Как центр ответит, присвоить постоянный номер. Но это бизнес-процесс должен позволять иметь временно непронумерованную сущность.

Короче. Товарищ ole!, пожалуйста опиши саму задачу, а не способы которыми ты её пытался решить. В такой постановке задача противоречит физическим законам.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Монотонно возрастающий счетчик
От: Sharov Россия  
Дата: 20.09.16 13:26
Оценка:
Здравствуйте, ·, Вы писали:

·>Чем дальше в лес, тем... Это будут уникальные номера, но вовсе не обязательно монотонно возрастающие. Подумай над таким сценарием: есть два "центра", одном центре номера иногда используются в N раз чаще, чем в первом. Как обеспечить возрастание между центрами?


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

·>Ещё идея: выдавать временные номера (или просто уникальные id), и посылать заявки выдать номер в "центр". Как центр ответит, присвоить постоянный номер. Но это бизнес-процесс должен позволять иметь временно непронумерованную сущность.


Чем это отличается по сути отличается от сервиса, который атомарно инкрементирует?
Кодом людям нужно помогать!
Re[6]: Монотонно возрастающий счетчик
От: · Великобритания  
Дата: 20.09.16 13:37
Оценка:
Здравствуйте, Sharov, Вы писали:

S>·>Ещё идея: выдавать временные номера (или просто уникальные id), и посылать заявки выдать номер в "центр". Как центр ответит, присвоить постоянный номер. Но это бизнес-процесс должен позволять иметь временно непронумерованную сущность.


S>Чем это отличается по сути отличается от сервиса, который атомарно инкрементирует?

Тем что он это делает асинхронно. Он указал, что нужна
— производительность: временный id можно выдать локально и мгновенно, uuid generator например
— распределённость: "центр" вовсе не обязательно должен быть единственным, например можно сделать консенсус в кластере что 851ba2e6-5c4f-4ebd-aa06-7dd599e7dcd6 имеет номер 42, а 3edd2913-e421-4398-ac8d-7dd13fd809fc будет 43 и т.п. Тогда вообще получится идеальная последовательность с единичным инкрементом.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Монотонно возрастающий счетчик
От: Sinix  
Дата: 20.09.16 13:50
Оценка:
Здравствуйте, ole!, Вы писали:

O>Что можно еще рассмотреть, чтобы велосипед не изобретать?


Вариант от твиттера пойдёт?

Остальные извращения — тынц
Re: Монотонно возрастающий счетчик
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.10.16 08:24
Оценка:
Здравствуйте, ole!, Вы писали:

O>Для распределенного приложения нужен сервис, который бы возвращал монотонно возрастающие целочисленные значения.

Монотонность в распределённой среде — это как?
Обычно, под монотонностью мы понимаем что V[t1] > V[t2] для любого t2>t1.
Это подразумевает наличие глобального времени — т.е. все операции "взять значение" гарантированно упорядочены.
В распределённой системе глобального времени, в общем случае, нету. Под глобальным временем я имею в виду такое, что на множестве всех таймстампов есть отношение полного порядка.
На практике такое требование убъёт надёжность системы: нужно синхронизоваться на каждом такте.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.