Архитектура сервера
Изначально сервер (для чата) был следующим:
- каждый клиент - отдельное подключение.
- подключение взаимодействует с каналами (то есть где идет вся переписка).
Далее я добавил сохранения информации из каналов в БД (история сообщений и прочее). Сейчас решил сервер разделить на front и backend (на 2 класса, а в перспективе как 2 сервера).
- front - по сути тоже подключение, но только читает сообщение из сокета и передает на обработку в backend.
- backend после обработки отправляет ответ front-у, тот клиенту.
Сейчас получается у каждого клиента свой класс front и backend. Я хочу сделать, чтобы backend классов было фиксированное кол-во. Но тут сталкиваюсь со вопросом:
- если backend -ы между собой изолированны, то актуальная информация только в БД. Получается каждый запрос - это обращение к БД? как в таком случае кешировать? я имею ввиду кеш у каждого бекенда свой же? или можно сделать общий, несмотря что разные сервера? Тогда потребуется отдельный сервер?
- можно ли подобным способом ограничить кол-во frontend части? как распределять между ними нагрузку?
- как лучше выстроить обмен сообщениями между front и backend частями? пока это классы - все просто, а если сервера? сам сервер написан на С++ boost::asio.
Может есть источники где можно подчерпнуть подобную информацию?