Лучший вариант для кеширования информации, чтобы иметь быстрый http ответ - PullRequest
0 голосов
/ 25 августа 2018

Я разрабатываю веб-сервис, который прослушивает HTTP-запросы. Этот сервис должен реагировать очень быстро и обрабатывать максимально возможное количество одновременных запросов.

Эта служба имеет одну конечную точку с 2 параметрами запроса (param1 и param2), которые используются для проверки некоторой информации и последующей отправки ответа.

У меня есть некоторая предопределенная информация, которую я буду использовать для проверки параметров запроса. Например:

  • Я знаю, что param1 назначен на assign1 и имеет свойство prop1. Param1 также присваивается assign3, который имеет свойство prop3.

  • И это param2 присваивается assign2 и имеет свойство prop2.

С этой информацией, когда я получаю HTTP-запрос, мне нужно проверить, что param1 назначено с assign1 или assign2, в противном случае я должен вернуть пустой ответ.

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

Чтобы достичь этого, я знаю два существующих решения (возможно, есть и другие):

  • Используйте spring boot и задайте эту информацию в файле .yml, чтобы читать их через пружинный компонент с использованием заполнителей, таких как @Value(${param1}) и т. Д. Проблема в том, что мне потребуется перезагрузить приложение если я хочу увидеть изменения, внесенные в этот файл .yml, то технически я не могу изменить кэшированную информацию, пока сервер работает.

  • Используйте встроенную базу данных, такую ​​как H2, и получайте информацию для каждого запроса, используя выбор. Проблема в том, что мне нужно сделать выбор для каждого запроса (и если мне нужно будет выполнить какое-либо соединение, это увеличит время ответа). Но я могу изменить информацию, пока сервер работает.

Я хотел бы знать, какой вариант лучше всего "кэшировать" эту информацию и позволить службе работать очень быстро, поскольку каждый запрос блокируется.

Я также использую Spring Boot для создания этого сервиса, но если вы знаете какой-нибудь лучший веб-контейнер, я готов его попробовать.

1 Ответ

0 голосов
/ 25 августа 2018

Вы преждевременно оптимизируете.

С одной стороны: «Мне нужно обрабатывать запросы очень быстро» и «обрабатывать как можно больше запросов» являются своего рода неопределенными критериями эффективности.

Выможно выразить свои цели более четко, например:

  1. Мне нужен мой сервис для обработки 99% всех запросов каждый час с задержкой 50 мс или меньше.

  2. И мне нужно, чтобы мой сервис мог обрабатывать 1000 запросов в секунду (или любое другое нужное вам число)

Затем вы можете начать измерять производительность и оптимизировать по мере необходимости.

Конечно, кеширование результатов - отличная идея, и вы должны это сделать.Но если вы обеспокоены тем, что локальная база данных, работающая на том же сервере, приведет к значительным задержкам для вашей службы, вы можете обнаружить, что это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...