Compartir tecnología de plataforma SMS (continuará)

Prefacio

El año pasado, necesitaba escribir una plataforma de mensajes de texto. Después de completar el desarrollo, no la he organizado ni compartido. Aprovechando la temperatura restante, compartiré las ideas y procesos generales (no el código específico, solo los patrones de diseño, ideas de desarrollo, diagramas de flujo) Información), algunos patrones de diseño y algunos conocimientos de fusión se utilizarán en el medio. Espero poder brindarles algunas ideas o ganancias.
Permítanme hablarles de la situación antes y después del desarrollo de la plataforma SMS.

Estado antes del desarrollo:

  • Múltiples lugares en el proyecto necesitan enviar mensajes SMS y desarrollarlos por separado, lo que da como resultado N múltiples SDK idénticos y códigos redundantes en un proyecto;
  • Los costos de mantenimiento son demasiado altos. Si hay un cambio de proveedor de servicios de SMS, llevará mucho tiempo ajustar
  • La redacción de textos publicitarios de SMS no está estandarizada y no se puede controlar de manera efectiva. El SMS de Alibaba requiere la creación de plantillas y firmas primero, pero algunos proveedores de servicios de SMS no las necesitan (no por ejemplo). Puede controlar el texto del SMS usted mismo y enviarlo directamente a través de la interfaz. No hay forma de controlarlo bien.
  • Fácil de deslizar, la seguridad no se puede garantizar y es imposible crear un conjunto de soluciones anti-barrido dondequiera que desarrolle su propio SMS
  • El registro de SMS es demasiado desordenado y no hay garantía de que cada registro se registre y se registre en un formato determinado.

Estado después del desarrollo:

  • El más intuitivo, conveniente para cada programador que necesita un servicio de SMS para desarrollar, originalmente necesitaba una gran cantidad de código, ahora solo necesita un paso de registro + combinación de parámetros de envío + una línea de solicitud de inicio
  • Registro unificado, cada registro se puede registrar con precisión, se puede ver el iniciador de SMS, el tiempo de envío, la plantilla de envío, el envío de contenido, el resultado de la devolución de llamada de la plataforma SMS, etc.
  • Mantenimiento más conveniente, desde el mantenimiento multipunto original hasta el actual, siempre que la plataforma SMS mantenga un único mantenimiento, y pueda ser insensible a la persona que llama
  • La interfaz de back-end de la gestión de la configuración de SMS se puede utilizar para la gestión de proveedores de servicios SMS, gestión de firmas, gestión de temas (simple puede entenderse como una colección de plantillas de SMS y proveedores de SMS), configuración de disyuntores y control de tráfico;
  • Diferentes temas para diferentes proveedores de servicios SMS (muchos a muchos), configuración flexible
  • Centro de seguridad, entrada unificada, medidas de seguridad más convenientes (no es necesario, esta parte se puede lograr a través de la puerta de enlace)
  • El modo de proveedor de servicios múltiples coopera con la configuración del fusible.Cuando un proveedor de servicios de mensajes cortos cuelga, el proveedor de servicios cambiará para continuar enviando sin ningún impacto en el usuario.
  • Formato de solicitud unificado y formato de devolución

fase de diseño

concepto principal

tema

En el proyecto actual, el concepto de tema es una colección que contiene toda la información de una plantilla de mensaje corto:

  • La identificación del SMS (la identificación única que debe cumplimentar el demandante al dar de alta el SMS, y se enviará a través de la identificación al enviar el SMS)

  • Nombre del asunto (fácil de ver)

  • Tipo de asunto (conveniente para filtrar, como código de verificación, SMS de marketing, SMS de notificación, etc.)

  • Contenido del mensaje de texto (por ejemplo, [su código de verificación es {código} y su número de teléfono celular es {teléfono}]. Si hay variables, use un formato fijo para ajustarlas)

  • Variable de sustitución (dado que el contenido del mensaje de texto tiene una variable, debe completar este elemento [código | teléfono])

  • Proveedor de servicios de SMS (puede haber varios proveedores de servicios de SMS bajo un tema, y ​​el peso se puede configurar para que coincida con la proporción a pedido. O cuando un proveedor de servicios cuelga, puede cambiar a otro proveedor de servicios para enviar SMS a tiempo)

    • Nombre de la plantilla (el nombre de la plantilla de SMS bajo el proveedor de servicios para una fácil visualización)
    • Marca de proveedor de servicios (debe ser administrada por un proveedor de servicios separado, aquí solo es necesario asociar la información del proveedor de servicios)
    • Peso (el peso del proveedor de servicios para enviar SMS, cuanto mayor sea el peso, mayor será la probabilidad de envío prioritario)
    • Información de la extensión de la plataforma (aquí es más importante, debe configurar partes especiales de la plataforma, como la información de la plantilla de SMS interna de Ali, si necesita enviar SMS a través de Ali, debe configurar el ID de la plantilla de Ali aquí, por ejemplo {" TemplateCode ":" SMS_123456 "}, asociará la plantilla, encontrará el método de SMS de Ali a través del modo de estrategia, pasará la información de la plantilla de SMS y el valor de la variable enviado para enviar el SMS. Si hay otros lugares que deben configurarse, puede Configure aquí e impleméntelo en la interfaz para que cada proveedor de servicios envíe mensajes de texto)

Lo anterior es el contenido general y el significado del tema, que contiene una gran cantidad de contenido, incluyendo la gestión de servicios de SMS proveedor , la gestión de la firma proveedor de servicios SMS , tipo de tema de gestión, etc., que se presentará a continuación.

Otros centros de gestión

Aquí hay solo una breve introducción, no una introducción detallada a la interfaz, el diseño de cada persona es diferente y los lugares poco razonables se rocían ligeramente. Se aceptan diferentes sugerencias.

Gestión de proveedores de servicios SMS

Gestión de proveedores de servicios múltiples, gestiona la información de cada proveedor de servicios SMS, incluyendo

Identificador del proveedor de servicios (el tema asociará al proveedor de servicios a través de este identificador) Nombre del proveedor de servicios (fácil de ver)
parámetros extendidos (necesita configurar la información única de cada proveedor de servicios, como cuenta, contraseña, apiurl, etc. , la información requerida por la plataforma del proveedor de servicios)
Peso (literalmente, establezca un valor entre 1 y 100 para indicar el peso. Al enviar un mensaje de texto, la prioridad se enviará al peso más alto y el centro de despacho introducirá específicamente un método sencillo para calcular el peso)
ajuste del fusible

  • Tiempos de falla acumulativos (si el número acumulado de fallas de solicitud excede los tiempos de configuración actuales, se agregará un disyuntor)
  • Número de éxitos consecutivos (después de agregar el fusible, si el número de solicitudes consecutivas tuvo éxito en una solicitud indirecta excede el número de veces establecido actualmente, póngase en contacto con el fusible)
  • Cada vez que falla el fusible, el tiempo de aumento (solo ingrese el fusible y continúe solicitando falla después del fusible, el intervalo de tiempo de solicitud aumentado, se presentará más adelante)
  • El tiempo máximo de fusión de la falla de fusión (falla continua después de la fusión, aumenta continuamente el valor máximo del intervalo de tiempo de solicitud)

Gestión de tipos de temas

Principalmente para el cribado de temas, como códigos de verificación, notificaciones, SMS de marketing, etc. Estará asociado con el tema.

Gestión de firmas de proveedores de servicios SMS

La consideración principal es la posibilidad de múltiples firmas bajo un mismo proveedor de servicios. En el caso de muchos a muchos, se requiere la administración de firmas.
La firma del proveedor de servicios bajo el tema de la asociación principal. Puede utilizar su propio proveedor de servicios y su firma para cada tema.

Cuatro centros

Centro de Seguridad

Para evitar el deslizamiento, puede diseñar la parte del centro de seguridad. Cada solicitud debe ser verificada. Hay muchos métodos de verificación, como la lista blanca de IP, la verificación de cifrado, etc.
Por supuesto, la IP también se puede realizar a través de la puerta de enlace. De hecho, recomiendo las medidas de seguridad en la parte de la puerta de enlace. Esto está más en línea con el concepto de microservicios. Todo el procesamiento de entrada de solicitudes se realiza a través de la puerta de enlace.

Centro de tráfico

Cuando el volumen es grande, se puede utilizar como centro de flujo para controlar los límites máximo y mínimo del flujo. Por ejemplo, para controlar con precisión la cantidad de SMS enviados o recibidos por cada número de teléfono móvil o cada asunto de SMS (por ejemplo: la cantidad de códigos de verificación de inicio de sesión recibidos por cada número de teléfono móvil en un día, el proveedor de servicios generales hará un control , si lo necesitamos, puede hacerlo en su propia plataforma para un control más preciso).
Esta parte también puede desempeñar algunas funciones para evitar que se deslice, por ejemplo, limitar la cantidad de números de teléfono móvil que se pueden recibir para algunos mensajes de texto promocionales, etc. Por supuesto, esto solo puede ser seguridad auxiliar.

Centro de despacho

La parte central de la plataforma de SMS es el centro de despacho , que es una plataforma de fusión y despacho .
Aquí solo presento los conceptos de mi proyecto, si lo entiendes diferente no te preocupes, tienes razón.

Fusible

La siguiente es una explicación de Baidu.

Mecanismo de fusible El mecanismo de
fusión (Disyuntor), también conocido como mecanismo de placa de parada automática, se refiere a las medidas para suspender la negociación cuando la acción alcanza un punto de amplitud predeterminado fusible, riesgos de control de cambio asumidos. [1] Específicamente, es un mecanismo para establecer un precio de fusible para un determinado contrato antes de alcanzar el límite de precio, de modo que el precio de compra y venta del contrato solo pueda negociarse dentro de este rango de precios durante un período de tiempo.

En el mercado de valores, es una suspensión de las medidas comerciales para controlar los riesgos.
Este es casi el mismo significado en tecnología. Cuando una plataforma no alcanza nuestro número preestablecido de fallas en un período de tiempo, ingresará a un disyuntor. En el próximo período de tiempo, intentará enviar una solicitud de vez en cuando para probar Si este tipo de prueba, cuántas veces todo tiene éxito en sucesión, luego se reanuda la fusión, si falla, aumenta el tiempo de fusión.
De acuerdo con la plataforma de SMS, tenemos un modelo de proveedor de servicios múltiples. Debajo de cada tema, se configurarán múltiples proveedores de servicios de SMS. Cuando un proveedor de servicios cuelga y varias solicitudes consecutivas fallan, pensaremos que el proveedor de servicios no está disponible en a corto plazo. En el caso de la fusión, habrá solicitudes regulares al servidor de fusión para enviar mensajes cortos. Si el envío falla, aumente el tiempo de fusión de la solicitud periódica y aumente el intervalo de solicitud. En el caso de la fusión, si la solicitud es exitosa durante varias veces consecutivas, consideraremos que el proveedor de servicios recupere Normal, suelte el fusible.

Planificación

La siguiente es una explicación de Baidu.

Centro de despacho (centro de despacho): se refiere a un centro para la programación integral de múltiples recursos. Los recursos enviados incluyen los recursos naturales y los recursos sociales. Los recursos naturales incluyen la electricidad, la energía hidráulica, el gas natural, etc. Los recursos sociales incluyen personal, vehículos, materiales, etc.

Se puede entender literalmente, es decir, programar racionalmente los recursos para asegurar el funcionamiento normal del sistema.
En el sistema, hacemos principalmente dos tipos de programación, fusible y peso.
Prioridad: Fusible> Peso
Primero consideraremos el fusible, obtendremos todas las plataformas que no están en el período de fusible + plataformas que pueden ser interrumpidas por el fusible, y luego calcularemos estos datos de plataforma en función del peso. El fusible no se repetirá, lo más En la parte de configuración mencionada al principio y la parte lógica del fusible mencionada anteriormente, debería ser posible saber cómo hacer el fusible.
Para el método de cálculo del peso, hice una demostración de PHP e intenté agregar todos los comentarios. Es relativamente simple. Si tiene un método mejor, deje un mensaje.
He hecho varias pruebas en privado y he mostrado los resultados. Es obvio que las tres plataformas actuales, ayb, tienen más prioridad.

// 模拟平台数据
$platform = [
    [
        'name' => 'a',	// 平台名称
        'weight' => 30,	// 权重
    ],
    [
        'name' => 'b',
        'weight' => 70,
    ],
    [
        'name' => 'c',
        'weight' => 50,
    ]
];

// 测试排序后的数组的值
print_r(getWeight($platform));

// 递归获取根据权重排序后的平台顺序
function getWeight($platform)
{
    
    
    $resultData = [];   // 保存最终排序的数组
    $min = 1; // 初始化权重范围最小值
    $sum = 0;  // 初始化权重范围最大值
    $weightList = [];  // 初始化存放权重数据的数组

    // 如果只剩下一个平台,就不需要在判断,直接获取就可以
    if (count($platform) == 1) {
    
    
        $weightList[] = $platform;
        return $platform;
    }

    foreach($platform as $key => $platformOne) {
    
    
        $sum += $platformOne['weight']; // 获取当前权重范围最大值
        // 把当前平台权重换算成范围写入到权重数组中,
        $weightList[$key] = [
            'name' => $platformOne['name'],
            'min' => $min,  // 该范围的最小值
            'max' => $sum   // 该范围的最大值
        ];

        $min = $sum + 1; // 获得下一个平台的最小值
    }

    // 得到具体的随机数,1到权重总值之间的一个随机数
    $randNum = mt_rand(1, $sum);

    // 循环每一个权重范围的数组
    foreach($weightList as $k => $weightOne) {
    
    
        // 根据随机数及每个平台的权重范围得到当前最优先的,并把该平台从数组中刨除掉
        if (($weightOne['min'] <= $randNum)  && ($weightOne['max'] >= $randNum)) {
    
    
            $weightOne['randNum'] = $randNum;
            $resultData[] = $platform[$k];
            unset($platform[$k]);
            break;
        }
    }

    // 递归调用,把其他的平台重新按权重排序
    $resultData = array_merge($resultData, getWeight($platform));

    // 返回最终排好序的平台数组
    return $resultData;
}

Por supuesto, la programación no es solo así. Si solo necesitamos obtener la plataforma con la mayor prioridad, no obtendremos una clasificación de prioridad de todas las plataformas. También debemos considerar que si la plataforma con la mayor prioridad no envía SMS esta vez ¿Qué debo hacer? ¿Es solo para devolver un error de envío al usuario? Esto es imposible. Entonces nuestras ventajas multiplataforma se perderán. Todavía tenemos que dar un paso. Cuando el envío de mayor prioridad falla, juzgaremos la plataforma SMS actual para fusible ( fusible solo se activará aquí. Se puede activar asincrónicamente aquí ), y la siguiente plataforma enviará en secuencia hasta que el envío sea exitoso ( juzgue el estado actual del fusible de la plataforma, si es fusible, el número de éxitos + 1; si el número actual de éxitos excede el número establecido de éxitos del fusible , suelte el fusible (esto se puede procesar de forma asincrónica ), o todos fallan.

Centro de registro

El centro de registro es relativamente simple. Registra todos los registros de envío de SMS exitosos y fallidos, y registra la información relacionada con la plataforma, la información de la plantilla, la información de la firma, etc.
Use el modo de observador o el modo de estrategia para hacer la parte de devolución de llamada.
Además del registro, también se necesita un sistema de alarma. Por ejemplo, cuando la plataforma no envía SMS, no devuelve la llamada, activa un fusible y otras excepciones, necesitamos monitorear, el más simple es: Demasiado registro de archivos + alarma Dingding, puede hacer información detallada en un registro de archivos y luego usar la alarma Dingding para notificarnos de cualquier error que haya ocurrido, y puede coordinar y reparar tan pronto como sea posible.

diagrama de flujo

Lo que es inevitable en el desarrollo es el diagrama de flujo. Un buen diagrama de flujo puede ver intuitivamente si la lógica es razonable, si el flujo del código o del negocio es fluido, si hay errores obvios, etc.

El siguiente es el diagrama de flujo básico.
Haga clic aquí para saltar a la dirección original del diagrama de flujoElemento de lista
para iniciar una solicitud a una interfaz o microservicio -> Detección del centro de seguridad -> Obtener información de asunto de SMS -> Control de flujo -> Centro de despacho (incluido fusible) -> Enviar SMS -> End
Mind Map No escribiré más, porque hay demasiadas partes comerciales involucradas y no es conveniente extraerlas. Sin embargo, la introducción anterior puede reflejar básicamente los diversos componentes.

etapa de desarrollo

Elección del patrón de diseño

Supongo que te gusta

Origin blog.csdn.net/qq_15915293/article/details/105715648
Recomendado
Clasificación