Архитектура сервера

Изначально сервер (для чата) был следующим:

  1. каждый клиент - отдельное подключение.
  2. подключение взаимодействует с каналами (то есть где идет вся переписка).

Далее я добавил сохранения информации из каналов в БД (история сообщений и прочее). Сейчас решил сервер разделить на front и backend (на 2 класса, а в перспективе как 2 сервера).

  1. front - по сути тоже подключение, но только читает сообщение из сокета и передает на обработку в backend.
  2. backend после обработки отправляет ответ front-у, тот клиенту.

Сейчас получается у каждого клиента свой класс front и backend. Я хочу сделать, чтобы backend классов было фиксированное кол-во. Но тут сталкиваюсь со вопросом:

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

Может есть источники где можно подчерпнуть подобную информацию?


Ответы (0 шт):