[Проект] RPC message queue server

  1. Идеята на проекта е да имплементирам сървър, който да се държи като свързващ механизъм за комуникация между процеси/сървиси. Ще работи като publish-subscribe патърна и ще има бекъп функционалност, тоест най-вероятно съобщенията ще се запазват на диска, а не само "in memory".

    Признавам си, че го мисля в последният момент, но искам проекта ми да е свързан с дистрибутирани системи и това ми дойде на ума, разбира се както доста хора се досещат може би, проекта ми е вдъхновен от RabbitMQ, ZeroMQ, Kafkа и т.н. е далеч няма да стане толкова бърз като тях, но се надявах да бъде близък до тяхната функционалност.

    Поради всичко написано по-горе, очаквам да чуя вашето мнение и допълнения, който смятам, че ще има и с радост ще приема :)

  2. Харесва ми като идея. Мисля, че Go е идеален точно за такъв тип проекти. Ако може да опишеш в повече подробности каква част от API-то на тези неща смяташ да поддържаш. Със сигурност различни "топици" и схеми на раздаване на съобщенията, стратегии за повторно доставяне на съобщението, нали?

  3. Точно така, възнамерявам да има няколко вида дистрибутиране на съобщенията и стратегии за доставяне като за различни "топици" също ще помисля.

    В идните дни ще имам повече време за да опиша подробно проекта, Весела Коледа :)

  4. Смятам да има две части на проекта - клиент и сървър.

    Както сами се досещате клиента ще се свързва със сървъра, създава "топици" и чете от тях, като бонус е възможно да имплементирам някакъв вид мониторинг на сървъра през този клиент също. Този клиент ще бъде конзолен и ще ползва най-вероятно TCP за да се свързва със сървъра (отворен съм за предложения, защото не съм много сигурен, че това е най-удачният вариант).

    Евентуален пример:

    create topic -name -route -retention (* може би още параметри за които в момента не се сещам *) - създава топик
    query -topicName -msgCount (* може би още параметри за които в момента не се сещам *) - чете от топик
    send -route -distribution (* може би още параметри за които в момента не се сещам *) - изпраща съобщения по даден път и различна стратегия (fan out, direct)
    

    За сега сървърът ще предоставя всичката функционалност нужна на клиента плюс disaster recovery (не съм сигурен как ще стане най-добре, но предполагам ще запазвам всичко на диска), acknowledgement на съобщенията и не знам до колкото това затруднява проекта, но възможност няколко сървъра да работят като в клъстър.

    Признавам има доста неясноти, но това е защото и аз не съм много сигурен къде да спра за което се надявам на идната лекция да си поговорим и да уточним границите на проекта си защото според мен много лесно този проект може да стане прекалено сложен за времевият интервал предвид моите възможности :)

Трябва да сте влезли в системата, за да може да отговаряте на теми.