Reglas de puntos de acceso

Los puntos de acceso son datos a los que se accede con frecuencia. En muchos casos, queremos contar los datos Top K con la frecuencia de acceso más alta en ciertos datos de puntos de acceso y restringir su acceso. por ejemplo:

El ID de producto es un parámetro que cuenta los ID de producto comprados con más frecuencia dentro de un período de tiempo y lo restringe. El ID de usuario es un parámetro
que se utiliza para limitar los ID de usuario a los que se accede con frecuencia dentro de un período de tiempo.
La limitación actual de parámetros de puntos de acceso se puede considerar como un tipo especial de control de flujo, que tiene efecto solo para llamadas de recursos que contienen parámetros de puntos de acceso.

Sentinel utiliza la estrategia LRU para contar los parámetros de puntos de acceso a los que se ha accedido más recientemente y combina el algoritmo de depósito de fichas para realizar el control de flujo en el nivel de parámetro.

imagen

Actualmente, el adaptador que viene con Sentinel solo tiene parámetros de punto de acceso para el método Dubbo. Otros módulos de adaptador (como Web) no admiten reglas de punto de acceso de forma predeterminada. Puede especificar un nuevo nombre de recurso y pasar los parámetros deseados personalizando el método de incrustación.

Tenga en cuenta que el nombre del recurso del punto enterrado personalizado no debe ser el mismo que el nombre del recurso generado por el módulo de adaptación, de lo contrario, se repetirán las estadísticas.

La limitación de corriente del parámetro de punto de acceso tiene efecto a través de la anotación @SentinelResource.

imagen

reglas del sistema

imagenLas reglas de protección del sistema se controlan desde el tráfico de entrada a nivel de la aplicación, y los datos de la aplicación se monitorean desde las cuatro dimensiones de la carga general, RT, QPS de entrada y la cantidad de subprocesos de una sola máquina, para que el sistema pueda ejecutarse en el máximo rendimiento tanto como sea posible mientras se asegura la integridad general del sistema.

Las reglas de protección del sistema aplican la dimensión general, no la dimensión de recursos, y solo tienen efecto en el tráfico de entrada. El tráfico de ingreso se refiere al tráfico que ingresa a la aplicación (EntryType.IN), como las solicitudes recibidas por los servicios web o los servidores Dubbo, que son todos tráfico de ingreso.

Las reglas del sistema admiten los siguientes tipos de umbral:

  • Carga (solo válido para máquinas similares a Linux/Unix): la protección del sistema se activará cuando la carga1 del sistema exceda el umbral y la cantidad actual de subprocesos simultáneos en el sistema exceda la capacidad del sistema. La capacidad del sistema se calcula a partir de maxQps * minRt del sistema. El valor de referencia de configuración es generalmente núcleos de CPU * 2.5.
  • Uso de la CPU (versión 1.5.0+): cuando el uso de la CPU del sistema supera el umbral, se activará la protección del sistema (rango de valores 0.0-1.0).
  • RT: la protección del sistema se activa cuando el RT promedio de todo el tráfico de entrada en una sola máquina alcanza el umbral, en milisegundos.
  • Número de subprocesos: cuando el número de subprocesos simultáneos de todo el tráfico de entrada en una sola máquina alcanza el umbral, se activa la protección del sistema. QPS de ingreso: cuando el QPS de todo el tráfico de ingreso en una sola máquina alcanza el umbral, se activa la protección del sistema.

Reglas de autorización

La lista blanca y negra restringe si el recurso se pasa de acuerdo con la fuente de la solicitud del recurso (origen).Si la lista blanca está configurada, solo la fuente de la solicitud en la lista blanca puede pasar; si la lista negra está configurada, la solicitud fuente en la lista negra no pasará, y el resto de las solicitudes pasarán. .

La información de la persona que llama se pasa a través del parámetro de origen en el método ContextUtil.enter(resourceName, origin).

Las reglas de la lista blanca y negra (AuthorityRule) son muy simples, incluyen principalmente los siguientes elementos de configuración:

  • recurso: nombre del recurso, es decir, el objeto de la regla de limitación actual
  • limitApp: la lista negra/lista blanca correspondiente, separada por , para diferentes orígenes, como appA, appB
  • estrategia: modo de restricción, AUTHORITY_WHITE es el modo de lista blanca, AUTHORITY_BLACK es el modo de lista negra, el modo predeterminado es el modo de lista blanca.imagen

Para el origen entrante, puede reescribir el método de adquisición de origen reescribiendo la interfaz API, tanto los parámetros de solicitud como los encabezados de solicitud.

Código relevante:

Clase de implementación


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");

    }
}

clase de configuración

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;
    }
}

Finalmente, cada vez que envíe una solicitud, puede traer la clave correspondiente y el valor correspondiente al parámetro de solicitud o encabezado de solicitud ~