как хранить сообщения, полученные с веб-сайтов

#database #apache-kafka #websocket #rabbitmq

Вопрос:

мы создаем приложение с системой чата в рамках нашего сервиса, для этого мы используем веб-сайты, так как он легко доступен на всех платформах(ios,android,web).

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

Мы поняли, что веб-сайты чрезвычайно быстры, поэтому, если запустить запрос, для каждого сообщения, которое мы получили через веб-сайты, может быть

некоторые шансы, что некоторые сообщения не будут сохранены/или могут быть потеряны.

позвольте мне объяснить это:

Случай1

поэтому в чате один на один, когда мы получаем сообщение, мы сохраняем его в переменной с именем $msg и просто передаем его $msg предполагаемому пользователю. Так, если добавить больше логики, как, прежде чем отправить сообщение пользователю, то мог бы запустить запрос, чтобы сохранить сообщение, потребуется определенное время, допустим 2 сек или 1 сек, с такой логикой, некоторые сообщения, полученные через сокеты будут потеряны, поэтому мы должны доставить сообщение, как только мы получили.

Случай 2

может быть и другая логика; если мы запустим запрос после отправки сообщения предполагаемому пользователю, за это время может возникнуть вероятность $msg того, что переменная изменила свое значение так много раз, всего за долю секунды.

давайте рассмотрим пример.

предположим, что переменная $msg имеет «привет» и мы передаем эту $msg переменную в функцию, которая сохраняет сообщение в базе данных, но, как мы знаем, WebSockets являются чрезвычайно быстро, там может быть шанс, значение, хранящееся в $МСГ был изменен много раз, и мы потеряли наше сообщение «Привет», которое мы хотим сохранить.

можем ли мы реализовать очередь сообщений(ОЧЕРЕДЬ СООБЩЕНИЙ DS) в этом случае, или нам следует использовать службы apache kafka, подобные rabbitmq ?

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

Комментарии:

1. Что именно вы подразумеваете под «высокой стоимостью»? Множество баз данных с открытым исходным кодом поддерживают высокую пропускную способность чтения/записи. «Стоимость» администратора сервера для любой базы данных/очереди сообщений или ее обучения также будет высокой, и вам следует взвесить это с оплатой размещенной службы

2. если вы отправляете функцию обратного вызова при каждом получении websocket, изменить $msg невозможно, так как он находится в другой области памяти. как это меняется?