Правила точки доступа

Горячие точки — это данные, к которым часто обращаются. Во многих случаях мы хотим подсчитать данные Top K с наибольшей частотой доступа в определенных данных горячих точек и ограничить их доступ. Например:

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

Sentinel использует стратегию LRU для подсчета параметров точки доступа, к которым последний раз обращались, и сочетает алгоритм корзины маркеров для выполнения управления потоком на уровне параметров.

картина

В настоящее время адаптер, поставляемый с Sentinel, имеет только параметры точки доступа для метода Dubbo. Другие модули адаптера (например, Web) по умолчанию не поддерживают правила точки доступа. Вы можете указать новое имя ресурса и передать нужные параметры, настроив метод встраивания.

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

Текущее ограничение параметра горячей точки вступает в силу через аннотацию @SentinelResource.

картина

системные правила

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

Правила защиты системы применяют общее измерение, а не измерение ресурсов, и действуют только на входящий трафик. Входящий трафик относится к входящему в приложение трафику (EntryType.IN), например запросам, полученным веб-службами или серверами Dubbo, которые все являются входящим трафиком.

Системные правила поддерживают следующие типы порогов:

  • Нагрузка (действительно только для Linux/Unix-подобных машин): Защита системы сработает, когда загрузка системы1 превысит пороговое значение, а текущее количество одновременных потоков в системе превысит емкость системы. Емкость системы рассчитывается исходя из maxQps системы * minRt. Эталонное значение параметра обычно равно ядрам ЦП * 2,5.
  • Загрузка ЦП (версия 1.5.0+): Когда загрузка ЦП системы превышает пороговое значение, срабатывает защита системы (диапазон значений 0,0–1,0).
  • RT: Защита системы срабатывает, когда среднее значение RT всего входящего трафика на одном компьютере достигает порогового значения в миллисекундах.
  • Количество потоков: когда количество одновременных потоков всего входящего трафика на одном компьютере достигает порогового значения, срабатывает защита системы. Ingress QPS: Когда количество запросов в секунду всего входящего трафика на одном компьютере достигает порогового значения, срабатывает защита системы.

Правила авторизации

Черный и белый список ограничивает передачу ресурса в соответствии с источником запроса ресурса.Если настроен белый список, может передаваться только источник запроса из белого списка, если настроен черный список, источник запроса в черный список не пройдет, а остальные запросы пройдут.

Информация о вызывающем абоненте передается через параметр origin в методе ContextUtil.enter(resourceName, origin).

Правила черного и белого списков (AuthorityRule) очень просты и в основном включают в себя следующие элементы конфигурации:

  • ресурс: имя ресурса, то есть объект текущего ограничивающего правила
  • limitApp: соответствующий черный/белый список, разделенный , для разных источников, таких как appA, appB
  • стратегия: режим ограничения, AUTHORITY_WHITE — режим белого списка, AUTHORITY_BLACK — режим черного списка, по умолчанию — режим белого списка.картина

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

Соответствующий код:

Класс реализации


import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;

import javax.servlet.http.HttpServletRequest;

/**
 * @author issavior
 */

public class MyRequestOriginParser implements RequestOriginParser {

    @Override
    public String parseOrigin(HttpServletRequest httpServletRequest) {

        // 请求头的key,根据key值获取value值,此value值会赋予origin,完成流控规则校验
        return httpServletRequest.getParameter("service-name");

    }
}

класс конфигурации

import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;

/**
 * @author issavior
 */

@Configuration
public class SentinelConfig {

    @Bean
    public FilterRegistrationBean<Filter> webCallbackFilter() {

        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new CommonFilter());
        bean.addUrlPatterns("/*");
        bean.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false");
        bean.setName("sentinelFilter");
        bean.setOrder(1);

        WebCallbackManager.setRequestOriginParser(new MyRequestOriginParser());
        return bean;
    }
}

Наконец, каждый раз, когда вы отправляете запрос, вы можете внести соответствующий ключ и соответствующее значение в параметры запроса или заголовок запроса~