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

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

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

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


person Onki    schedule 04.08.2019    source источник


Ответы (3)


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

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

Некоторые практические причины, по которым сторона веб-сервера может быть плохим выбором:

  • разработчикам не обязательно иметь локальную конфигурацию веб-сервера HTTP.
  • вы хотите написать модульный и интеграционный тест, чтобы проверить, применяются ли ограничения скорости, как указано. Создание конфигурации для автоматического тестирования в рамках вашего приложения Java намного проще, чем с файлом конфигурации, определенным на веб-сервере.
  • веб-серверы объясняют это с точки зрения HTTP-запроса-ответа, а не с точки зрения обслуживания. Ограничения скорости могут применяться в соответствии с IP-адресом, но не только, имя пользователя, роли пользователей, тип услуги могут влиять на ограничения. Не уверен, что вы можете легко получить все это с HTTP-сервера.
    Например, роли хранятся на стороне сервера или в базе данных.

Лучшим вариантом является настройка этих механизмов путем добавления конкретных и специализированных классов или файлов конфигурации, что упрощает их чтение, обслуживание и возможность тестирования.
Когда вы упоминаете Spring Boot в своих тегах, that и это должно вас заинтересовать.

person davidxxx    schedule 05.08.2019
comment
Я получил ваши баллы, но добавленные вами ответы не могут быть использованы мной. Стартовый проект Spring boot - это сторонняя библиотека. А другая статья направлена ​​в сторону весеннего облака. Прямо сейчас я изучаю варианты реализации базового ограничения скорости на основе API с использованием встроенных веб-серверов Spring. Не уверен, возможно ли это, но я вижу, что у весенней загрузки есть встроенный веб-сервер причала, а на пристани есть опция ограничения скорости. - person Onki; 05.08.2019
comment
С Джетти? Интересный ! Возможно, я ошибаюсь, но боюсь, что у вас есть некоторые ограничения, если вам нужно реализовать определенные правила, например, для клиентов / ролей и т. Д. О Spring-Cloud, несмотря на название, вы можете использовать его с Spring Boot, даже если ваше приложение не является облаком: spring.io/projects/spring-cloud - person davidxxx; 05.08.2019
comment
Spring Cloud предоставляет разработчикам инструменты для быстрого создания некоторых общих шаблонов в распределенных системах (например, управление конфигурацией, обнаружение сервисов, автоматические выключатели, интеллектуальная маршрутизация, микропрокси, шина управления, одноразовые токены, глобальные блокировки, выборы руководства, распределенные сеансы, состояние кластера). - person davidxxx; 05.08.2019
comment
Правильно ли использовать весеннее облако с пружинным ботинком только для ограничения скорости. Я новичок в весне. - person Onki; 06.08.2019
comment
Вы можете просто использовать библиотеку spring-cloud-gateway: spring.io/projects/spring-cloud- шлюз - person davidxxx; 06.08.2019
comment
кажется, весеннему облачному шлюзу нужен экземпляр Redis, чтобы использовать функцию ограничения скорости, которая опять-таки накладные расходы для простого приложения - person Onki; 06.08.2019
comment
Если вы хотите ограничить и рационализировать потребление клиентов, я бы не сказал, что ограничения для вашего приложения просты, в то время как ваше приложение может быть. Что касается Redis, я полагаю, что текущее потребление не должно храниться в состоянии приложения / сервера, поскольку оно должно быть без состояния, чтобы позволить им быть CNA, поэтому я полагаю, что использование Redis - отличный способ сделать это: быстрый, легкий и распределенный. Удачи и не стесняйтесь оставлять отзывы, что бы вы ни пробовали. - person davidxxx; 06.08.2019
comment
спасибо davidxxx, обязательно обновлю тему тем, что я изучаю. Прямо сейчас я пробую DOSFilter причала, который используется для ограничения скорости. На данный момент он не работает, поэтому потратьте время на его отладку. Это встроенный сервер с весенней загрузкой. Итак, давайте посмотрим, как это происходит - person Onki; 07.08.2019
comment
мы работаем над DOSFilter от пристани. он дает базовую функциональность по ограничению скорости. У него тоже есть определенные ограничения, так как он не работает до аутентификации. Поскольку это фильтр, он вызывается после цепочки фильтров spring secuirty и, следовательно, проходит уровень аутентификации, - person Onki; 18.08.2019

Я рекомендую ограничитель скорости Spring-Cloud-Gateway

person WonChul Heo    schedule 05.08.2019
comment
Не могли бы вы добавить немного дополнительных объяснений со своей стороны, я имею в виду, как ваша ссылка решит, какие функции должны идти? - person Rex5; 05.08.2019
comment
и это не отвечает на мой вопрос. Вопрос в том, зачем добавлять ограничение скорости в конце приложения, а не в том, что можно использовать для этого. - person Onki; 05.08.2019

вы можете отделить эту функциональность от своей бизнес-логики с помощью фильтров.

https://www.baeldung.com/spring-boot-add-filter

person Flip    schedule 04.08.2019