¿Cuál es la mejor práctica: usar tablas db o colas de mensajes para moderar el contenido aprobado por humanos?

Si tiene muchos lectores que consumen elementos de la cola, entonces sí, use una cola de mensajes. Están hechos para ese patrón de uso.

Usamos un patrón de base de datos como cola en la aplicación en la que trabajo. Cuando me uní a la compañía por primera vez, dije: “¡eso es totalmente un antipatrón!” Comienzas a tener puntos muertos rápidamente si hay más de un hilo haciendo lecturas de bloqueo contra la tabla de la cola.

Pero aquí está la clave que hace que una base de datos como cola funcione: solo puede tener un consumidor de la cola. Si haces eso, los problemas de bloqueo desaparecen.

En nuestro caso, el consumidor de la cola es un módulo que llamamos el “despachador”. El despachador recoge elementos de la cola de la base de datos y los envía a los servidores de los trabajadores. El despachador realiza un seguimiento de qué tan ocupado está cada trabajador. El despachador también recibe resultados de los trabajadores y publica sus resultados en la base de datos.

Tenemos más de 150 servidores de trabajo, cada uno con 200 a 300 hilos de trabajo. Algo así, creo que tenemos hasta 38,000 hilos. Por lo tanto, siempre existe la posibilidad de que algunos subprocesos obtengan un error o algo y dejen de funcionar.

Por lo tanto, hay un mecanismo de tiempo de espera: si una tarea se ha enviado pero no ha obtenido resultados en X minutos, el despachador supone que falló y la reenvía a otro trabajador. Afortunadamente en nuestra aplicación, un retraso de unos minutos para 1 en un millón de tareas es aceptable. Y también es aceptable si 1 de cada 10 millones de tareas termina siendo procesada dos veces (tal vez un trabajador logró realizar la tarea, pero solo no pudo informar el resultado).

Procesamos de 7-10 millones de tareas por día de esta manera.