Ай здорова. На волне запретов я подумал, а почему бы не написать свою вариацию дискордика.Ну, поехали. Дано: неуемное желание заниматься хуйней и неопределенные компетенции в разработке. Собственно, чо я хочу получить в итоге - я хочу получить дискорд, но с возможностью использования локальных серверов (немного позднее)
В общем и целом ты придумал херню.
Вот приходит сообщение. Сначала ты его пишешь в рэбит. Он его пишет на диск(ты же будешь использовать персистентные очереди, правда же?). Потом консюмер очереди читает сообщение из очереди и отправляет ack. На этом месте рэббит пишет на диск ещё раз. То что сообщение удалено из очереди. Потом тебе надо записать сообщение в кх. Т.е. ты запишешь на диск ещё раз. Итого у тебя 3 записи на диск ради одного сообщения.
Дальше. Т.к. клик аналитическая бд, он плохо переваривает вставки по одной записи. Т.е. для нормальной производительности на запись тебе надо собирать сообщения в буфере в батчи и писать батчами. Но если копить сообщения в буфере, то клиенты читающие кх не будут видеть сообщения до тех пор пока они не записаны
1. Почему ты решил что кролик удаляет сообщения синхронно?
2. Весь флоу - асинхронный. Изза этого он скалируемый легче.
3. Eventual consistency для рида почитай что такое. Другой вопрос что для записи сообщений (write) вообще колоночные бд не подходят
Я все ещё не понял почему херня. VersioningCollaptionMergeTree и подписка на кролика вместо обычных инсертов и будет всё хорошо