Информация об изменениях

Сообщение Re[2]: Опрос: Как назвать "Distributed Singleton" от 24.06.2016 9:17

Изменено 24.06.2016 9:35 VladCore

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

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


VC>>Фича простая – на всех клОнах (инстансах) гарантируется что заданный код, точнее, поток или несколько потоков, выполняются только в одном экземспляре. Клон – ключевое слово. Т.е. и код и конфиги на всех инстансах одинаковые. Но заданный логический поток всегда выполняется только на одном инстансе. Таких задач полно в любом сервисе — рассылка смс и писем по условиям в заданное время, репликация в/из внешних систем и пр.


S>Непонятно что вы делаете (я полный нуп в WCF), но: distributed (распределенное) это антоним тому что вы делаете (блокируете всех пока поток занят?),


Расскажу не жалко.

Внутрях есть две нотификации инстансов на redis-сервер о том что кандидаты не упали и не выключены и о том что singleton успешно без иксепшнов работу работает.

Еще есть выборы когда избранный ранее singleton упал. Выборы разумеется выполняются под DistributedLock-ом.

S>singleton — распространенное понятие, даже если вы используете паттерн синглетон, врядли использовать это слово хорошая идея.


Словарь с вами не согласен



S>Из того что я понял вы делаете некий manager (dispatcher?). Я бы смотрел синонимы к этому слову. Возможно вы используете какую-то технику, чтобы достичь желаемого, в этом случае назовите библиотеку "Какая-то_техника Thread (Task? Logical Thread? Clone Job?) Dispatcher".


Слово менеджер для публичного апи мне не нравится, но лучшего я не придумал.
Вы почти всё угадали по описанию. Вот так выглядит синглтон в прикладном коде:

class Worker
{
    readonly ManualResetEvent ProcessShutdown = GetProcessShutdown();

    public void ThreadStart()
    {
        var manager = new DistributedSingletonManager(......);

        while (!ProcessShutdown.WaitOne(1000) && manager.Am_I_TheOne(timeout: 1000))
        {
            PerformSomething();
        }
    }
}


ThreadStart запускается на всех инстансах, а вот PerformSomething() в цикле вертится всегда только на одном. Если надо "запускаются" выборы нового инстанса в качестве того сингтона который будет один единственный делать работу PerformSomething()

Вот теперь название придумываю.

Внутри есть DistributedLock, это не я придумал.

Вот и взял DistributedSingleton исключительно по аналогии с DistributedLock
Re[2]: Опрос: Как назвать "Distributed Singleton"
Здравствуйте, Sinatr, Вы писали:

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


VC>>Фича простая – на всех клОнах (инстансах) гарантируется что заданный код, точнее, поток или несколько потоков, выполняются только в одном экземспляре. Клон – ключевое слово. Т.е. и код и конфиги на всех инстансах одинаковые. Но заданный логический поток всегда выполняется только на одном инстансе. Таких задач полно в любом сервисе — рассылка смс и писем по условиям в заданное время, репликация в/из внешних систем и пр.


S>Непонятно что вы делаете (я полный нуп в WCF), но: distributed (распределенное) это антоним тому что вы делаете (блокируете всех пока поток занят?),


Расскажу не жалко.

Внутрях есть две нотификации инстансов на redis-сервер о том что кандидаты не упали и не выключены и о том что singleton успешно без иксепшнов работу работает.

Еще есть выборы когда избранный ранее singleton упал. Выборы разумеется выполняются под DistributedLock-ом.

S>singleton — распространенное понятие, даже если вы используете паттерн синглетон, врядли использовать это слово хорошая идея.


Словарь с вами не согласен



S>Из того что я понял вы делаете некий manager (dispatcher?). Я бы смотрел синонимы к этому слову. Возможно вы используете какую-то технику, чтобы достичь желаемого, в этом случае назовите библиотеку "Какая-то_техника Thread (Task? Logical Thread? Clone Job?) Dispatcher".


Слово менеджер для публичного апи мне не нравится, но лучшего я не придумал.
Вы почти всё угадали по описанию. Вот так выглядит синглтон в прикладном коде:

class Worker
{
    readonly ManualResetEvent ProcessShutdown = GetProcessShutdown();

    public void ThreadStart()
    {
        var manager = new DistributedSingletonManager(......);

        while (!ProcessShutdown.WaitOne(1000) && manager.Am_I_TheOne(timeout: 1000))
        {
            PerformSomething();
        }
    }
}


ThreadStart запускается на всех инстансах, а вот PerformSomething() в цикле вертится всегда только на одном. Если надо "запускаются" выборы нового инстанса в качестве того, который будет один единственный делать работу PerformSomething()

Вот теперь название придумываю.

Внутри есть DistributedLock, это не я придумал. Вот и взял DistributedSingleton исключительно по аналогии с DistributedLock